Libro_Guia_en_Espa_ol.pdf
Short Description
Download Libro_Guia_en_Espa_ol.pdf...
Description
ER ICA ÁM
ET
CI
BE
RO
www.pdftron.com
Lección 1
Introducción a la programación Matriz de dominio de objetivos Descripción de dominio de objetivos
Comprender la programación de computadoras
Comprender el almacenamiento y los tipos de datos computacionales
1.1
Comprender las estructuras de decisión
Comprender estructuras de decisión computacionales
1.2
Comprender las estructuras de repetición
Identificar el método apropiado para el manejo de las repeticiones
1.3
Comprender el manejo de excepciones
Comprender el manejo de errores
1.4
ÁM
Términos clave
Número de dominio de objetivos
ER ICA
Habilidad tecnológica
www.pdftron.com • Diagrama de fujo • Ciclo for • Ciclo foreach • If • If-else • Operador
• Programa • Recursión • Switch • Try-catch-fnally • Variable • Ciclo while
BE
RO
• Algoritmo • Vector • Constante • Tabla de decisión • Ciclo do-while • Excepción
CI
Como desarrollador de software para corporación Northwind, parte de su trabajo es desarrollar programas de computadora que resuelvan problemas de la compañía. Algunos de estos ejemplos son: analizar órdenes de clientes y determinar descuentos, así como actualizar la información del almacén sobre los miles de productos en el inventario y elaborar un reporte interactivo que permita al usuario ordenar y fltrar los datos.
ET
Es de suma importancia asegurarse que sus programas se diseñen de acuerdo a las especifcaciones. También necesita asegurarse que todos los cálculos sean precisos y completos. Los programas que desarrolle deberán ser robustos y capaces de mostrar mensajes de error pero también de continuar con el procesamiento. El lenguaje de programación que utilice le proporcionará una variedad de herramientas y técnicas que le permitirán llevar a cabo las tareas. Con base en la tarea, seleccione el tipo de datos y las estructuras de control que mejor se adecuen para solucionar el problema.
2
Lección 1
Comprender la programación de computadoras È EN RESUMEN
Un programa de computadora es un conjunto de instrucciones precisas para llevar a cabo una tarea. En esta sección aprenderá a escribir algoritmos y programas de computadoras para solucionar un problema dado. Además de escribir su primer programa computacional utilizando el lenguaje de programación C#, también aprenderá la estructura básica de un programa, así como a compilarlo, ejecutarlo, ingresar datos y generar resultados de un programa.
ER ICA
Introducción a los Algoritmos
Un algoritmo es un conjunto de pasos ordenados y fnitos para resolver un problema dado.
El término algoritmo se refere a un método para solucionar problemas. Los algoritmos se pueden describir con palabras pero podrían suceder errores de comprensión relacionados con la complejidad y ambigüedad de un idioma natural.
ÁM
De ahí que los algoritmos generalmente se escriban en formatos más simples y precisos como diagramas de fujo, árboles de decisión y tablas de decisión que representen un algoritmo como un diagrama, tabla o gráfco. Estas técnicas se utilizan generalmente antes de escribir los programas para contar con una mejor comprensión de la solución.
www.pdftron.com RO
Estas herramientas para el desarrollo de algoritmos pueden ayudarlo a expresar la solución para un problema de manera fácil, pero no se pueden ingresar directamente en la computadora. Para que una computadora entienda su algoritmo, necesita escribir un programa de computadora de manera formal utilizando un lenguaje de programación como C# sobre el cual aprenderá en la siguiente sección.
BE
Esta sección se enfoca en dos técnicas para algoritmos, los diagramas de fujo y las tablas de decisión que son más precisas que un idioma natural pero menos formales y más fáciles de utilizar que un lenguaje de programación.
Introducción a los diagramas de flujo
CI
Un diagrama de fujo es una representación gráfca de un algoritmo. Un diagrama de fujo se realiza generalmente utilizando símbolos estandarizados para diagramas de fujo. Algunos de los símbolos comunes de diagramas de fujo aparecen en la tabla 1-1.
ET
Tabla 1-1
Símbolos de diagramas de flujo comunes
Símbolo del diagrama de flujo
Descripción Inicio o final de un algoritmo Un proceso u operación computacional Operación de entrada o salida Operación de toma de decisión
Especifica el flujo de control
Introducción a la programación
3
Por ejemplo, la fgura 1-1 muestra un diagrama de fujo que ingresa dos números, los compara y produce como salida el número mayor. Figura 1-1
ÁM
ER ICA
Un diagrama de flujo sencillo que compara dos números y da como resultado el mayor
Como puede ver, este diagrama de fujo muestra en el orden correcto todos los pasos necesarios para llevar a cabo la operación. El control inicia con el símbolo Inicio y termina con el símbolo Fin. El proceso y operaciones de entrada/salida siempre tienen una sola entrada pero varias salidas. Se puede evaluar un diagrama de fujo llevando a cabo una “dry run” (ejecución seca). En ella se traza de forma manual lo pasos en el diagrama de fujo para revisar si los datos siguen la ruta correcta.
RO
www.pdftron.com Introducción a las tablas de decisión
ET
CI
BE
Cuando se requiere de una gran cantidad de condiciones en un algoritmo, las tablas de decisión son un formato más compacto y legible para representarlo. La tabla 1-2 muestra una tabla de decisión para calcular un descuento. Esta tabla genera un porcentaje de descuento dependiendo de la cantidad de producto que se haya comprado. La línea en negrita en la tabla divide la tabla de decisión en cuatro cuadrantes. El primer cuadrante en la izquierda superior especifca las condiciones (Cantidad y. Operadores ternarios: Los operadores ternarios toman tres operandos. Sólo hay un operador ternario, ?:, en C#.
ÁM
•
www.pdftron.com RO
Frecuentemente las expresiones involucran más de un operador. En este caso, el compilador necesita determinar cuál operador toma precedencia sobre otro. La tabla 1-4 contiene los operadores en C# en orden de precedencia. Entre más arriba se encuentre el operador en la tabla, más alta es su precedencia. Los operadores con precedencia más alta son evaluados antes que los de baja. Los operadores que aparecen en la misma fla tienen la misma .
Tabla 1-4
Categoría
BE
Precedencia de operadores
Primario
ET
CI
Unario
Operadores
x.y f(x) a[x] x++ x-- new typeof checked unchecked + - ! ~ ++x --x (T)x
Multiplicativo
* / %
Aditivo
+ -
Desplazamiento
>
Comprobación de tipos y relacionales
< > = is as
Igualdad
== !=
AND lógico
&
XOR lógico
^
Logical OR
|
AND Condicional
&&
OR Condicional
||
Condicional
?:
Asignación
= *= /= %= += -= = &= ^= |=
Introducción a la programación
11
El operador de incremento unario (++) agrega 1 al valor de un identifcador. De igual manera los operadores de decremento (--) substraen 1 al valor de un identifcador. Los operadores de incremento y decremento unario se pueden utilizar ya sea como prefjos o sufjos. Por ejemplo: int x = 10; x++; //valor de x es ahora 11 ++x; // valor de x es ahora 12
ER ICA
Sin embargo, la forma en la cual funcionan los operadores de incremento y decremento cuando se utilizan como parte de una asignación puede afectar los resultados. Cuando los operadores unarios de incremento y decremento se utilizan como prefjos, el valor actual del identifcador se regresa antes del incremento o decremento. Por el contrario, cuando se utilizan como sufjos, el valor del identifcador se regresa después del incremento o decremento. Para comprender lo anterior, considere el siguiente código: int y = x++; // el valor de y es 12
ÁM
int z = ++x; // el valor de z es 14
Aquí en la primera sentencia, el valor de x se regresa antes del incremento. Como resultado, después de que se ejecuta la sentencia, el valor de y es 12 y el valor de x es 13.
www.pdftron.com RO
En la segunda sentencia, el valor de x se incrementa antes de regresar su valor para la asignación. Por lo tanto, después de ejecutar la sentencia, el valor tanto de x como de z es 14.
Comprender los métodos
BE
Los métodos sonbloques de código que contienen series de sentencias. Los métodos pueden recibir entradas vía argumentos y pueden regresar un valor a quien los invoca.
CI
; ¿Listo para la certificación?
En la lista de código anterior, aprendió sobre el método Main. Los métodos se encuentran donde están las acciones en un programa. Un método es un conjunto de sentencias que se ejecutan cuando se invoca el método.
ET
¿Comprende los elementos básicos de la programación como las variables, tipos de datos, operadores y métodos? -1.1
El método Main no regresa un valor, lo cual se indica utilizando la palabra void. Si un método fuera a regresar un valor, se colocaría un tipo de datos apropiado del valor retornado en lugar de void.
Los miembros de la clase pueden tener modifcadores como static, public y private. Estos modifcadores especifcan cómo y dónde se pueden acceder los miembros de la clase. Aprenderá más sobre estos modifcadores en la Lección 2.
12
Lección 1
Comprender las estructura de decisión È EN RESUMEN
Las estructuras de decisión introducen la habilidad de toma de decisiones al programa, también le permiten diversifcarse a diferentes secciones del código dependiendo del valor verdadero de una expresión booleana.
ER ICA
Las estructuras de decisión en C# son if, if-else y switch. En las siguientes secciones veremos cada una de estas sentencias a detalle.
La sentencia if
La sentencia if ejecutará una secuencia de sentencias dada sólo si la expresión booleana correspondiente es verdadera.
A veces en su programa, querrá que una secuencia de sentencias se ejecute sólo si una condición es verdadera.
ÁM
En C# puede realizarlo al utilizar la sentencia if. Considere los siguientes pasos para crear un programa que utilice la sentencia if.
www.pdftron.com RO
Æ Uso de la sentencia if
PREPÁRESE. Para utilizar la sentencia if, realice lo siguiente:
1. Agregue un nuevo proyecto de aplicación de consola (de nombre if_Statement) a la solución Lesson01.
BE
2. Agregue el siguiente código al método Main de la clase Program.cs: int number1 = 10; int number2 = 20;
ET
CI
if (number2 > number1) {
Console.WriteLine(“number2 es mayor que number1”);
} 3. Seleccione Depurar, Iniciar sin depurar, o presione Ctrl+F5. 4. Verá el resultado del programa en la ventana de línea de comandos. 5. Presione una tecla para cerrar la ventana de consola. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.
Este código es funcionalmente equivalente al diagrama de fujo de la Figura 1-4.
Introducción a la programación
Figura 1-4
13
INICIO
El diagrama de flujo equivalente a la sentencia if
n1 = 10
n2 = 20
No
ER ICA
n2 > n1? Si
Salida “n2 es > n1”
ÁM
FIN
Aquí la sentencia de salida sólo se ejecutará si la expresión booleana en el paréntesis es verdadera. Si la expresión es falsa, el control pasa a la siguiente sentencia que sigue de la sentencia if.
www.pdftron.com RO
En C#, los paréntesis alrededor de la condición son obligatorios, no así las llaves, estas son opcionales si sólo hay una sentencia en el bloque de código. Por lo tanto, la sentencia if anterior equivale a: if (number2 > number1)
BE
Console.WriteLine(“number2 es mayor que number1”);
Por otro lado, observe este ejemplo:
ET
CI
if (number2 > number1) Console.WriteLine(“number2 es mayor que number1”);
Console.WriteLine(number2);
Aquí, sólo la primera sentencia Console.WriteLine es parte de la sentencia if. La segunda sentencia Console.WriteLine siempre se ejecutará no importando el valor de la expresión booleana. Para tener una mejor claridad, es mejor encerrar la sentencia que se vaya a ejecutar condicionalmente entre llaves. Las sentencias if también se pueden anidar dentro de otras sentencias if, como se muestra en el siguiente ejemplo: int number1 = 10;
14
Lección 1
if (number1 > 5) { Console.WriteLine(“number1 es mayor que 5”); if (number1 < 20) {
} }
ER ICA
Console.WriteLine(“number1 es menor que 20”);
Puesto que las dos condiciones se evalúan como verdadero, se generará el siguiente resultado: number1 es mayor que 5
ÁM
number1 es menor que 20
www.pdftron.com Pero ¿qué sucedería si el valor de number1 fuera 25 en lugar de 10 antes de la ejecución de la sentencia exterior? En este caso, la primera expresión booleana se evaluaría como verdadera pero la segunda se evaluaría como falsa y se generaría el siguiente resultado:
La sentencia if-else
RO
number1 es mayor que 5
BE
La sentencia if-else le permite a su programa llevar a cabo una acción si la expresión booleana se evalúa como verdadera y una acción diferente si la expresión se evalúa como falsa. Considere los siguientes pasos para crear un programa que utiliza una sentencia if-else.
ET
CI
Æ Uso de la sentencia if-else
PREPÁRESE. Para utilizar una sentencia if-else, realice lo siguiente:
1. Agregue un nuevo proyecto de aplicación de consola (de nombre ifelse_Statement) a la solución Lesson01. 2. Agregue el siguiente código al método Main de la clase Program.cs:
TestIfElse(10); 3. Agregue el siguiente método a la clase Program.cs: public static void TestIfElse(int n) { if (n < 10) {
Introducción a la programación
es menor que 10”);
es menor que 20”);
es menor que 30”);
ER ICA
Console.WriteLine(“n } else if (n < 20) { Console.WriteLine(“n } else if (n < 30) { Console.WriteLine(“n } else { Console.WriteLine(“n }
15
}
es mayor que o igual a 30”);
4. Seleccione Depurar, Iniciar sin depurar o presione Ctrl+F5.
5. Verá el resultado del programa en la ventana de comandos.
ÁM
6. Presione una tecla para cerrar la ventana.
www.pdftron.com 7. Modifique el código del método Main para invocar el método TestIfElse con valores diferentes. Observe cómo se ejecuta una bifurcación de la sentencia if-else como resultado de sus cambios.
RO
PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.
BE
El código en el método TestIfElse combina varias sentencias if-else para evaluar varias condiciones. Si el valor de n es 25, entonces las primeras dos condiciones (n < 10 y n < 20) se evaluarán como falsas pero la tercera condición (n= 30”
FIN
16
Lección 1
La sentencia switch La sentencia switch permite una bifurcación múltiple. En muchos casos, el uso de una sentencia switch puede simplifcar una combinación compleja de sentencias if-else.
La expresión que sigue a la sentencia case debe ser una expresión constante y debe ser del mismo tipo de datos de la expresión del switch.
ER ICA
Tome Nota
La sentencia switch consiste de la palabra reservada switch, seguida de una expresión en paréntesis, seguida de un bloque para el mismo. El bloque del switch puede incluir una o más sentencias case o una sentencia default. Cuando se ejecuta la sentencia switch, dependiendo del valor de la expresión del switch, se transfere el control a una sentencia case coincidente. Si la expresión no coincide con ninguna sentencia case, el control se transfere a la sentencia default. La expresión del switch debe ir entre paréntesis. Considere los siguientes pasos para crear un programa que utiliza una sentencia switch para evaluar expresiones simples.
Æ Uso de la sentencia switch
ÁM
PREPÁRESE. Para utilizar la sentencia switch, realice lo siguiente:
1. Agregue un nuevo proyecto de aplicación de consola (de nombre switch_Statement) a la solución Lesson01.
www.pdftron.com 2. Agregue el siguiente código al método Main de la clase Program.cs:
RO
TestSwitch(10, 20, ‘+’);
3. Agregue el siguiente método a la clase Program.cs:
public static void TestSwitch(int op1, int op2, char opr)
BE
{
int result;
ET
CI
switch (opr) {
case ‘+’: result = op1 + op2; break; case ‘-’: result = op1 - op2; break; case ‘*’:
Introducción a la programación
17
result = op1 * op2;
Tome Nota El método Console. Write puede utilizar cadenas de formato como “Resultados: {0}” para dar formato al resultado. Aquí la cadena {0} representa el primer argumento que sigue a la cadena de formato. En el método TestSwitch, la cadena de formato “{0}” se reemplaza con el valor del siguiente argumento, result.
break; case ‘/’: result = op1 / op2;
default:
ER ICA
break;
Console.WriteLine(“Operador desconocido”); return; }
Console.WriteLine(“Resultado: {0}”, result);
}
ÁM
return;
www.pdftron.com 4. Seleccione Depurar, Iniciar sin depurar, o presione Ctrl+F5.
5. Verá el resultado del programa en la ventana de comandos.
RO
6. Presione una tecla para cerrar la ventana.
7. Modifique el código del método Main para llamar al método TestSwitch con valores diferentes. Observe cómo se ejecuta una bifurcación diferente de la sentencia switch como resultado de sus cambios.
BE
PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.
ET
CI
Aquí, el método TestSwitch acepta dos operandos (op1 y op2) y un operador (opr) y evalúa la expresión resultante. El valor de la expresión switch se compara con las sentencias case en el bloque del switch. Si existe una coincidencia, se ejecutan las sentencias del case correspondiente. Si no hay coincidencias, el control se transfere a la bifurcación opcional default.
Hay una sentencia break después de cada case. La sentencia break termina la sentencia switch y transfere el control a la siguiente sentencia fuera del bloque del switch. Al utilizar un break se asegura que sólo se ejecute una bifurcación y evita errores de programación. De hecho, si coloca código después de la sentencia case, debe incluir un break (u otra sentencia de transferencia de control como el return) para asegurarse que el control no se transfera de un case a otro.
Por el contrario, si no hay código en la sentencia case, está bien si el control pasa a la sentencia case subsecuente. El siguiente código demuestra que tan útil puede ser esto: public static void TestSwitchFallThrough() {
Lección 1
DateTime dt = DateTime.Today;
Tome Nota Puede decidir entre utilizar sentencias ifelse o una sentencia switch dependiendo de la naturaleza de comparación y legibilidad del código. Por ejemplo, el código del método TestIfElse toma decisiones con base en las condiciones que son más apropiadas de utilizar con las sentencias if-else. En el método TestSwitch, las decisiones se basan en valores constantes, por lo que el código es mucho más legible en una sentencia switch.
switch (dt.DayOfWeek) { case DayOfWeek.Monday: case DayOfWeek.Tuesday:
ER ICA
case DayOfWeek.Wednesday: case DayOfWeek.Thursday: case DayOfWeek.Friday:
Console.WriteLine(«Hoy es un día laboral»); break; default:
Console.WriteLine(«Hoy es un día de fn de semana»);
ÁM
18
www.pdftron.com break;
}
}
¿Comprende las estructuras de decisión computacionales como las bifurcaciones y la repetición? -1.2
Aquí si el valor de la expresión dt.DayofWeek es DayOfWeek.Monday, entonces existe una coincidencia con el primer case, pero puesto que no hay código (o una sentencia de transferencia de control, la ejecución continúa a la siguiente sentencia, resultando en la aparición del mensaje “Hoy es un día laboral” en la ventana de consola.
BE
RO
; ¿Listo para la certificación?
CI
Comprender las estructuras de repetición
ET
È EN RESUMEN
C# cuenta con cuatro estructuras de control diferentes que permite a los programas llevar a cabo tareas repetitivas: el ciclo while, el do-while, el for y el foreach. Estas sentencias de control de repetición se pueden utilizar para ejecutar las sentencias dentro el cuerpo del ciclo una cantidad de veces dependiendo de los criterios de terminación del ciclo. Un ciclo también puede interrumpirse utilizando una sentencia de transferencia de control que asigne el control fuera del ciclo. Estas sentencias son break, goto, return o throw. La sentencia continue se puede utilizar para pasar el control a la siguiente iteración del ciclo sin salir de este.
Introducción a la programación
19
Comprender el ciclo while El ciclo while ejecuta repetidamente un bloque de sentencias hasta que una expresión booleana se evalúe como falsa. La forma general de un ciclo while es while (boolean test) sentencia
Puesto que la evaluación booleana se lleva a cabo antes de la ejecución del ciclo, es posible que el cuerpo del while nunca se ejecute. Esto pasa si la evaluación resulta falsa desde la primera vez. Considere los siguientes pasos para crear un programa que utiliza la sentencia while.
ÁM
La evaluación booleana debe colocarse entre paréntesis. Si se ejecuta más de una sentencia como parte del ciclo while, se deben colocar entre llaves.
Aquí, se lleva a cabo una evaluación booleana al principio del ciclo. Si es verdadero, se ejecuta el cuerpo del ciclo y se realiza de nuevo la evaluación. Si la evaluación resulta en un valor falso, se termina el ciclo y el control se transfere a la siguiente sentencia después del ciclo.
ER ICA
Tome Nota
www.pdftron.com Æ Uso de la sentencia while
RO
PREPÁRESE. Para utilizar la sentencia while, lleve a cabo las siguientes tareas:
1. Agregue un nuevo proyecto de aplicación de consola (de nombre while_Statement) a la solución Lesson01.
2. Agregue el siguiente código al método Main de la clase Program.cs:
BE
WhileTest();
3. Agregue el siguiente método a la clase Program.cs:
CI
private static void WhileTest() {
ET
int i = 1; while (i target) return 1; else return -1;
74
Lección 2
}
d. public int CompareTo(object obj) {
Rectangle target = (Rectangle)obj; if (this == target) return 1; return -1; else return 0; }
ER ICA
else if (this > target)
11. Se encuentra escribiendo un código para un nuevo método de nombre Process:
ÁM
a. void Process(object o) b. { c. d. }
www.pdftron.com RO
12. El código recibe un parámetro de tipo objeto. Necesita castear este objeto en el tipo Rectangle. En ocasiones, el valor de o enviado al método puede no ser un valor de Rectangle válido. Necesita asegurarse que el código no genere ningún error System. InvalidCastException al hacer las conversiones. ¿Cuál de las siguientes líneas de código debería utilizar dentro del método Process? Rectangle r = (Rectangle) o;
Rectangle r = o as Rectangle; Rectangle r = o is Rectangle;
Rectangle r = (o != null) ? o as rectangle:(Rectangle) o;
BE
a. b. c. d.
ET
CI
13. Se encuentra escribiendo el código para controlar los eventos en su programa. Defne un delegado de nombre RectangleHandler como el siguiente: a. public delegate void RectangleHandler(Rectangle rect); b. También crea una variable del tipo RectangleHandler como el siguiente:
c. RectangleHandler handler;
14. Más adelante en el programa, necesita agregar un método de nombre DisplayArea a la lista de invocación de métodos de la variable controladora. La frma del método DisplayArea corresponde al de la frma del método RectangleHandler. Cualquier código que escriba no debería afectar ningún código controlador de eventos existente. ¿Cuál de los siguientes códigos debería escribir? a. b. c. d.
Handler = new Rectanglehandler(DisplayArea); Handler = DisplayArea;
Handler += DisplayArea; Handler -= DisplayArea;
Comprender los conceptos básicos de bases de datos
75
» Evaluación de destreza Escenario 2-1: Creación de propiedades
ER ICA
Necesita crear una clase de nombre Product que represente un producto. La clase tiene una sola propiedad de nombre Name. Los usuarios de la clase Product deben ser capaces tanto de obtener como de establecer el valor de la propiedad Name. Sin embargo, cualquier intento por establecer el valor de Name a una cadena vacía o a un valor null debe arrojar una excepción. El usuario de la clase Product no debe ser capaz de acceder a cualquier otro miembro de datos de la clase Product. ¿Cómo creará esta clase?. Escenario 2-2: Creación de un Struct
Se encuentra desarrollando un juego que necesita representar la ubicación de un objetivo en el espacio tridimensional. La ubicación se identifca por los tres valores enteros x, y y z. Creará miles de estas estructuras de datos en su programa. Necesita una forma efciente para almacenar estos datos en memoria. Es improbable que necesite heredar cualquier otro tipo desde este tipo de ubicación. ¿Cómo debería representar la ubicación en su programa?.
ÁM
Evaluación de destreza
Proyecto 2-3: Sobrescribiendo el método ToString
www.pdftron.com RO
Se encuentra escribiendo un código para una clase Product. La clase Product contiene el nombre y el precio de un producto. Necesita sobrescribir el método de la clase base (System.Object) ToString para proporcionar información sobre los objetos de la clase product al código invocador. ¿Cuál código necesita escribir para la clase Product para cumplir con este requisito?. Proyecto 2-4: Creación y manejo de eventos
BE
Se encuentra escribiendo un código para la creación y manejo de eventos en su programa. La clase SampleClass necesita implementar la siguiente interface:
ET
CI
public delegate void SampleDelegate(); public interface ISampleEvents {
event SampleDelegate SampleEvent; void Invoke();
}
Necesita escribir el código para SampleClass y para un método test que crea una instancia de SampleClass e invoca el evento. ¿Cuál código debería escribir?. En una clase defnió un método llamado Render. Este método proporciona funcionalidad a los archivos Render bitmap en pantalla. Le gustaría que las clases
Lección 2
ÁM
ER ICA
76
ET
CI
BE
RO
www.pdftron.com
Lección 3
Desarrollo General de Software Matriz de Dominio de Objetivos Descripción del Dominio de Objetivo
Número del Dominio del Objetivo
Comprender la Administración del Ciclo de Vida de una Aplicación
Comprender la Administración del Ciclo de Vida de una Aplicación
3.1
Comprender las Pruebas
Comprender la Administración del Ciclo de Vida de una Aplicación
3.1
Comprender las Estructuras de Datos
Comprender los algoritmos y estructuras de datos
3.3
Comprender los Algoritmos de Clasificación
Comprender los algoritmos y estructuras de datos
3.3
ÁM
ER ICA
Habilidad Tecnológica
www.pdftron.com Términos Clave
• Ordenamiento rápido • Colas • Pruebas de regresión • Pilas
• Pruebas de unidad • Pruebas de caja blanca
BE
RO
• Arreglos o vectores • Pruebas de caja negra • Ordenamiento de burbuja • Listas enlazadas
ET
CI
Como desarrollador para la Corporación de Northwind, trabaja como parte de un equipo para desarrollar programas de computadora que resuelven problemas de negocios complejos. Como desarrollador, participa en el ciclo de vida de desarrollo de aplicaciones. Tiene que conocer las diferentes fases del ciclo de vida de aplicación y a menudo necesita interactuar con el equipo de pruebas de software y participar en las pruebas en persona. Necesita tener una comprensión general de las pruebas de software. Cuando desarrolla software utiliza varios tipos de estructuras de datos y algoritmos. Necesita saber cuál estructura de datos utilizar para cada una de las áreas a desarrollar así como conocer las implicaciones de su elección. También debe tener una comprensión general de varios métodos de ordenación.
78
Lección 3
Comprender la Administración del Ciclo de Vida de una Aplicación È EN RESUMEN
ER ICA
La Administración del Ciclo de Vida de una Aplicación se refere a las distintas actividades que giran en torno a un nuevo producto de software desde su comienzo hasta que el producto de software madura y eventualmente se deshecha. Desarrollar una aplicación de software es más que solo escribir el código. Se necesita desarrollar distintas actividades en el orden correcto para desarrollar una aplicación de software exitosamente. Administrar estas actividades es conocido colectivamente como una Administración del Ciclo de Vida de Aplicación (ALM). Algunas de las actividades que son parte del proceso de ALM como se muestra en la Figura 3-1 son: Requerimientos, Diseño, Desarrollo, Pruebas, Entrega y Administración de Liberación. Figura 3-1
ÁM
Administración del Ciclo de Vida de Aplicación
BE
RO
www.pdftron.com En esta sección aprenderá acerca de las distintas actividades y roles involucrados en cada una de las actividades en la administración del ciclo de vida de una aplicación.
ET
CI
El ciclo de vida de aplicación inicia cuando la necesidad por una nueva aplicación de software es identifcada. El administrador de un negocio generalmente es la persona que patrocina el proyecto. Él o ella analizan la necesidad, verifcan cómo el proyecto encaja con la estrategia global del negocio, organiza la fnanciación e inicializa el proceso de selección de equipo para el proyecto. Un administrador del proyecto es probablemente la primera persona contratada por el administrador del negocio. Este administrador del proyecto es responsable de la ejecución global del proyecto. Las responsabilidades principales de un administrador de proyecto son el garantizar que el proyecto se ajuste al presupuesto y se termine en tiempo. El administrador de proyecto es responsable de la contratación de miembros del equipo y de facilitar la cooperación dentro del equipo.
Comprender el Análisis de Requerimientos El análisis de requerimientos es el proceso de determinar los requerimientos del negocio detallados para un nuevo sistema de software.
Desarrollo General de Software
79
El análisis de requerimientos es uno de los pasos más importantes en el ciclo de vida de aplicación. Requerimientos precisos, completos y bien documentados son críticos para el éxito del proyecto. Los requerimientos pueden ser funcionales o no funcionales. Los requerimientos funcionales especifcan exactamente lo que el sistema está diseñado para llevar a cabo. En contraste, los requerimientos no funcionales son requerimientos de calidad tales como la escalabilidad, seguridad, confabilidad, etc.
Comprender el Proceso de Diseño
ER ICA
Un analista de negocios es responsable de analizar las necesidades del negocio y convertirlas en requerimientos que pueden ser ejecutados por el equipo de desarrollo.
El proceso de diseño es utilizado para crear planes, modelos y la arquitectura de cómo el software será implementado. El proceso de diseño despliega especifcaciones técnicas detalladas que serán utilizadas por el desarrollo del sistema. La salida del proceso de diseño es un conjunto de modelos y especifcaciones técnicas que proporcionan la dirección a los desarrolladores y otros miembros del equipo durante la actividad de desarrollo de software. La salida del proceso de diseño es más abstracta que concreta. Por ejemplo, no existen sistemas reales con los cuales pueda interactuar.
ÁM
Algunos de los participantes importantes en esta actividad son:
www.pdftron.com •
RO
•
Un arquitecto diseña el proyecto del sistema. Esto incluye identifcar los componentes y servicios, su comportamiento y cómo interactúan entre sí y con el mundo exterior. Un diseñador de experiencia del usuario crea la experiencia del usuario del sistema. Los elementos de experiencia del usuario incluyen el diseño de los elementos de la interfaz de usuario (UI), diseñar la navegación entre varios formularios, pantallas o páginas, etc.
BE
Comprender el Desarrollo de Software
La actividad de desarrollo de software involucra la implantación de diseño creando código de software, bases de datos y otro contenido relacionado.
ET
CI
Esta es la actividad donde los requerimientos son implementados en código funcional basado en el diseño que fue establecido en la actividad previa. Al fnal de esta actividad, se tiene una salida concreta en formato de un sistema de software con el cual el usuario puede interactuar. Los participantes en el proceso de desarrollo son:
• • • •
Los desarrolladores escriben el código con base en los requerimientos reunidos por el analista de negocios, la arquitectura establecida por el arquitecto y la experiencia del usuario desarrollada por el diseñador de experiencia del usuario. Los administradores de bases de datos (DBAs) son responsables de la implementación y administración de la base de datos. Los DBAs también planean la integridad de datos, seguridad y velocidad. Los escritores técnicos desarrollan los manuales del sistema y archivos de ayuda que serán entregados junto con la aplicación. Los desarrolladores de contenido son expertos en la material quienes desarrollan el contenido del sistema. Por ejemplo, si la aplicación es un sitio web de reseña de
80
Lección 3
películas, no es sufciente sólo mostrar videos en el sitio, necesita asegurarse que hay sufciente contenido para reunir el interés del usuario.
Comprendiendo las Pruebas de Software La Prueba de Software verifca que la implementación coincide con los requerimientos del sistema.
ER ICA
La prueba de software es utilizada para asegurar la calidad del producto fnal. La prueba puede identifcar posibles lagunas entre las expectativas del sistema como se describen en el documento de requerimientos y el comportamiento real del sistema. Un punto importante en la prueba de software se lleva a cabo por los testers (probadores) quienes verifcan la aplicación en acción para asegurarse que satisface los requerimientos. Los problemas identifcados por los testers son asignados a una persona para repararlos. Por ejemplo, un defecto en el código será asignado a un desarrollador para repararlo.
Comprender la Administración de Liberación
ÁM
La actividad de administración de liberación es utilizada para administrar el desarrollo, entrega y soporte de liberaciones de software.
La administración de liberación incluye actividades tales como empaquetado y despliegue del software, administración de defectos de software y administración de solicitudes de cambio de software.
www.pdftron.com •
; ¿Listo para la certificación?
•
ET
CI
¿Comprende la administración del ciclo de vida de aplicación y sus actividades? — USD 3.1
Administrador de Liberación: el administrador de liberación coordina a varios equipos y unidades del negocio para garantizar la liberación a tiempo del producto de software. Personal de Operación: Se aseguran que el sistema sea entregado como se prometió. Esto podría involucrar quemar los DVDs y embarcarlos conforme se reciben las órdenes. O podría ser mantener un sistema de Software como un Service (SaaS) de forma regular. El personal de operación es también responsable de la liberación de cualquier actualización del sistema (con reparadores de errores o nuevas características). Personal de soporte técnico: Interactúan con clientes y ayudan a resolver sus problemas con el sistema. El soporte técnico puede generar métricas valiosas acerca de cuáles áreas del sistema son más difíciles para los usuarios y que posiblemente necesiten ser actualizadas en la próxima versión del software.
BE
•
RO
Los participantes principales en las actividades de administración son:
Comprender las Pruebas È EN RESUMEN
La prueba de software es el proceso de verifcar el software contra sus requerimientos. La prueba se realiza después de que la mayoría del trabajo de desarrollo es completado. La prueba de software es un proceso de verifcar que el software funciona como se espera y cumple todos sus requerimientos técnicos y de negocios. Cuando hay diferencia entre
Desarrollo General de Software
81
lo esperado y el comportamiento actual del sistema, un defecto de software (o “bug”) es registrado y eventualmente pasado al responsable para repararlo.
Comprender los Métodos de Prueba
ER ICA
Las pruebas de software involucran tanto pruebas funcionales y no funcionales. La prueba funcional es probar precisamente los requerimientos funcionales del sistema y las características que conforman la funcionalidad esencial. Por ejemplo, probar si el usuario puede agregar artículos a un carrito de compras es parte de la prueba funcional para un sitio web de comercio electrónico. Por otro lado, la prueba no funcional involucra pruebas de atributos de software que no son parte de la funcionalidad esencial pero son parte de los requerimientos no funcionales, tales como la escalabilidad, facilidad de uso, seguridad, etc.
Los métodos de prueba de software son generalmente divididos en pruebas de caja blanca y caja negra. Tradicionalmente hay dos enfoques en la prueba de software:
• •
Prueba de caja negra Prueba de caja blanca
ÁM
La prueba de caja negra trata al software como una caja negra, enfocándose sólo en las entradas y salidas. Cualquier conocimiento del funcionamiento del sistema interno no es utilizado para la prueba. En contraste, en la prueba de caja blanca, los testers utilizan su conocimiento del interior del sistema para probar el sistema. Por ejemplo, en la prueba de caja blanca, los testers tienen acceso al código fuente.
www.pdftron.com RO
Estas técnicas se complementan entre sí. La prueba de caja negra es más utilizada para asegurarse que todos los requerimientos son cubiertos. La prueba de caja blanca es utilizada para asegurarse que cada método o función tiene sus propios casos de prueba disponibles.
Comprender los Niveles de Prueba
BE
La prueba se lleva cabo en varias fases del ciclo de vida del desarrollo de aplicación. Los Niveles de Prueba especifcan donde tiene lugar la prueba del ciclo de vida. Los niveles de prueba están defnidos por donde tiene lugar la prueba en el ciclo de vida del desarrollo de software. Están los siguientes cinco niveles de prueba:
•
ET
CI
Tome Nota Es importante notar que el proceso de prueba de software puede sólo ayudar a encontrar defectos, no garantiza la ausencia de defectos. El software complejo tiene un gran número de posibles rutas de ejecución y muchos parámetros que pueden afectar su comportamiento. No es factible y a menudo no es posible probar todas las diferentes situaciones que encontrará el software en un entorno de producción.
•
Prueba de unidad: La prueba de unidad verifca la funcionalidad de una unidad de código. Por ejemplo, una prueba de unidad puede probar si un método retorna el valor correcto. La prueba de unidad es una prueba de caja blanca y a menudo es hecha por el desarrollador que escribe el código. La prueba de unidad a menudo utiliza una herramienta automatizada que puede simplifcar el desarrollo de casos y también mantiene registro de si una modifcación de software causa que falle alguna de las pruebas de unidad existentes. Visual Studio tiene soporte integrado para la prueba de unidad. También puede utilizar herramientas de apertura de código tales como NUnit para automatizar pruebas de unidad para código de.NET Framework. Prueba de Integración: La prueba de integración prueba la interfaz entre los componentes de software. La prueba de integración puede ser desempeñada incrementalmente conforme los componentes se desarrollan, o puede ser llevada a cabo como un “bigbang” cuando todos los componentes están listos para trabajar juntos. El primer método se prefere sobre el segundo puesto que reduce el riesgo e incrementa la confanza en el sistema que se esté desarrollando. La prueba de integración puede también involucrar la prueba de interacción de componentes
Lección 3
Tome Nota Es mucho más efectivo y menos costoso encontrar defectos antes que tarde en el ciclo de desarrollo de software.
• •
•
¿Comprende los distintos métodos de prueba? — USD 3.1
ÁM
•
; ¿Listo para la certificación?
con un sistema externo. Por ejemplo, si un componente se basa en datos de un servicio Web externo, la prueba de integración garantiza que el componente está funcionando correctamente con la aplicación externa. Prueba de sistema: La prueba de sistema es la prueba global del sistema de software. En este punto todos los componentes del sistema implementados están funcionando juntos y con cualquier sistema externo. Prueba de aceptación: Este nivel de prueba a menudo es desempeñado por los propios clientes. Generalmente hay dos niveles de pruebas aceptación previa a la liberación amplia del producto: prueba alfa y prueba beta. La prueba Alfa es desempeñada por un grupo muy limitado de usuarios y es una oportunidad para dar una vista de cerca al producto a los clientes más importantes y reunir retroalimentación. Las liberaciones Alfa pueden omitir algunas características y generalmente la falta de muchos atributos no funcionales tales como el rendimiento. En el siguiente nivel de prueba, la prueba beta, libera el producto a una audiencia más amplia de clientes y solicita retroalimentación. En términos de funcionalidad, la liberación beta del software es muy cercana a la liberación fnal. Sin embargo, los equipos de desarrollo podrían estar trabajando en mejorar el rendimiento y reparando algunos defectos conocidos. Prueba de Regresión: Conforme los defectos son reportados y reparados, es importante asegurarse que una reparación no rompe nada que funcionaba previamente. Esto se lleva a cabo como parte de la prueba de regresión. Con cada nueva reparación, los testers de software ejecutan una serie de pruebas de regresión para asegurarse que la funcionalidad que se sabía que funcionaba aun funciona.
ER ICA
82
www.pdftron.com RO
Comprender las Estructuras de Datos È EN RESUMEN
BE
Las estructuras de datos son técnicas para organizar y almacenar datos en la memoria de la computadora. El cómo la información es almacenada afecta la manera en la cual los datos son recuperados y manipulados. Comprender una estructura de datos involucra comprender no solo el patrón de almacenamiento sino también conocer los métodos utilizados para crear, acceder y manipular la estructura de datos.
ET
CI
Las estructuras de datos son los bloques de construcción de la mayoría de los programas de computadora y permite a los desarrolladores el implementar funcionalidad compleja. La mayoría de los frameworks de programación proporcionan soporte integrado para una variedad de estructuras de datos y métodos asociados para manipular estas estructuras de datos. En esta sección aprenderá algunos tipos distintos de estructuras de datos de manera que está familiarizado con las técnicas generales para la manipulación de estructuras de datos.
Arreglos
Un arreglo es una colección de ítems almacenados en una ubicación de memoria contigua y direccionados utilizando uno o más índices. Un arreglo es una estructura de datos muy común que representa una colección de ítems de un tipo similar. Los ítems en un arreglo son almacenados en ubicaciones de memoria contigua. Un arreglo es una estructura de datos homogénea ya que todos los ítems de un arreglo son del mismo tipo de datos. Cualquier ítem del arreglo puede ser directamente accedido utilizando un índice. En .NET Framework, los índices de arreglo están basados en ceros.
Desarrollo General de Software
83
Representación Interna En el siguiente código, la primera sentencia crea una variable de arreglo y la segunda sentencia inicializa la variable con un arreglo de cuatro enteros: 1. int[] numbers; 2. numbers = new int[4];
ER ICA
Inicialmente, los números variables serán establecidos a null debido a que el arreglo aún no está inicializado. La segunda sentencia inicializa el arreglo asignando un espacio de memoria contigua lo sufcientemente grande para almacenar cuatro enteros en la pila de memoria. La dirección de inicio en la memoria asignada es almacenada en la variable del arreglo numbers como se muestra en la Figura 3-2. Todos los elementos del arreglo son inicializados en este caso con el valor 0 ya que es el valor por defecto para un entero. Figura 3-2
ÁM
Representación interna de una estructura de datos de un arreglo
RO
www.pdftron.com
ET
CI
BE
La variable numbers entonces actúa como una referencia a la ubicación de memoria asignada al arreglo. El nombre del arreglo puede ser utilizado para acceder a cada uno de los ítems de arreglo directamente. En el.NET Framework, todos los arreglos están basados en cero. Esto es, el primer ítem del arreglo es accedido utilizando un índice 0, como esto: numbers[0], el segundo ítem es accedido por numbers[1],y así sucesivamente.
También es posible tener arreglos multidimensionales. Un arreglo de dos dimensiones puede ser visto como una tabla donde cada celda es un elemento del arreglo y puede ser direccionado utilizando el número de fla y el número de columna al cual pertenece. Tanto el número de fla y el número de columna son indexados por cero. Por ejemplo, la expresión table[2, 3] se refere a un ítem en la tercera fla y en la cuarta columna de un arreglo por el nombre table.
Operaciones Comunes El arreglo soporta las siguientes operaciones:
• •
Asignación Acceso
Para trabajar con un arreglo, primero asigne la memoria creando e inicializando un arreglo
84
Lección 3
como se mostró previamente. Una vez que el arreglo es asignado, puede acceder a cualquier elemento del arreglo en cualquier orden que desee directamente referenciando a su índice. Por ejemplo, el siguiente código asigna un valor de 10 al cuarto ítem del arreglo, y el doble de ese valor es entonces asignado a la variable calc: 3. number[3] = 10; 4. intcalc = number[3] * 2;
Rendimiento y uso
ER ICA
Los contenidos de un arreglo son establecidos como un bloque contiguo de memoria y puede ser directamente accedido utilizando el índice del arreglo. Por lo tanto la lectura o escritura en un arreglo es extremadamente rápida. Sin embargo, los arreglos están limitados por los requerimientos de homogeneidad y de tamaño fjo. Aunque el tamaño del arreglo puede ser incrementado, el hacerlo requiere la reasignación de todos los elementos del arreglo y es una operación que consume tiempo. Los arreglos funcionan mejor cuando el número de ítems en la colección está predeterminado y se requiere de acceso rápido a cada ítem.
ÁM
En el.NET Framework, puede utilizar la clase ArrayList para aproximarse a los requerimientos de un vector para lograr la homogeneidad y un tamaño fjo. Un ArrayList es un tipo de colección que puede mantener ítems de cualquier tipo de datos y se puede expandir dinámicamente cuando sea necesario. Sin embargo, un ArrayList no es tan rápido como un arreglo.
www.pdftron.com RO
Colas
Una cola es una colección de ítems en la cual el primer ítem añadido a la colección es el primer en ser removido.
CI
BE
La estructura de datos de una cola imita una cola en vida real. En una cola, los ítems son procesados en el orden en el que fueron agregados a la cola. En una cola, los ítems siempre son agregados al fnal de la cola y son removidos desde el frente de la cola. Esto es comúnmente conocido como el primero que entra es el primero que sale (FIFO). La capacidad de una cola es el número de ítems que puede mantener. Sin embargo, conforme los elementos son agregados a la cola, la capacidad es incrementada automáticamente. Una cola es una estructura de datos heterogénea, lo que signifca que los ítems en una cola pueden ser de diferentes tipos de datos.
ET
Representación Interna
Con el fn de evitar la reubicación excesiva de espacio de memoria y permitir una administración sencilla, una cola a menudo es implementada internamente como un arreglo circular de objetos, como se muestra en la Figura 3-3. En la Figura 3-3, el índice cabeza apunta a la ubicación 2 en la cola. Ya que la cola es circular, mientras tenga registro de los apuntadores de cabeza y cola, no importa en cual ubicación empieza la cola. El índice cabeza apunta al primer ítem en la cola y el índice cola apunta al último ítem en la cola. Cuando un ítem es removido, la cabeza se mueve al siguiente ítem en la cola. Un nuevo ítem siempre es agregado al fnal y la cola inicia apuntando al ítem recién agregado. Los espacios null en la Figura 3-3 son los lugares vacíos en la cola que pueden ser llenados antes de que la cola necesite una reasignación de memoria.
Desarrollo General de Software
85
El .NET Framework proporciona una implementación de la estructura de datos de una cola como parte de la clase Queue en el espacio de nombres de System.Collections. En lenguajes de programación que no proporcionan una implementación de una cola, puede escribir su propia clase Queue utilizando una estructura de datos parecida a un arreglo y simulando las operaciones de una cola. Figura 3-3
ER ICA
Representación interna de una estructura de datos de una cola
Una versión genérica de la clase Queue está disponible como parte del espacio de nombres de System. Collections.Generic. Esta versión genérica es utilizada para crear una cola de ítems que son del mismo tipo de datos.
ÁM
Tome Nota
www.pdftron.com Operaciones Comunes
RO
Una cola soporta las siguientes operaciones comunes:
•
BE
•
Enqueue: Esta operación primero verifca si hay sufciente capacidad disponible en la cola para agregar un ítem más. Si la capacidad está disponible, el ítem es agregado al fnal de la cola. Si no hay espacio disponible en la cola, el arreglo es reasignado por un factor de crecimiento pre especifcado y luego el nuevo ítem es agregado a la cola. Dequeue: Esta operación remueve el elemento actual en la cabeza de la cola para apuntar al siguiente elemento en la cola, como se muestra en la Figura 3-3. Peek: La operación Peek le permite mirar el ítem actual en la posición de la cabeza sin removerlo realmente de la cola. Contains: Esta operación le permite determinar si existe un ítem en particular en la cola.
•
CI
•
ET
Rendimiento y Uso
Una cola es una estructura de datos de un propósito especial que es más adecuada para una aplicación donde necesita procesar ítems en el orden recibido. Algunos ejemplos pueden incluir una cola de impresión, sistema de mensajería y un calendario de trabajo. A diferencia de un arreglo, una cola no puede ser utilizada para acceder aleatoriamente a elementos. Las operaciones tales como enqueue y dequeue en realidad agregan y remueven los ítems de la cola.
Pilas Una pila es una colección de ítems en la cual el último ítem agregado es el primero en ser removido. Como opuesto a una cola, una pila es una estructura de datos en la que el ultimo que
86
Lección 3
entra es el primero que sale (LIFO). Puede pensar en una pila como la pila de platos de cena en un buffet de mesa. El último en ser agregado es el primero en ser removido. La capacidad de una pila es el número de ítems que puede mantener. Sin embargo, conforme los elementos son agregados a la pila, la capacidad es automáticamente incrementada. Una pila es una estructura de datos heterogénea, lo que signifca que los ítems en una pila pueden ser de diferentes tipos de datos.
Representación Interna
ER ICA
Una versión generic de la clase Stack está disponible como parte del espacio de nombres de System. Collections.Generic. Esta versión genérica es utilizada para crear una pila de ítems que son del mismo tipo de datos.
Un nuevo ítem siempre es agregado en la parte superior de la pila, y el fondo de la pila inicia apuntando al elemento recién agregado. Los ítems también son removidos desde la parte superior de la pila y cuando esto sucede, la parte superior de la pila es ajustada para apuntar al siguiente ítem en la pila.
El .NET Framework proporciona una implementación de la estructura de datos de pila como parte de la clase Stack en el espacio de nombres de System.Collections. En lenguajes de programación que no proporcionan una implementación de la pila, puede escribir su propia clase Stack utilizando una estructura de datos parecida al arreglo y simular las operaciones de la pila.
ÁM
Tome Nota
Como una cola, una pila a menudo es implementada como un buffer circular con el fn de evitar la reubicación de espacio en memoria y para una administración más sencilla. Una pila puede ser visualizada justo como la cola en la Figura3-3, excepto que la cola ahora es llamada tope de la pila y la cabeza es llamada fondo de la pila.
www.pdftron.com Operaciones Comunes
Push: La operación push primero verifca si hay capacidad sufciente disponible en la pila para agregar un ítem más. Si la capacidad está disponible, el ítem es agregado en la parte superior de la pila. Si no hay espacio en la pila, el arreglo es reubicado por un factor de crecimiento pre especifcado y entonces el nuevo ítem es agregado a la pila. Pop: La operación pop remueve el elemento de la parte superior de la pila y establece la parte superior para que apunte al siguiente elemento en la pila. Peek: La operación Peek le permite mirar en el ítem actual en la parte superior de la pila sin removerlo realmente de la pila. Contains: La operación Contains le permite determinar si un ítem en particular existe en la pila.
BE
•
RO
Una pila soporta las siguientes operaciones comunes:
•
CI
• •
ET
Rendimiento y Uso
Una pila es una estructura de datos con propósito especial que es más adecuada para aplicaciones donde necesita procesar ítems en orden del último que entra es el primero que sale. Una pila es una estructura de datos muy útil debido a sus aplicaciones en la administración de memoria en tiempo de ejecución, evaluación de expresión, registro de llamado de método, etc. A diferencia de un arreglo, una pila no puede ser utilizada para acceder a elementos aleatoriamente. Las operaciones tales como push y pop realmente agregan y remueven los ítems de la pila.
Listas Enlazadas Una lista enlazada es una colección de nodos ordenados de forma que cada nodo contiene un enlace al siguiente nodo en la secuencia.
Desarrollo General de Software
87
Una lista enlazada es una colección de nodos de tal manera que cada nodo contiene una referencia (o enlace) al siguiente nodo en la secuencia. A diferencia de un arreglo, los ítems en una lista enlazada no necesitan ser contiguos y por lo tanto una lista enlazada no requiere de reubicación de espacio en memoria para la lista entera cuando se necesita agregar más ítems.
Representación Interna En memoria, una lista enlazada puede ser visualizada como una colección de nodos, como se muestra en la Figura 3-4.
ER ICA
Figura 3-4 Representación interna de una estructura de datos de una lista enlazada sencilla
ÁM
Cada nodo contiene dos piezas de información: los datos correspondientes al nodo y el enlace al siguiente nodo. El primer nodo de la lista es llamado el nodo encabezado. Utilizando el enlace del nodo encabezado, puede llegar al siguiente nodo y continuar atravesando nodos hasta que el enlace fnal es un valor null. A menudo el termino cola es utilizado para referirse a la lista apuntada por el nodo encabezado, la cola es todo lo demás después del nodo encabezado. En la Figura 3-4, la cola es la lista enlazada iniciando desde el nodo B.
www.pdftron.com BE
Figura 3-5
RO
Algunas otras implementaciones de listas enlazadas pueden ser utilizadas dependiendo de los requerimientos. En una lista enlazada circular, el último nodo es la lista apuntando de regreso al primer nodo para crear un círculo. En una lista doblemente enlazada, cada nodo contiene dos enlaces, como se muestra en la Figura 3-5.
ET
CI
Representación de una estructura de datos de una lista doblemente enlazada
Un enlace es una referencia de dirección que apunta al siguiente nodo en la secuencia y el otro enlace es una referencia hacia atrás que apunta de regreso al nodo previo en la secuencia. Como puede imaginar, una lista doblemente enlazada es fácil de atravesar en cualquier dirección. El .NET Framework proporciona una clase LinkedList como parte del espacio de nombres de System.Collections.Generic. Esta clase implementa homogéneamente una lista doblemente enlazada de un tipo de datos específco. Puede escribir sus propias clases para implementar un diferente tipo de implementación de lista enlazada.
88
Lección 3
Operaciones Comunes Una lista enlazada soporta las siguientes operaciones comunes:
•
ÁM
•
Add: Agregar o insertar un ítem en una lista enlazada es un asunto de cambiar enlaces, como se muestra en la Figura 3-6. Digamos que le gustaría insertar un nuevo nodo (con valor Z) entre los nodos con valores A y B. primero necesita asignar memoria para el nuevo nodo y asignar el valor Z a la sección de datos del nodo. Luego, copiara la sección de enlace del nodo A a la sección de enlace del nodo Z de modo que el nodo Z está apuntando al nodo B. Finalmente, necesitará copiar la dirección del nodo Z recién creado a la sección de enlace del nodo A de manera que el nodo A inicia apuntando al nodo Z. Remove: Similar a la operación add, la operación de remove o delete es también asunto de cambiar enlaces. Por ejemplo, para eliminar el tercer nodo en la Figura 3-4, cambiará el enlace del Segundo nodo a un valor null. El tercer nodo ahora será una pieza de memoria sin referencia y eventualmente será retornada al pool de memoria disponible. Find: Esta operación encuentra un nodo con un valor dado en la lista enlazada. Para encontrar un valor, generalmente inicia desde el nodo encabezado y verifca si el valor coincide. Si no, seguirá el enlace al siguiente nodo y continuará la operación fnd hasta que alcance el fnal de la lista, lo cual sucede cuando encuentra un enlace null.
ER ICA
•
Figura 3-6
www.pdftron.com CI
BE
RO
Agregando un nuevo nodo a una lista enlazada
ET
Rendimiento y Uso
; ¿Listo para la certificación? ¿Comprende las estructuras de datos comunes? — USD 3.2
Una lista enlazada no permite acceso aleatorio a sus ítems. La única manera de llegar a un ítem es iniciar desde el nodo encabezado y seguir los enlaces. Como resultado, las listas enlazadas son muy lentas en la recuperación de datos. Sin embargo, para operaciones de insertar y eliminar, las listas enlazadas son extremadamente rápidas: la inserción o eliminación de un nodo involucra solo cambiar un link. Además las listas enlazadas no tienen una capacidad máxima después de la cual el contenido necesita ser reasignado. De hecho, una lista enlazada proporciona una manera alternativa para implementar las estructuras de datos de la cola y la pila. Si sus requerimientos realizan accesos frecuentes a datos pero rara vez necesita insertar o eliminar datos, un arreglo es la implementación ideal. Si en su lugar, los requerimientos llaman con frecuencia operaciones de insert y delete, entonces puede ser más recomendable utilizar una lista enlazada.
Desarrollo General de Software
89
Comprender los Algoritmos de Ordenamiento È EN RESUMEN
Los algoritmos de ordenamiento tales como Ordenamiento de burbuja y el Ordenamiento Rápido (QuickSort) ordenan ítems en una lista en un orden en particular. Comprender los algoritmos de ordenamiento pueden ayudarle a comprender, analizar y comparar distintas maneras de resolver un problema.
ER ICA
Los algoritmos de ordenamiento son algoritmos que ordenan los ítems en una lista en un cierto orden. Por ejemplo, puede utilizar un algoritmo de ordenamiento para ordenar una lista de estudiantes en orden ascendente de su apellido. En la época de los primeros procesamientos de datos, el ordenamiento era un problema muy importante. En estos días, puede encontrar capacidades de ordenamiento básicas ya integradas en librerías populares y estructuras de datos. Por ejemplo, en el .NET Framework, puede hacer uso del método Array.Sort para ordenar un arreglo. Sin embargo, aún es importante mirar el ordenamiento como una manera de comprender la resolución de un problema y análisis de algoritmos.
Ordenamiento de Burbuja
ÁM
En esta sección, le echará un vistazo a dos algoritmos de ordenamiento comunes: ordenamiento de burbuja y ordenamiento rápido.
www.pdftron.com El algoritmo de ordenamiento de burbuja utiliza una serie de operaciones de comparación e intercambio para ordenar una lista en el orden correcto.
BE
RO
El ordenamiento de burbuja funciona comparando dos elementos para verifcar si están fuera de lugar, si lo están, los intercambia. El algoritmo continúa haciendo esto hasta que la lista entera está en el orden deseado. El ordenamiento de burbuja obtiene su nombre de la manera en que funciona el algoritmo; como el algoritmo progresa, los ítems más pequeños son “burbujeados” hacia arriba.
ET
CI
Visualicemos el ordenamiento de burbuja con ayuda de un ejemplo. Digamos que desea ordenar todos los ítems en la siguiente lista en orden ascendente: (20, 30, 10, 40). Los ítems deberían ser ordenados en orden del más pequeño al más grande. El algoritmo de ordenamiento de burbuja intenta solucionar este problema en una o más pasadas, con cada pasada escaneando completamente la lista de ítems. Si el algoritmo encuentra elementos fuera de lugar, los intercambia. El algoritmo termina cuando escanea toda la lista sin intercambiar ningún elemento, si no hubo intercambios entonces ninguno de los elementos esta fuera de lugar y la lista ha sido completamente ordenada.
Tabla 3-1
Paso
Antes
Después
Comentarios
Primera pasada del ordenamiento de burbuja
1.
20, 30, 10, 40
20, 30, 10, 40
El algoritmo compara los primeros dos elementos (20 y 30),y ya que están en el orden correcto, no es necesario el intercambio.
2.
20, 30, 10, 40
20, 10, 30, 40
El algoritmo compara los siguientes dos elementos (30 y 10),y ya que están fuera de lugar, los elementos son intercambiados.
3.
20, 10, 30, 40
20, 10, 30, 40
El algoritmo compara los siguientes dos elementos (30 y 40),y ya que están en el orden correcto, no es necesario el intercambio.
90
Lección 3
Al fnal de la primera pasada, el ordenamiento de burbuja ha desempeñado un intercambio y hay una posibilidad que los ítems aún no están completamente ordenados. De manera que el ordenamiento de burbuja da otra pasada a la lista. Paso
Antes
Después
Comentarios
Primera pasada del ordenamiento de burbuja
1.
20, 10, 30, 40
10, 20, 30, 40
El algoritmo compara los primeros dos elementos (20 y 10),y como están fuera de lugar, los elementos son intercambiados.
2.
10, 20, 30, 40
10, 20, 30, 40
El algoritmo compara los siguientes dos elementos (20 y 30),y ya que están en el orden correcto, no es necesario el intercambio.
3.
10, 20, 30, 40
10, 20, 30, 40
ER ICA
Tabla 3-2
El algoritmo compara los siguientes dos elementos (30 y 40),y ya que están en el orden correcto, no es necesario el intercambio.
Al fnal de la segunda pasada, el ordenamiento de burbuja ha desempeñado un intercambio y aun no puede garantizar que la lista está completamente ordenada. De manera que el ordenamiento de burbuja da otra pasada a la lista: Paso
Antes
Después
Primera pasada del ordenamiento de burbuja
1.
10, 20, 30, 40
10, 20, 30, 40
Comentarios
El algoritmo compara los siguientes dos elementos (10 y 20),ya que están en el orden correcto, no es necesario el intercambio.
ÁM
Tabla 3-3
www.pdftron.com 3.
10, 20, 30, 40
10, 20, 30, 40
El algoritmo compara los siguientes dos elementos (20 y 30),y ya que están en el orden correcto, no es necesario el intercambio.
RO
2.
10, 20, 30, 40
10, 20, 30, 40
El algoritmo compara los siguientes dos elementos (30 y 40),y ya que están en el orden correcto, no es necesario el intercambio.
BE
Al fnal de la tercera pasada, el ordenamiento de burbuja no realizó ningún intercambio. Eso garantiza que la lista ahora esta ordenada y el algoritmo puede fnalizar. En C# este algoritmo puede ser expresado por el siguiente método:
CI
staticint[] BubbleSort(int[] numbers) {
Tome Nota
ET
Cuando se utiliza el ordenamiento de burbuja puede asegurarse que un arreglo estará ordenado en un paso menos que el número de ítems. De manera que si hay cuatro ítems, como se ilustró arriba, el arreglo será ordenado (sin importar en qué orden empieza) en tres pasadas.
bool swapped; do { swapped = false; for (int i = 0; i numbers[i + 1]) { //swap
Desarrollo General de Software
91
int temp = numbers[i + 1]; numbers[i + 1] = numbers[i]; numbers[i] = temp; swapped = true; } }
return numbers; }
Ordenamiento Rápido (QuickSort)
ER ICA
} while (swapped == true);
ÁM
El algoritmo de ordenamiento rápido utiliza las operaciones de partición y comparación para ordenar los elementos de una lista en el orden correcto. El algoritmo de ordenamiento rápido utiliza la técnica de divide y conquista para particionar continuamente una lista hasta que el tamaño del problema sea realmente pequeño y difícilmente requiera algún ordenamiento. Los siguientes pasos explican esto más a detalle:
www.pdftron.com Un lista de tamaño cero o uno siempre es ordenada por sí misma. Para una lista más grande, puede elegir algún elemento como elemento pivote. Luego particionar la lista de tal manera que todos los elementos más pequeños que o iguales al elemento pivote van a la lista izquierda y todos los elementos más grandes que el elemento pivote van a la lista derecha. Ahora la combinación de la lista izquierda, el elemento pivote y la lista derecha están ordenadas. El problema ahora se particiona en dos listas más pequeñas, la lista de la izquierda y la lista de la derecha. Ambas listas pueden ser resueltas utilizando la técnica descrita en las viñetas anteriores. Finalmente, unir todas las pequeñas listas ordenadas con el fn de crear la lista ordenada completa.
RO
• •
BE
• •
CI
•
ET
La siguiente tabla explica el algoritmo de ordenamiento rápido con un pequeño ejemplo.
Tabla 3-4
Visualizando el ordenamiento rápido
Paso
Datos a ser ordenados 50, 10, 30, 20, 40
1. 2.
Comentarios
20, 10
30
Inicia con una lista no ordenada y elige un elemento pivote, en este caso 30. 50, 40
Partición de la lista: los ítems menores al pivote van a la lista izquierda y los ítems más grandes que el pivote van a la lista derecha. Para ordenar la lista izquierda. Elija un pivote (10). Para ordenar la lista derecha, seleccione un pivote (40) para la lista derecha.
92
Lección 3
-
3.
10
20
30
-
40
50
10, 20, 30, 40, 50
4.
En la lista izquierda, 20 es mayor que 10 y 50 es más grande que 40, por lo tanto ambos van en la lista derecha. Nos quedan listas con solo un número, las cuales por definición están ordenadas. La lista unida final es la lista ordenada.
ER ICA
El defecto principal del algoritmo descrito podría parecer la memoria adicional requerida por la creación de listas más pequeñas separadas. Sin embargo, crear listas separadas no es necesario. Utilizando una técnica ligeramente modifcada, el arreglo puede ser particionado, como se muestra en el siguiente código: staticint Partition (int[] numbers, int left, int right, intpivotIndex) {
intpivotValue = numbers[pivotIndex];
// se mueve el elemento pivote al fnal
ÁM
int temp = numbers[right];
numbers[right] = numbers[pivotIndex];
www.pdftron.com numbers[pivotIndex] = temp;
// newPivot almacena el indice del primer número
RO
// mayor que el pivote intnewPivot = left;
for (int i = left; i < right; i++) {
BE
if (numbers[i] left) {
ER ICA
int left, int right)
intpivotIndex = left + (right - left) / 2; //particiona el vector
pivotIndex= Partition(
numbers, left, right, pivotIndex);
//ordena la partición izquierda
ÁM
QuickSort(
numbers, left, pivotIndex - 1);
www.pdftron.com // ordena la partición derecha
}
return numbers; }
Debido al enfoque de partición, el algoritmo de ordenamiento rápido, es mucho más rápido que el algoritmo de ordenamiento de burbuja.
ET
CI
BE
¿Comprende los algoritmos de ordenamiento comunes? — USD 3.3
numbers, pivotIndex + 1, right);
RO
; ¿Listo para la certificación?
QuickSort(
94
Lección 3
Resumen de matriz de habilidades En esta lección aprendió:
•
• • •
ER ICA
•
La administración del ciclo de vida de aplicación son las distintas actividades que giran alrededor de un nuevo producto de software desde su comienzo a cuando el producto de software madura y tal vez se retira. La prueba de software es el proceso de verifcar el software contra sus requerimientos. Las pruebas toman lugar después que la mayoría del trabajo de desarrollo está completado. Las estructuras de datos son técnicas de organización y almacenamiento de datos en la memoria de la computadora. Como los datos son almacenados afecta cómo son recuperados y manipulados. Comprender una estructura de datos involucra comprender no solo el patrón de almacenamiento sino también los métodos utilizados para crear, acceder y manipular la estructura de datos. Un arreglo es una colección de ítems, del mismo tipo de datos, almacenados en ubicaciones de memoria contiguas y direccionadas utilizando uno o más índices. Una cola es una colección de ítems que permite operaciones tales que el primer ítem agregado a la colección es el primero en ser removido. Una pila es una colección de ítems que permite operaciones tales que el ultimo ítem agregado a la colección es el primero en ser removido. Una lista enlazada es una colección de nodos ordenados de tal manera que cada nodo contiene un enlace al siguiente nodo en la secuencia. El algoritmo de ordenamiento de burbuja utiliza una serie de operaciones de comparación e intercambio para ordenar los elementos en una lista en el orden correcto. El algoritmo de ordenamiento rápido utiliza las operaciones de partición y comparación para ordenar los elementos de una lista en el orden correcto.
ÁM
•
• •
RO
www.pdftron.com •
BE
» Evaluación de Conocimientos
Llene los Espacios en Blanco
ET
CI
Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios proporcionados. 1. En la prueba de________, los testers utilizan sus conocimientos del sistema interno para probar el sistema. 2. Con cada nueva reparación, los testers de software ejecutan una serie de ______ para asegurarse que la funcionalidad que se sabía que funcionaba aun funciona. 3. El algoritmo de ordenamiento de burbuja utiliza una serie de operaciones de ______ y ______ para ordenar los elementos de una lista en el orden correcto. 4. Una ______ es una colección de ítems que permite operaciones tales que el ultimo ítem agregado a la colección es el primero en ser removido.
5. El______ es el proceso de determinar los requerimientos detallados del negocio para un nuevo sistema de software. 6. Una lista enlazada es una colección de nodos tales que cada nodo contiene un ____ al
Comprender los conceptos básicos de bases de datos
95
siguiente nodo en la secuencia. 7. La operación______agrega un ítem a la cola mientras que la operación ______remueve un ítem desde una cola. 8. El algoritmo de ordenamiento rápido utiliza las operaciones de ______ y comparación para ordenar los elementos de una lista en el orden correcto. 9. Un ______ es responsable de analizar las necesidades del negocio y convertirlas en requerimientos que pueden ser ejecutados por el equipo de desarrollo.
Elección Múltiple
ER ICA
10. Tanto la prueba Alfa y la prueba Beta son parte de las pruebas de ______de un sistema.
Encierre en un círculo la letra que corresponda a la mejor respuesta.
1. El producto que está desarrollando aún no está terminado, pero le gustaría liberar el producto a una audiencia de clientes más amplia para su retroalimentación y pruebas. ¿Bajo cuál de los siguientes niveles de pruebas caerá esta actividad? Prueba de Integración Prueba de Sistema Prueba de Aceptación Prueba de Regresión
ÁM
a. b. c. d.
www.pdftron.com RO
2. Los testers del software tienen acceso a su código fuente. Los testers necesitan escribir casos de prueba que garanticen que el método retorna valores correctos. ¿En cuál de los siguientes niveles de pruebas caerá esta actividad? Prueba de Integración Prueba de Unidad Prueba Alfa Prueba Beta
BE
a. b. c. d.
3. ¿Cuál de las siguientes estructuras de datos permite acceso directo a todos sus ítems?
ET
CI
a. b. c. d.
Arreglo Pila Cola Lista enlazada
4. ¿Cuál de las siguientes actividades en el ciclo de vida de aplicación es utilizado por un arquitecto para crear el proyecto técnico del sistema? a. b. c. d.
Análisis de requerimientos Diseño Desarrollo Mantenimiento
5. En su aplicación, usted está utilizando una estructura de datos de cola para manipular datos. Necesita encontrar cuál ítem de datos será procesado después, pero no desea realmente procesar los ítems aun. ¿Cuál de las siguientes operaciones de la cola utilizará?. a. Enqueue b. Dequeue
96
Lección 3
c. Peek d. Contains
a. b. c. d.
Cola Arreglo Lista enlazada Pila
ER ICA
6. Está desarrollando un programa que requiere que registre los llamados de método. Puede invocar solo un método a la vez. Sin embargo, un llamado de método puede a su vez invocar a otros métodos. Cuando un método termina y retorna el control al método que lo llama. ¿Cuál estructura utilizará para registrar estos llamados de método?.
7. Está desarrollando un programa que simula una cola de trabajo. A menudo los trabajos se hacen más rápidos de lo que puede procesarlos y en ese caso los trabajos esperan su turno para ser procesados. Necesita asegurarse que el trabajo que llega primero es el que se procesa primero también. ¿Cuál de las siguientes estructuras de datos es más adecuada para este requerimiento? Arreglo Cola Lista enlazada Pila
ÁM
a. b. c. d.
8. Usted escribe el siguiente código en su programa:
www.pdftron.com a. int[] numbers = {2, 3, 1, 4}; b. numbers[2] = 4;
RO
9. ¿Cuáles serán los contenidos del arreglo después de que la segunda sentencia es ejecutada?. {2, 4, 1, 4} {2, 3, 4, 4} {2, 4, 1, 2} {4, 3, 1, 4}
BE
a. b. c. d.
ET
CI
10. Está desarrollando un programa que desempeña operaciones de insertar y eliminar frecuentes en los datos. Su requerimiento también dicta una capacidad para acceder a registros previos y siguientes cuando el usuario presiona el botón de previo o siguiente. ¿Cuál de las siguientes estructuras de datos se ajustará mejor a sus requerimientos?. a. b. c. d.
Arreglo Lista enlazada circular Lista enlazada Lista doblemente enlazada
11. Está desarrollando un programa que desempeña operaciones de insertar y eliminar frecuentes en los datos. los datos necesitan ser accedidos como una pila con la funcionalidad del último que entra es el primero que sale. Su solución debe requerir tan poca memoria como sea posible. ¿Cuál de las siguientes estructuras de datos se ajustará mejor a sus requerimientos?. a. b. c. d.
Arreglo Lista enlazada circular Lista enlazada Lista doblemente enlazada
Comprender los conceptos básicos de bases de datos
97
» Evaluación de Competencia Caso 3-1: Utilizando Arreglos Está escribiendo un programa que utiliza un arreglo bidimensional. El arreglo tiene cuatro flas cinco columnas. Necesita imprimir el elemento mayor en cada fla del arreglo. ¿Cómo escribiría tal programa?.
ER ICA
Proyecto 3-2: Utilizando Colas Está escribiendo un programa que utiliza dos colas. Los datos en cada cola ya están en orden ascendente. Necesita procesar el contenido de ambas colas de tal manera en que la salida sea impresa en la pantalla ordenada. ¿Cómo escribiría tal programa?.
» Evaluación de Competencia
Proyecto 3-3: Utilizando Pilas
ÁM
Está escribiendo un programa que utiliza dos pilas. Los datos en cada pila ya están en orden descendiente. Necesita procesar el contenido de ambas pilas de tal manera que la salida sea impresa en la pantalla en orden ascendente. ¿Cómo escribiría tal programa?.
www.pdftron.com Proyecto 3-4: Utilizando Listas Enlazadas
ET
CI
BE
RO
Está escribiendo un programa que almacena la lista de nombres de productos en una lista enlazada. El usuario introducirá un nombre de producto y un programa necesita verifcar si la lista enlazada contiene el producto dado. ¿Cómo escribiría tal programa?.
Lección 3
ÁM
ER ICA
98
ET
CI
BE
RO
www.pdftron.com
Lección 4
Comprender las Aplicaciones Web Matriz de Dominio de Objetivos Descripción del Dominio de Objetivo
Comprender el Desarrollo de una Página Web
Comprender el Desarrollo de una Página Web
4.1
Comprender el Desarrollo de una Aplicación ASP.NET
Comprender el desarrollo de una aplicación Web del Microsoft ASP.NET
4.2
Comprender el IIS Web Hosting
Comprender el Web hosting
4.3
Comprender el Desarrollo de Servicios Web
Comprender los servicios Web
4.4
ÁM
Términos Clave
Número del Dominio del Objetivo
ER ICA
Habilidad Tecnológica
www.pdftron.com (IIS) • JavaScript • SOAP • Administración de estado
• Servicio Web • Lenguaje de Defnición de Servicio Web (WSDL)
BE
RO
• Hojas de estilo en cascada (CSS) • Lenguaje de Marcado de Hipertexto (HTML) • Servicios de Información de Internet
ET
CI
Como desarrollador de una gran empresa necesita desplegar aplicaciones que se puedan utilizar a través de redes como la World Wide Web. La aplicación será desplegada en un servidor Web de Windows pero sus usuarios utilizarán múltiples sistemas operativos y navegadores Web.
100
Lección 4
Comprender el Desarrollo de una Página Web È EN RESUMEN
Una página Web es un documento que es servido a través de la World Wide Web (WWW) y que se puede mostrar a través de un navegador Web. Las páginas Web se desarrollan utilizando el Lenguaje de Marcado de Hipertexto (HTML) y se almacenan en un servidor Web. Los navegadores Web descargan el HTML solicitado del servidor Web y lo interpretan en la pantalla del usuario.
• •
ER ICA
La World Wide Web (también conocida como WWW o “la Web”) es un sistema de documentos de hipertexto interconectados y otros recursos tales como imágenes y video que se pueden acceder vía internet. Tecnologías múltiples trabajan juntas para hacer posible la WWW. Discutiremos dos de estas tecnologías en esta sección: Protocolo de Transferencia de Hipertexto (HTTP) Lenguaje de Marcado de Hipertexto (HTML)
ÁM
HTTP es el protocolo de comunicación fundamental utilizado por la World Wide Web. HTTP proporciona el lenguaje común que los servidores Web y los navegadores Web utilizan con el fn de comunicarse.
HTTP utiliza el Localizador de Recurso Uniforme (URL) para identifcar únicamente y direcciona cada recurso en Internet. Una URL es esencialmente una dirección Web y se parece a esto: http://www.microsoft.com/en/us/default.aspx. Cada URL inicia con un protocolo. En este ejemplo, el protocolo es HTTP. También notará el protocolo HTTPS (HTTP Seguro) en uso para asegurar aplicaciones donde los datos necesitan ser cifrados antes de que puedan ser transmitidos a través de la red. La siguiente parte de la URL es la dirección del servidor Web: (www.microsoft.com), seguido por el localizador del recurso dentro del servidor Web (/en/us/), y fnalmente el propio recurso solicitado (default.aspx). Cada documento, imagen, video y otros recursos en la Web es identifcado por una URL.
RO
www.pdftron.com BE
Tome Nota
Cuando un navegador envía una solicitud HTTP para una página Web a un servidor Web (tanto la página y el servidor Web son identifcados por una URL), el servidor prepara una respuesta HTTP para el navegador. Esta respuesta especifca el contenido y presentación de la página Web.
El lenguaje que el servidor Web y el navegador Web utilizan para describir una página Web es el Lenguaje de Marcado de Hipertexto (HTML). HTML es un lenguaje basado en texto que utiliza varias etiquetas de marcado describiendo como el contenido es desplegado. HTML permite que imágenes, videos y otros objetos sean referenciados en un archivo para crear páginas Web multimedia. HTML puede incrustar scripts tales como JavaScript que afecta el comportamiento de las páginas Web. HTML también puede ser utilizado para incluir hojas de estilo en cascada (CSS) para defnir el formato y presentación del contenido de una página. El navegador Web lee el código HTML e interpreta los resultados en la pantalla.
ET
CI
Los términos “Internet” y “la Web” son comúnmente utilizados de forma indistinta pero son en realidad diferentes y no deben confundirse entre sí. El Internet es un sistema de comunicaciones de datos global que proporciona conectividad entre computadoras. En contraste, la Web es uno de los servicios disponibles en Internet que nos permite acceder a recursos hiper vinculados.
Una página Web puede contener hipervínculos a otros recursos tales como imágenes y videos. Cada uno de estos recursos es identifcado por su propia URL. Con el fn de interpretar completamente una página, el navegador hará solicitudes HTTP adicionales para obtener esos recursos y desplegarlos como parte de la página Web. En las siguientes secciones, aprenderá más acerca de varios componentes que conforman una página Web tales como HTML, CSS y JavaScript.
Comprender las Aplicaciones Web
101
Comprender HTML El Lenguaje de Marcado de Hipertexto (HTML) es el lenguaje utilizado por los servidores y navegadores Web para describir una página Web.
HTML está basado en texto. HTML utiliza etiquetas para incrustar imágenes, audio, video y otros muchos tipos de multimedia y contenido interactivo en la página.
ER ICA
Tome Nota
El propósito de HTML es proporcionar un lenguaje estándar para describir páginas Web de forma que diferentes navegadores Web pueden comprenderlo y desplegar las páginas Web. HTML es un lenguaje basado en texto, lo cual signifca que puede escribir y editar paginas HTML utilizando cualquier editor de texto. Cuando HTML es enviado al navegador Web, la mayoría de los navegadores le permiten visualizar el código fuente HTML de la página. HTML consiste de un conjunto de etiquetas (también llamadas elementos HTML) que defnen la estructura y contenido de una página. Por ejemplo, la etiqueta especifca el inicio del documento HTML. Las etiquetas HTML siempre son rodeadas por paréntesis angulares. Las etiquetas HTML siempre se utilizan en pares. Cada inicio de etiqueta tiene una etiqueta par al fnal. Las etiquetas fnales tienen un slash que indica que es una etiqueta de fnal. Por ejemplo, la etiqueta de fnal para es .
ÁM
Una página HTML consta de dos partes: un encabezado y un cuerpo. El encabezado es encerrado dentro de las etiquetas yy es utilizado para proporcionar un título al documento y vínculos a ítems externos que pueden ser utilizados en la página, tales como archivos CSS y archivos de JavaScript. El cuerpo es encerrado dentro de las etiquetas y y es utilizado para proporcionar la estructura complete y contenido de la página que será desplegada dentro del navegador Web.
www.pdftron.com
BE
Note que el documento HTML no contiene la imagen en sí. La etiqueta img específica la URL de la imagen, la cual el navegador descarga separadamente y la interpreta como parte de la página.
Este es un ejemplo de una etiqueta que despliega una imagen:
RO
Tome Nota
CI
La etiqueta especifca atributos adicionales. Por ejemplo, el atributo src especifca la ubicación del archivo de imagen, y los atributos height y width especifcan qué dimensiones utilizar cuando se interpreta la imagen en el navegador. Este es otro ejemplo de una etiqueta HTML:
ET
Tome Nota Esta lección no cubre todos los elementos HTML. Para aprender más sobre elementos HTML, busque “Elementos HTML” en el MSDN.
Saturn’s moon
Aquí, es la etiqueta de anclaje, la cual es utilizada para crear hipervínculos en la página Web. El atributo href especifca la URL objetivo y el texto dentro de los paréntesis angulares es el que es mostrado como un enlace. Tome los pasos en el siguiente ejercicio para crear un documento HTML.
102
Lección 4
Æ Trabajar con HTML PREPÁRESE. Para crear un documento HTML, haga lo siguiente: 1. Abra el Visual Studio. Crear un Nuevo proyecto basado en la plantilla de aplicación web vacía de ASP.NET. Nombre al proyecto TrabajandoConHTML y nombre la solución Leccion04. 2. Seleccione Proyecto, Agregar Nuevo Ítem, y seleccione la platilla de Pagina HTML. Nombre el archivo default.htm. 3. Remplace el código por defecto en el archivo HTML con el siguiente código:
ER ICA
Saturn’s Moon Mimas Cassini
La etiqueta img es utilizada para mostrar la imagen de
ÁM
Saturn’s moon:
www.pdftron.com
RO
Figura 4-1
BE
4. Seleccione Depurar y después Inicie la Depuración (o presione F5). La páginadefault.htm se abrirá en un navegador Web. Note que la salida se parece a la figura 4-1, donde puede ver las etiquetas yen acción.
ET
CI
Una página HTML simple con una imagen y un hipervínculo.
Comprender las Aplicaciones Web
103
Comprender las Hojas de Estilo en Cascada Las hojas de estilo en cascada (CSS) le permiten almacenar el estilo e información separada del código HTML. Esta separación hace más fácil el actualizar la apariencia de su sitio Web. Visual Studio incluye herramientas para construir y pre visualizar sus hojas de estilo.
Cuando se utiliza efectivamente, CSS es una gran herramienta para incrementar la consistencia del ancho del sitio y la posibilidad de mantenimiento.
CSS le permite separar la presentación de una página Web de su contenido. Esta separación le permite cambiar uno sin afectar a otro. Mezclar el contenido y el estilo juntos reduce la posibilidad de mantenimiento de un sitio Web. Por ejemplo, digamos que quiere cambiar el color y fuente de todos los encabezados de H1 en su sitio Web. Un enfoque podría ser abrir un editor HTML y modifcar cada archivo en el sitio Web que utiliza la etiqueta H1. Esto podría ser una solución aceptable si el sitio Web tiene solo una o dos páginas, pero ¿y si el sitio web tiene un gran número de páginas, digamos 50 o 100? Imagine cambiar manualmente cada página. Si tal cambio es solicitado muy a menudo, el proceso de desarrollo Web será muy tedioso y propenso a errores (¿Cómo garantiza que no omitió ninguna etiqueta?).
ÁM
Tome Nota
ER ICA
CSS es un lenguaje que describe toda la información acerca de mostrar una página Web. Cuando se interpreta páginas Web en un navegador, HTML especifca lo que será mostrado. Por ejemplo, HTML puede especifcar que su documento tiene un encabezado H1 con un texto dado, mientras CSS puede especifcar la fuente y el color que serán aplicados al encabezado H1.
www.pdftron.com RO
Afortunadamente, con CSS puede poner toda la información de estilo en un archivo separado y conectar todas las páginas Web en un sitio Web con el archivo CSS. Una vez que está confgurado, para modifcar cualquier estilo (tal como el color y fuente de los encabezados H1), simplemente cambia el estilo en el archivo CSS, un simple cambio afectará todas las páginas en el sitio Web.
Diseño de Hojas de Estilo en Cascada
BE
El lenguaje CSS está basado en texto y es fácil de leer y entender. A continuación se muestra un ejemplo de una página HTML que defne estilo CSS:
ET
CI
Comprendiendo CSS body { font-family: Verdana; font-size: 9pt; } div
104
Lección 4
{ color:Red; } .block {
ER ICA
background-color: Yellow; border-color: Blue; border-width: thin;
border-style: outset; font-family: Arial;
ÁM
}
www.pdftron.com
RO
Sample body text
Sample DIV text
BE
Sample DIV text with block class
ET
CI
Sample SPAN text with block class
Las defniciones CSS deben estar dentro del elemento y son defnidos bajo el elemento . Este CSS defne dos estilos de elemento y un estilo de clase. El primer estilo aplica al elemento cuerpo HTML y especifca que todo el texto en el elemento cuerpo debería utilizar la fuente Verdana con tamaño de fuente 9 pt. El segundo elemento de estilo especifca que el texto dentro del elemento DIV será escrito en rojo. Finalmente, una clase llamada “block” es defnida. Las defniciones de clase de CSS son prefjadas con un punto (“.”). Los contenidos de cualquier elemento HTML que utilice esta clase será mostrado con fondo Amarillo y un borde. Cuando muestra la página de arriba en el navegador, se parecerá a lo mostrado en la Figura 4-2.
Comprender las Aplicaciones Web
105
Figura 4-2
ER ICA
Formateando HTML con hojas de estilo en cascada
ÁM
Note que el texto resaltado es mostrado como resultado de la clase block. Pero la clase CSS block no especifca el color del texto. En el primer texto resaltado, la clase block es aplicada al elemento DIV, en el segundo texto resaltado, la clase block es aplicada al elemento SPAN. En el primer caso, como la clase block es aplicada al texto DIV, el estilo de color del elemento DIV es llevado a la interpretación fnal. En el ejemplo previo, el archivo CSS fue escrito dentro de HTML. Una aproximación más útil es escribir el CSS en un archivo separado por su cuenta y luego enlazar el archivo HTML al archivo CSS. Aprenderá como hacer esto en el siguiente ejercicio.
www.pdftron.com RO
Æ Trabajar con Archivos CSS
PREPÁRESE. Para escribir el archivo CSS y enlazar a un archivo HTML, haga lo siguiente:
BE
1. Agregue un Nuevo proyecto basado en la plantilla de aplicación web vacía de ASP.NET a la solución Leccion04. Nombre el proyecto ComprendiendoCSS.
2. Seleccione Proyecto y después Agregar nuevo elemento. Seleccione la plantilla de Hoja de Estilo. Nombre el archivo estilos .css. Remplace el código por defecto en el archivo con el siguiente código:
ET
CI
body {
font-family: Verdana; font-size: 9pt;
} div { color:Red; } .block { background-color: Yellow;
106
Lección 4
border-color: Blue; border-width: thin; border-style: outset; font-family: Arial; }
ÁM
Understanding CSS
www.pdftron.com
Sample body text
RO
Sample DIV text
Sample DIV text with block class
Sample SPAN text
BE
with block class
CI
4. Seleccione Depurar y después Inicie la depuración (o presione F5). La página default.htm se abrirá en un navegador Web. Note que la salida es similar a la Figura4-2.
El elemento HTML es utilizado para enlazar el archivo CSS con la página HTML:
Tome Nota
ET
Cuando el CSS es almacenado en archivos separados, el navegador del usuario descargará y los almacenará localmente. Aunque pueden ser utilizados en múltiples paginas sin ninguna necesidad de volver a descargarlos, esto reduce la transferencia de datos innecesaria.
El elemento siempre se pone dentro del elemento . El atributo href especifca la dirección del archivo CSS a utilizar. Para enlazar múltiples páginas con un archivo CSS, necesitará poner el elemento dentro de cada página HTML. Visual Studio incluye un diseñador de estilo integrado que puede ayudarle en el diseño de nuevos estilos CSS o para modifcar estilos existentes. Cuando abre un archivo .css, verá un Nuevo menú llamado Styles. Puede crear un nuevo estilo seleccionando Styles, Add Style Rule. También puede modifcar el estilo seleccionado actualmente seleccionando Styles, Build Style option. Esta opción abre el editor de Modify Style como se muestra en la Figura 4-3.
Comprender las Aplicaciones Web
107
Figura 4-3
ÁM
Comprender JavaScript
ER ICA
El cuadro de diálogo Modify Style
www.pdftron.com Tome Nota
JavaScript es utilizado para hacer sitios Web más sensibles y páginas Web más interactivas. JavaScript lleva a cabo esto ejecutando el código en el lado del cliente (el navegador Web) y minimizando las idas y vueltas innecesarias al y del servidor. Tomemos un ejemplo en el cual un usuario necesita introducir detalles personales tales como el nombre, dirección de correo electrónico y número de teléfono. Un requerimiento común es desempeñar validación de datos para garantizar que los campos introducidos no están vacíos y que la dirección de correo electrónico y el número de teléfono están en el formato requerido. Sin JavaScript, necesitaría entregar el formato al servidor, el cual desempeñará la validación de datos y retornará los resultados al cliente. Esta transmisión de información toma tiempo y degrada la experiencia del usuario. Una solución de JavaScript puede desempeñar este tipo de validación de datos dentro del navegador, proporcionando una mejor experiencia al usuario.
ET
CI
BE
Muchos sitios Web modernos proporcionan una experiencia altamente interactiva que rivaliza con aplicaciones de escritorio. Tales aplicaciones pueden ser desarrolladas utilizando la programación Ajax. Ajax es una abreviatura para XML y JavaScript Asíncrono. Ajax utiliza extensivamente el JavaScript con el fin de proporcionar aplicaciones Web sensibles. ElASP.NET AJAX framework le permite implementar la funcionalidad de Ajax en páginas Web de ASP.NET.
RO
JavaScript es un lenguaje de scripting de lado del cliente que se ejecuta dentro de un navegador Web para ayudar a crear páginas Web mucho más interactivas de lo que es posible utilizando sólo HTML plano. JavaScript es utilizado en millones de páginas Web y es soportado por todos los navegadores Web modernos.
El código de JavaScript se ejecuta localmente dentro del navegador Web (el cliente), como opuesto al servidor Web. Aunque JavaScript también algunas veces es llamado como lenguaje de scripting del lado del cliente y con JavaScript es llamado programación del lado del cliente.
El comportamiento del tiempo de ejecución de la ejecución de código del lado del cliente depende del navegador que lo ejecuta. Sin embargo, es independiente de la tecnología del servidor o la estructura de programación. Para la ejecución de JavaScript en un navegador Web, no importa si la página Web fue generada por ASP.NET o PHP o si la página está siendo servida por un servidor Web de Windows o un servidor Web de Linux. JavaScript y el lenguaje de programación C# utilizan una sintaxis infuida por el lenguaje de programación C. sin embargo, JavaScript y C# son muy diferentes en como son ejecutados.
108
Lección 4
JavaScript es ejecutado por el navegador Web. El código de JavaScript es interpretado en lugar de ser compilado, como en el caso de C#. Todo el código de JavaScript debe ser ubicado dentro del elemento . El elemento esta generalmente dentro del elemento , aunque no se requiere. Se le permite tener múltiples elementos dentro de una página. Para ver el JavaScript en acción, tome los siguientes pasos:
Æ Trabajar con JavaScript
ER ICA
PREPÁRESE. Para comenzar a trabajar con JavaScript, realice las siguientes tareas:
1. Agregar un nuevo proyecto basado en la plantilla de aplicación web vacía de ASP.NET a la solución Leccion04. Nombre el proyecto ComprendiendoJavaScript.
2. Seleccione Proyecto, después Agregar nuevo elemento y seleccione la plantilla de Pagina HTML. Nombre el archivodefault.htm. Remplace el código por defecto en el archivo con el siguiente código:
www.pdftron.com
RO
Comprendiendo JavaScript
username = prompt(“Introduzca su Nombre”);
BE
message = “Hola, “ + username + “. Su nombre tiene “;
nameLen = username.length;
CI
if (nameLen > 5) message = message + “mas de “;
ET
else if (nameLen < 5) message = message + “menos de “;
else message = message + “exactamente “; message = message + “5 caracteres.”; alert(message);
Comprender las Aplicaciones Web
109
3. Seleccione Depurar y después Inicie la depuración (o presione F5). La página default.htm se abrirá en un navegador Web. Note que el código de JavaScript le pide que introduzca su nombre. El siguiente diálogo muestra un mensaje basado en la longitud del nombre introducido, como se muestra en las Figuras 4-4 y 4-5.
Figura 4-4
ER ICA
Petición al Usuario de JavaScript
Figura 4-5
ÁM
Cuadro de diálogo de JavaScript
RO
www.pdftron.com BE
Como con los archivos CSS, también puede poner su código de JavaScript en un archivo separado y enlazar el archivo de JavaScript con el archivo HTML utilizando el elemento script, como se muestra abajo:
CI
Tome Nota
ET
Aunque todos los navegadores modernos soportan el JavaScript, pueden ser configurados para desactivar el JavaScript. Algunos usuarios desactivan el JavaScript. Puede utilizar un elemento para mostrar un mensaje específico a los usuarios quienes no están ejecutando JavaScript.
Aquí el archivoSampleScript.js contiene todo el código de JavaScript y el elemento script enlaza a este archivo utilizando el atributo src. Almacenar el JavaScript en archivos externos ofrece muchas ventajas:
•
•
Mayor facilidad de mantenimiento: Si utiliza el mismo código de JavaScript en cada página, puede almacenar el código en una página central en lugar de repetirlo en todas las páginas. Cuando es hora de modifcar el código de JavaScript, tendrá que cambiar el código sólo en un lugar. Mejora del rendimiento: Almacenar código en un archivo separado reduce el tamaño de la página Web. También, el navegador puede descargar y almacenar en cache el archivo de JavaScript externo de forma que no es descargado de nuevo a menos que sea modifcado.
Visual Studio incluye soporte complete de IntelliSense para código de JavaScript. Incluso los controles ASP.NET, como el control TreeView o los controles de validación, utiliza JavaScript donde es posible interpretar contenido dinámicamente.
110
Lección 4
Programación del lado del cliente vs. lado del servidor Si un programa es de lado del cliente o lado del servidor depende de donde se ejecuta el programa al fnal. La programación del lado del cliente se refere a los programas que se ejecutan completamente en la computadora local del usuario. Los ejemplos de programas del lado del cliente son la aplicación de Formularios de Windows y el código de JavaScript que se ejecuta dentro del navegador Web. Los programas del lado del cliente no consumen recursos del servidor.
ER ICA
Por otro lado, la programación del lado del servidor se refere a los programas que son ejecutados completamente en el servidor y que hacen uso de los recursos computacionales del servidor. Los únicos recursos del cliente utilizados son involucrados en realmente recuperar los resultados de procesamiento del servidor. Las aplicaciones Web y los servicios Web son un ejemplo de la programación del lado del servidor. La programación del lado del servidor utiliza una tecnología del lado del servidor tal como ASP.NET, PHP, o Ruby on Rails.
¿Comprende cómo utilizar HTML, JavaScript y CSS para el desarrollo de una página Web? — USD 4.1
ÁM
; ¿Listo para la certificación?
Las aplicaciones hibridas que utilizan tanto programación del lado del cliente y del lado del servidor se han hecho cada vez más populares. Puede diseñar aplicaciones de cliente inteligente que se ejecutan localmente en las computadoras cliente pero que hacen uso de servicios Web para llevar a cabo ciertas tareas. Las aplicaciones Ajax utilizan una mezcla de programación del lado del servidor y código del lado del cliente para crear aplicaciones Web interactivas y altamente sensibles.
www.pdftron.com RO
ASP.NET le permite crear aplicaciones que se ejecutan completamente en el servidor o aplicaciones Ajax hibridas que proporcionan interfaces rápidas sensible mientras que almacenan la mayoría de la información en la Web.
È EN RESUMEN
BE
Comprender el desarrollo de una aplicación de ASP. NET
ET
CI
ASP.NET es la parte del .NET Framework que le permite desarrollar formularios Web programables y servicios Web. Como con cualquier aplicación de .NET Framework, puede desarrollar aplicaciones ASP.NET en cualquier lenguaje que sea compatible con el tiempo de ejecución en.NET, incluyendo Visual Basic y C#. La infraestructura de ASP.NET tiene dos partes principales:
• •
Un conjunto de clases e interfaces que permite la comunicación entre el navegador Web y el servidor Web. Estas clases están organizadas en el espacio de nombres System.Web. Un proceso en tiempo de ejecución, también conocido como el proceso trabajador de ASP.NET (aspnet_wp.exe), que maneja la solicitud Web para recursos de ASP. NET.
En un nivel alto, una aplicación Web de ASP.NET es ejecutada a través de una serie de solicitudes y mensajes de respuesta de HTTP entre los navegadores cliente y los servidores Web. El proceso ocurre como sigue:
Comprender las Aplicaciones Web
111
1. El usuario solicita un recurso del servidor Web tecleando una URL en el navegador Web. El navegador envía una solicitud HTTP al servidor Web destino. 2. El servidor Web analiza la solicitud HTTP y busca el proceso capaz de ejecutar la solicitud. 3. El resultado de la solicitud HTTP es retornada al navegador cliente en la forma de una respuesta HTTP. 4. El navegador lee la respuesta HTTP y la interpreta como una página Web para el usuario.
ER ICA
Este proceso está representado en la Figura 4-6.
Solicitud HTTP
Respuesta HTTP
ÁM
Como desarrollador, estará interesado en conocer lo que sucede tras bambalinas cuando un servidor Web ejecuta una solicitud para una página ASP.NET. La siguiente lista describe el proceso: 5. Cuando el Servicio de Información de Internet (IIS) recibe una solicitud HTTP, utiliza la extensión del nombre del archivo para determinar qué programa de interfaz de programación de aplicación (ISAPI) del servidor ejecutar para procesar la solicitud. Cuando la solicitud es para una página ASP.NET, pasa la solicitud al ISAPI DLL capaz de manejar las solicitudes para páginas de ASP.NET, el cual es aspnet_isapi.dll. 6. El proceso aspnet_isapi.dll pasa la solicitud al proceso trabajador de ASP.NET (aspnet_ wp.exe), el cual cumple la solicitud. 7. El proceso trabajador de ASP.NET compila el archivo .aspx en un assembly y le pide al CLR que ejecute el assembly.
BE
La clase Page proporciona algunos métodos y propiedades importantes que pueden controlar cómo una solicitud de página es procesada. Para la lista completa de métodos y propiedades, mire http://msdn. microsoft.com/en-us/ library/system.web. ui.page.aspx.
RO
www.pdftron.com Tome Nota
8. Cuando el assembly se ejecuta, toma los servicios de varias clases en la librería de clases del .NET Framework para llevar a cabo su trabajo y genera mensajes para el cliente solicitante.
ET
CI
9. El proceso trabajador de ASP.NET colecta las respuestas generadas por la ejecución de la página Web, crea un paquete de respuesta y lo pasa al proceso aspnet_isapi.dll. 10. Aspnet_isapi.dll reenvía el paquete de respuesta a IIS, el cual a su vez pasa la respuesta a la maquina cliente solicitante.
Antes de la ejecución, cada página ASP.NET es convertida en una clase. Esta clase deriva la mayoría de su funcionalidad de la clase System.Web.UI.Page. La clase Page proporciona algunas propiedades importantes tales como Request, Response, Session y Server.
Ciclo de vida y modelo de evento de una página ASP.NET
Durante su ejecución una página ASP.NET pasa a través de muchas etapas diferentes de procesamiento, cada una de estas etapas va a través de pasos de procesamiento específcos tales como inicialización, carga, código manejador de evento en ejecución e interpretación. Conforme una página se ejecuta, va a través de varias etapas de procesamiento. La página también dispara algunos eventos con los cuales puede adjuntar un manejador de evento
112
Lección 4
para ejecutar su código personalizado en distintas etapas de procesamiento de la página. Los desarrolladores de ASP.NET deben tener una buena comprensión del ciclo de vida de una página de manera que pueden escribir código que es ejecutado exactamente en la etapa deseada del procesamiento de la página. La tabla 4.1 enlista las diferentes etapas del ciclo de vida y sus eventos asociados.
Tome Nota En un formulario de contacto típico, introduzca información y presione el botón de enviar. Cuando envía esta página, la página puede procesar los datos enviados para tomar alguna acción tal como el almacenamiento de los datos en una base de datos o enviar un correo electrónico. En muchos casos, la página principal es mostrada nuevamente con una confirmación del envío del formulario. Ocurre una devolución de datos cuando la información es publicada a la misma página Web para el procesamiento. Una devolución de datos es distinta a la carga inicial de la página debido a que la página recibe información adicional como datos de formulario como parte del postback de la página.
Etapa
Significado
Solicitud de página
Cuando una solicitud de página es recibida, se inicia el ciclo de vida de la página. En este punto, ASP.NET decide si la página será fácilmente servida desde la caché o si necesita ser analizada y compilada.
Eventos Asociados
Inicio
En esta etapa, se determina si la solicitud es una devolución de datos o una nueva solicitud. Algunas propiedades de la página tales como Request, Response, IsPostBack y UICulture son establecidas en esta etapa.
PreInit
Inicialización
Durante la etapa de inicialización, todos los controles en la página son inicializados y se hacen disponibles. Un manejador de evento para el evento Init es el mejor lugar para el código que desea que se ejecute antes de seguir con el procesamiento de la página.
Init
ER ICA
Etapas importantes en el ciclo de vida de una página ASP.NET
ÁM
Tabla 4-1
RO
www.pdftron.com Si la solicitud es una devolución de datos, esta etapa es utilizada para restaurar las propiedades de control con información desde el estado de vista y el estado de control. Un método que maneja el evento Load es el mejor lugar para almacenar el código de inicialización para cualquier control específico para esta página.
Load
BE
Carga
Si la solicitud es una devolución de datos, el control de los manejadores de evento son llamados, entonces, los valores de entrada son validados y la propiedad IsValid para la clase Page es establecida.
Pre interpretación
Esta fase señala que la pagina esta por interpretar sus contenidos. Un manejador de evento para el evento PreRender es la última oportunidad para modificar la salida de la página antes de que sea enviada al cliente.
Interpretación
En esta etapa, la página llama al método Render para cada control y rellena la respuesta que será enviada al navegador.
ET
CI
Manejador de evento Postback
PreRender
Comprender las Aplicaciones Web
Descarga
En esta etapa, la respuesta es enviada al cliente y se desempeña la limpieza de la página. Como parte de la limpieza, las propiedades tales como Request y Response son descartadas.
113
Unload
ER ICA
Cuando desea manejar un evento, debe escribir el código que registra al método para manejar el evento (también llamado manejador de evento) con el evento. Esto se hace generalmente utilizando el patrón de registro de evento común a través del .NET Framework: object.event += new EventHandler(eventhandler);
Aquí, reemplace object con el nombre del objeto que expone el evento, event con el nombre del evento, y eventhandler con el nombre del método que maneja al evento.
ÁM
Sin embargo, ASP.NET proporciona seis métodos especiales que son reconocidos como manejadores de evento por defecto y que no necesitan el código de registro. Estos son llamados especialmente métodos Page_Init, Page_Load, Page_DataBind, Page_PreRender y Page_Unload. Estos métodos son tratados como manejadores de evento para los eventos correspondientes expuestos por la clase page. Este evento automático es controlado por el atributo AutoEventWireup de la directiva @Page. Por defecto el valor de este atributo es True, lo cual signifca que estos métodos llamados especialmente son automáticamente enlazados con sus eventos correspondientes.
www.pdftron.com RO
Æ Comprender el ciclo de vida de una página ASP.NET
PREPÁRESE. Para ver cuántos eventos diferentes de la clase Page son ejecutados, desempeñe lo siguiente. 1. Crear un nuevo proyecto basado en la plantilla de aplicación web vacía de ASP.NET a la solución Leccion04. Nombre el proyecto como PageEvents.
BE
2. Seleccione Proyecto, Agregar nuevo elemento. Seleccione la plantilla de Formulario Web. Nombre el archivo WebForm1.aspx. 3. En la etiqueta HTML para la página (WebForm1.aspx), asegúrese que el atributo AutoEventWireup para la directiva @Page está establecida como True:
ET
CI
4. Haga clic derecho en la ventana de código y seleccione Ver Código desde el menú para cambiar a la vista de código. Remplace el código en el archivo de código subyacente (WebForm1.aspx.cs) con el siguiente código: using System; namespace PageEvents { public partial class WebForm1 : System.Web.UI.Page {
114
Lección 4
protected void Page_Load (object sender, EventArgs e) { Response.Write (“Mensaje desde Page_Load. ”); }
ER ICA
protected void Page_Init
(object sender, EventArgs e) {
Response.Write
(“Mensaje desde Page_Init. ”); }
protected void Page_PreRender
ÁM
(object sender, EventArgs e)
www.pdftron.com {
Response.Write
(“Mensaje desde Page_PreRender. ”);
RO
}
protected void Page_PreInit
BE
(object sender, EventArgs e)
{
Response.Write (“Mensaje desde Page_PreInit. ”);
CI
}
}
ET
}
5. Seleccione Depurar y después Inicie la depuración (o presione F5). La página default.htm se abrirá en un navegador Web. Se mostrará la salida de la página en la Figura 4-7.
Los caracteresson utilizados para incrustar bloques de código en la etiqueta HTML de una página. El código dentro de estos bloques de código incrustado es ejecutado durante la etapa de interpretación de la página. En los bloques de código incrustado, la sintaxis es utilizada para resolver una expresión y retornar su valor en el bloque. Por ejemplo, el siguiente bloque de código:
Cuando se ejecuta, visualizará la fecha actual en formato de itálicas: 12/01/2010
Comprender las Aplicaciones Web
115
La directiva @Page especifca varios atributos que controlan como el ASP.NET interpreta una página. Por ejemplo, en este ejercicio, los atributos de la directiva @Page especifcan:
• • • •
C# es el lenguaje de programación para esta página Web (Language=”C#”) Los eventos de la página son auto-wired (AutoEventWireup=true) El nombre del archivo de código que contiene la clase asociada con la pagina (CodeBehind=”WebForm1.aspx.cs”) El nombre de la clase para la página a heredar (Inherits=”PageEvents. WebForm1”)
ER ICA
Figura 4-7
ÁM
Formulario Web visualizando el orden de la ejecución de evento para una página ASP.NET
www.pdftron.com RO
Administración de estado
La administración de estado es importante para las aplicaciones Web debido a la naturaleza de desconexión de HTTP. Hay técnicas tanto del lado del cliente y del lado del servidor disponible para la administración de estado.
BE
La administración de estado es el proceso de administrar el estado para una página Web a través de viajes. Los valores de las variables y controles colectivamente conforman el estado de una página Web.
ET
CI
ASP.NET proporciona algunas técnicas para preservar la información de estado a través de devoluciones de datos de la página. Estas técnicas pueden ser ampliamente categorizadas como del lado del cliente o del lado del proveedor, dependiendo de donde son consumidos los recursos.
Administración de estado del lado del cliente Las técnicas del lado del cliente utilizan código HTML y las capacidades del navegador Web para almacenar información de estado en la computadora cliente. Las siguientes técnicas son utilizadas para almacenar información de estado en el lado del cliente:
•
Cadenas de consulta: el estado es administrado poniendo los datos en la URL de la página como una cadena de consulta como un conjunto de pares de valores clave. Por ejemplo, la siguiente URL incrusta una clave (q) de la cadena de consulta y el valor par (televisión): http://www.bing.com/search?q=television. Para recuperar el valor en la clave en una página ASP.NET, utilice la expresión Request. QueryString[“q”]. Aquí la QueryString es una propiedad del objeto Request.
116
Lección 4
•
QueryString obtiene la colección de todas las variables de cadena de consulta. Cookies: Las Cookies son pequeños paquetes de información que son almacenados por el navegador Web localmente en la computadora del usuario. Las Cookies son utilizadas comúnmente para almacenar las preferencias del usuario y contenidos de carritos de compra y para darles una experiencia de navegación personalizada en visitas subsecuentes a la página Web. La clase HttpCookie representa una cookie en su código, el siguiente código le muestra cómo establecer una cookie en una computadora cliente: HttpCookie cookie =
ER ICA
new HttpCookie(“Name”, “Bob”);
cookie.Expires = DateTime.Now.AddMinutes(10); Response.Cookies.Add(cookie);
• El siguiente código muestra cómo leer una cookie:
if (Request.Cookies[“Name”] != null)
ÁM
{
name =Request.Cookies[“Name”].Value;
www.pdftron.com
ET
CI
BE
•
Campos ocultos: Los campos ocultos contienen información que no es visualizada en la página pero que son parte del código de la página HTML. Los campos ocultos pueden ser creados utilizando el elemento HTML 0)
BE
{
SelectData(textBox1.Text);
} }
ET
CI
4. Agregue el siguiente método a la clase. Asegúrese de cambiar la cadena de conexión para que coincida con la ruta local del archivo de la base de datos en su computadora: private void SelectData(string selectCommandText) { try { // Cambie la cadena de conexión // para que coincide con su sistema. string selectConnection = @”Data Source=.\SQLEXPRESS;” + @”AttachDbFilename=” + @”c:\SqlSampleDB\NORTHWND.MDF;” + @”Integrated Security=True;” + @”Connect Timeout=30;User Instance=True”; SqlDataAdapter dataAdapter = new SqlDataAdapter( selectCommandText, selectConnection);
172
Lección 6
DataTable table = new DataTable(); dataAdapter.Fill(table); dataGridView1.DataSource = table;
}
} catch (Exception ex) { MessageBox.Show(ex.Message); }
usingSystem.Data;
ER ICA
5. Agregue la siguiente directiva using al código: usingSystem.Data.SqlClient;
6. Seleccione Depurar y después Iniciar Depuración para ejecutar el proyecto. Introduzca una consulta SQL y haga clic en el control Button. Podrá ver la salida como se muestra en la Figura 6-7. Figura 6-7
ÁM
Ejecutando consultas desde una aplicación de C#
BE
RO
www.pdftron.com
ET
CI
El código en este ejercicio implementa un método SelectData que inicializa un objeto SqlDataAdapter y lo utiliza para llenar un DataTable. El DataTable es entonces enlazado como una fuente de datos para el componente DataGridView. El objeto SqlDataAdapter actúa como una tubería entre SQL Server y el DataTable para recuperar datos. El método Fill cambia los datos en el DataTable para que coincidan los datos en la fuente de datos. El select CommandText es utilizado para identifcar los datos en la fuente de datos.
Seleccionar Datos La sentencia SELECT es utilizada para recuperar datos desde una o más tablas de la base de datos. La sentencia SELECT generalmente es de la siguiente forma: SELECT lista_de_campos FROM lista_de_tablas
Comprender las Bases de Datos
173
WHERE clausula_where GROUP BY agrupado_por_clausula HAVING clausula_teniendo ORDER BY clausula_ordenar_por
ER ICA
Cada una de estas líneas de código en la sentencia SELECT es llamada cláusula. El SELECT y FROM son requeridos y el resto son opcionales. Por ejemplo, está una sentencia SQL que contiene solo las clausulas requeridas: SELECT OrderId, CustomerId FROM Orders
Si desea enlistar todos los campos de la tabla, también puede utilizar el siguiente atajo en lugar de enlistar explícitamente todos los campos: SELECT *
ÁM
FROM Orders
También puede seleccionar información desde múltiples tablas, por ejemplo:
www.pdftron.com Select OrderId, Customers.CustomerId, ContactName
RO
From Orders, Customers
BE
Customers.CustomerId es llamado un nombre totalmente califcado, especifcando tanto el nombre de la tabla como el nombre del campo. Esto es necesario debido a que tanto la tabla Orders y la Customers incluyen este campo y necesita decirle al SQL Server a cuál desea referirse.
ET
CI
Si ejecuta esta consulta, obtendrá mucho más registros de los que podría haber esperado. Esto sucede debido a que aunque le dice a SQL Server cuales tablas incluir, no incluyó ninguna información para cómo relacionar esas tablas. Como resultado, SQL Server construye el resultado para que incluya todas las flas de la tabla Customer para cada fla de la tabla Orders. Este tipo de unión es llamado cross join y no es muy útil en este caso.
Una consulta más útil, por supuesto, coincidiría cada orden con su respectivo cliente. La palabra clave INNER JOIN puede ayudarle a llevar a cabo esto, como se muestra en la siguiente consulta: SELECT OrderID, Customers.CustomerId, ContactName FROM Orders INNER JOIN Customers ON Orders.CustomerId = Customers.CustomerId
Esta consulta le dice a SQL Server que tome cada fla en la tabla Orders y que empate todas las flas en la tabla Customers en las cuales el CustomerId de la orden es igual al CustomerId del cliente. Debido a que CustomerId es único en la tabla Customers, esto es lo mismo que solo incluir una sola fla para cada orden en los resultados. En este caso, como resultado tendrá tantas flas como las hay en la tabla Orders.
174
Lección 6
¿Pero y si desea ver solo algunas de las flas en la tabla? Puede utilizar una clausula WHERE. La cláusula WHERE evalúa a cada fla para una condición y decide si incluirla o no en los resultados. Por ejemplo: SELECT * FROM Orders WHERE ShipCountry = ‘Canada’ El delimitador estándar para texto y fechas en SQL es una comilla simple.
Aquí la cláusula WHERE mira a cada fla en la tabla Orders para ver si ShipCountry tiene el valor exacto “Canadá”. Si lo tiene, la fla es incluida en los resultados, si no, la fla no es incluida en los resultados.
ER ICA
Tome Nota
También puede combinar múltiples condiciones en una sola cláusula WHERE. Por ejemplo: SELECT * FROM Orders
ÁM
WHERE (ShipCountry = ‘Canada’)
www.pdftron.com AND (OrderDate>= ‘01/01/97’) AND (OrderDate= ‘01/01/97’) AND (OrderDate= ‘01/01/97’) AND (OrderDate. XML puede ser más complejo de lo discutido en esta sección. Pero estas bases son sufcientes para que comprenda la mayoría de los documentos XML que es probable que se encuentre hasta que inicie a trabajar con XML a profundidad. Hay muchas maneras en las cuales puede trabajar con información XML. Las clases para trabajar con información XML están organizadas en el espacio de nombres de System. Xml. Esta lección se enfoca en las siguientes clases utilizadas comúnmente:
Comprender las Bases de Datos
• •
189
XmlReaderyXmlWriter: Estas clases proporcionan una manera rápida, sin entrar a cache y solo hacia adelante para leer o escribir datos XML. XmlDocument: Esta clase es una representación en memoria de datos XML y permite la navegación y edición del documento XML.
En el siguiente ejercicio utilice la clase XmlReader para leer un archivo XML llamado Customers.xml de una manera secuencial y solo hacia adelante:
Æ Leer desde un Archivo XML
ER ICA
PREPÁRESE. Para leer desde un archivo XML, haga lo siguiente:
1. Cree un nuevo proyecto de Aplicación de Consola llamado WorkingWithXmlReader. 2. Agregue el siguiente código al método Main de la clase Program: using (XmlReader reader =
XmlReader.Create(“Customers.xml”)) { {
ÁM
while (reader.Read())
if (reader.IsStartElement())
www.pdftron.com {
switch (reader.Name)
RO
{
case “CompanyName”: if (reader.Read())
{
BE
Console.Write(
“Company Name: {0}, “, reader.Value);
ET
CI
}
break; case “Phone”: if (reader.Read()) { Console.WriteLine( “Phone: {0}”, reader.Value); } break; } } }
190
Lección 6
} 3. Necesitará agregar la siguiente directiva using al programa: usingSystem.Xml; 4. Agregue un nuevo archivo XML llamado Customers.xml al proyecto. Asegúrese que el archivo XML contiene la siguiente información:
ER ICA
AlfredsFutterkiste 030-0074321
Eastern Connection
ÁM
(171) 555-0297
www.pdftron.com RO
5. Genere el programa. Copie el archivo Customers.xml a la carpeta del programa ejecutable. Ejecute el programa, se mostrará una lista de todos los nombres de compañías y sus números telefónicos.
BE
El código en este ejercicio primero crea una nueva instancia de XmlReader utilizando el método XmlReader.Create. Esto lanzara una excepción si el archivo no es encontrado. Este programa se terminará cuando el método XmlReader.Read no tenga nada por leer. Puede utilizar las propiedades tales como Name y Value para acceder a varias porciones de XML.
Trabajar con DataSet
ET
CI
El XML (Lenguaje de Etiquetado Extensible) es un formato basado en texto para la representación de datos estructurados. Un DataSet es una representación en memoria de datos relacionales. Justo como una base de datos, un DataSet puede tener tablas, relaciones y restricciones de integridad de datos como las restricciones únicas y las restricciones de clave foránea. Un DataSet es generalmente creado recuperando información desde una fuente de datos tal como una base de datos. Una vez que ha creado un DataSet, puede trabajar con toda la información en el DataSet aun cuando el enlace a la fuente de datos no está disponible temporalmente. Cuando hay cambios en los datos, solo la copia en memoria de los datos es actualizada. La conexión a la fuente de datos es necesaria solo cuando es tiempo de actualizar la fuente de datos con los cambios del DataSet. El DataSet es muy útil para la creación de aplicaciones desconectadas. Las aplicaciones desconectadas son aplicaciones que pueden continuar funcionando sin una conexión constante a recursos de red tal como una base de datos. Todas las clases relacionadas con el DataSet son parte del espacio de nombres de System. Data. Un objeto DataSet es creado utilizando la clase DataSet. El DataSet consiste de una
Comprender las Bases de Datos
191
colección de objetos DataTable. Un DataTable es justo como una tabla de una base de datos relacional. Un objeto DataTable tiene una colección de objetos DataColumn que representan las columnas en la tabla. Las flas en el DataTable son representadas por la colección DataRow. El DataAdapter actúa como un Puente entre la fuente de datos y el DataSet. El DataAdapter almacena la conexión de datos y los comandos de datos necesarios para conectarse a la fuente de datos. El DataAdapter también proporciona comandos para la recuperación de datos desde la fuente de datos y comandos para la actualización de la fuente de datos con cualquier cambio.
Tome Nota También se puede conectar a una base de datos de SQL Server utilizando las clases
• • •
La clase OdbcDataAdapter es utilizada para trabajar con fuentes de datos ODBC. La clase OdbcDataAdapter es parte del espacio de nombres de System.Data.Odbc. La clase OleDbDataAdapter es utilizada para trabajar con fuentes de datos OLEDB. La clase OleDbDataAdapter es parte del espacio de nombres de System.Data. OleDb. La clase SqlDataAdapter es utilizada para trabajar con una base de datos de SQL Server. La clase SQLDataAdapter es parte del espacio de nombres de System.Data. SqlClient. dbcAdapteryOleDbAdapter. Sin embargo, la clase SQLDataAdapteres optimizada para SQL Server. Por lo tanto, cuando se trabaja con SQL Server, es preferible utilizar la claseSQLDataAdapter.
ÁM
•
ER ICA
El .NET Framework proporciona tres tipos de clases DataAdapter para trabajar con distintos tipos de Fuentes de datos:
www.pdftron.com En una aplicación típica que crea y actualiza un DataSet, tendrá los siguientes pasos:
RO
1. Generar y llenar cada DataTable en el DataSet con datos de la fuente de datos utilizando un DataAdapter.
2. Cambiar los datos en los objetos DataTable individuales agregando, actualizando o eliminando objetos DataRow.
ET
CI
BE
3. Invocar el método AcceptChanges en el DataSet. Este método conecta a las fuentes de datos originales y las actualiza con todos los cambios hechos en el DataSet desde que fue cargado o desde la última vez que AcceptChanges fue llamado. Alternativamente, puede llamar al método RejectChanges para cancelar todos los cambios que fueron hechos al DataSet desde que fue cargado o desde la última vez que AcceptChanges fue llamado. En el siguiente ejercicio utilice las clases discutidas hasta ahora para leer datos desde la base de datos de SQL Server de Northwind en un DataSet y luego iterar sobre la tabla Customer para visualizar el número de órdenes para cada cliente.
Æ Leer un objeto DataSet en memoria PREPÁRESE. Para leer desde un objeto DataSet en memoria, haga lo siguiente: 1. Cree un nuevo proyecto de Aplicación de Consola llamado WorkingWithDataSet. 2. Remplace el código en la clase Program con el siguiente código. Asegúrese de cambiar la cadena de conexión para que coincida con la ruta local del archivo de la base de datos en su computadora: static void Main(string[] args) {
192
Lección 6
}
WorkingWithDataSet();
static void WorkingWithDataSet() { string cString = @”Data Source=.\SQLEXPRESS;” + @”AttachDbFilename=B:\SqlSampleDB\NORTHWND.MDF;” + “Integrated Security=True;” + “Connect Timeout=30;User Instance=True”;
ER ICA
SqlConnection northwindConnection = new SqlConnection(cString);
string customerCommandText = “SELECT * FROM Customers”; SqlDataAdapter customerAdapter = new SqlDataAdapter( customerCommandText, northwindConnection); string ordersCommandText =
ÁM
“SELECT * FROM Orders”; SqlDataAdapter ordersAdapter = new SqlDataAdapter( ordersCommandText, northwindConnection);
www.pdftron.com RO
DataSet customerOrders = new DataSet(); customerAdapter.Fill(
customerOrders, “Customers”); ordersAdapter.Fill( customerOrders, “Orders”);
ET
CI
BE
DataRelation relation = customerOrders.Relations.Add(“CustomerOrders”, customerOrders.Tables[“Customers”] .Columns[“CustomerID”], customerOrders.Tables[“Orders”] .Columns[“CustomerID”]); foreach (DataRow customerRow in customerOrders.Tables[“Customers”].Rows) { Console.WriteLine(customerRow[“CustomerID”]); foreach (DataRow orderRow in customerRow.GetChildRows(relation)) Console.WriteLine(“\t” +
orderRow[“OrderID”]); } Console.WriteLine( “Press any key to continue...”); Console.ReadKey(); }
Comprender las Bases de Datos
Un DataSet puede leer y escribir datos como documentos XML. Para escribir datos como XML, utilice el método WriteXmlde la clase DataSet. Para leer un documento de datos XML, puede utilizar el método ReadXml de la clase DataSet.
3. Necesitará agregar la siguiente directiva using al programa: usingSystem.Data; usingSystem.Data.SqlClient; 4. Seleccione Proyecto, posteriormente configure como Startup Project para hacer que el proyecto sea el inicial para esta solución. 5. Seleccione Depurar y después Iniciar Depuración (o presione F5) para ejecutar el programa. Notará que la ventana de consola enlista todos los clientes de la tabla Customers. Cada CustomerID es seguido por el OrderID correspondiente a ese cliente.
El código en este ejercicio primero crea un DataSet con dos objetos DataTable, Customers y Orders. El DataSet también crea un objeto DataRelation que establece la relación entre la tabla Customers y la tabla Orders en la columna CustomerID. Esta relación le permite llamar al método GetChildRow en una fla de cliente para recuperar las flas de las órdenes correspondientes a cada cliente.
ER ICA
Tome Nota
193
; ¿Listo para la certificación?
ÁM
¿Comprende los distintos métodos de conexión a bases de datos? — USD 6.3
ET
CI
BE
RO
www.pdftron.com
194
Lección 6
Resumen de Habilidades En esta lección aprendió:
•
• •
Las características y capacidades de un sistema de administración de base de datos. El proceso del diseño de una base de datos, cómo crear diagramas entidad relación y las reglas de normalización. Las bases de SQL (lenguaje de consulta estructurado). Aprendió cómo crear consultas SELECT, INSERT, UPDATE y DELETE. También aprendió cómo crear procedimientos almacenados y cómo acceder a consultas SQL y procedimientos almacenados desde un programa de C#. Cómo conectarse a archivos planos y a archivos XML para acceder y manipular datos en algunas Fuentes de datos no relacionales. Cómo trabajar con objetos de datos en memoria utilizando las clases DataSet y DataAdapter.
» Evaluación de Conocimientos
ÁM
Llene los espacios en blanco
ER ICA
• •
www.pdftron.com Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios proporcionados.
RO
1. Con el fn de que una tabla esté en la _________________, ninguna de las columnas debe tener valores múltiples en la misma fla de datos.
2. La _______________requiere que todas las columnas que no son clave sean funcionalmente dependientes de toda la clave principal.
BE
3. La _______________requiere que no haya dependencia funcional entre los atributos que no son clave.
4. Los bloques de construcción básicos para un diagrama entidad - relación son _______________, _______________ y_______________.
ET
CI
5. La cláusula _______________en una sentencia SELECT evalúa cada fla para una condición y decide si incluirlos o no en el conjunto de resultados.
6. El objeto utilizado con la sentencia using debe implementar la interfaz_______________. 7. La sentencia _______________de T-SQL puede ser utilizada para crear un procedimiento almacenado. 8. En el proceso de _______________, aplica un conjunto de reglas para garantizar que su diseño de base de datos ayuda con la integridad de datos y es fácil de administrar en el futuro. 9. Encuentra clases para trabajar con streams y almacenes de respaldo en el espacio de nombres de _______________. 10. El formato ____________ es una representación de datos jerárquica.
Comprender los conceptos básicos de bases de datos
195
Opción Múltiple Encierre en un círculo la letra que corresponda a la mejor respuesta.
a. b. c. d.
FileStream StreamWriter BinaryWriter XmlWriter
ER ICA
1. Su aplicación necesita almacenar la imagen del producto hacia un archivo en disco. Le gustaría minimizar el tamaño del archivo de disco. ¿Cuál de los objetos debe utilizar para escribir el archivo?
2. Su programa de C# necesita retornar el número total de clientes en una base de datos. El programa será utilizado varias veces al día. ¿Cuál es la manera más rápida de retornar esta información desde su programa?
ÁM
a. Escribir una consulta SQL y utilizar el método SqlCommand.ExecuteScalar para ejecutar la consulta SQL. b. Crear un procedimiento almacenado que retorne el número total de clientes. Utilizar el método SqlCommand.ExecuteScalar para ejecutar el procedimiento almacenado. c. Escribir una consulta SQL y utilizar el método SqlDataAdapter.Fill para ejecutar la consulta SQL. d. Crear un procedimiento almacenado para retornar el número total de cliente. Utilizar el método SqlDataAdapter.Fill para ejecutar el procedimiento almacenado.
RO
www.pdftron.com 3. Necesita modifcar los registros de la tabla Productsy marcar productos como Descontinuados. Sin embargo, necesita hacer esto solo cuando tanto UnitsInStock y UnitsOnOrder son cero. ¿Cuál de las siguientes sentencias SQL debe utilizar? INSERT SELECT UPDATE DELETE
ET
CI
BE
a. b. c. d.
4. Necesita actualizar los campos de Región para los clientes de Japón. Escribe la siguiente sentencia SQL UPDATE:
UPDATE Customers SET Region = ‘EastAsia’
5. Prueba la consulta en una base de datos de prueba y encuentra que se afectan más registros de lo esperado. Necesita corregir la sentencia SQL. ¿Qué debe hacer? a. b. c. d.
Agregar una clausula WHERE a la sentencia UPDATE. Agregar una clausula SET adicional a la sentencia UPDATE. Agregar una clausula GROUP BY a la sentencia UPDATE. Agregar una clausula HAVING a la sentencia UPDATE.
196
Lección 6
6. Está desarrollando una aplicación que necesita recuperar una lista de clientes desde una base de datos de SQL Server. La aplicación debería moverse a través de la lista secuencialmente una vez, procesar cada registro de cliente. ¿Cuál de las siguientes clases debe utilizar para mantener la lista de clientes con el fn de lograr un desempeño máximo? DataSet DataTable DataView SqlDataReader
ER ICA
a. b. c. d.
7. La aplicación que está desarrollando necesita leer datos desde un archivo plano que incluye ítems tales como una clave entera de 5 dígitos, seguido por un nombre de cliente de 20 caracteres, seguido por dos campos de fecha y hora. ¿Cuál de las siguientes clases debe utilizar? FileStream StreamReader BinaryReader DataReader
ÁM
a. b. c. d.
8. Está desarrollando una aplicación que necesitará copiar datos desde una vista de SQL Server a un DataSet. Nombra al objeto DataSet como dsData. ¿Cuál de los siguientes métodos debe utilizar para copiar los datos?
www.pdftron.com Fill InsertCommand SelectCommand Update
RO
a. b. c. d.
BE
9. Está desarrollando una aplicación que administra clientes y sus órdenes. ¿Cuál de las siguientes situaciones no es un buen candidato para la implantación con procedimientos almacenados en su aplicación? Recuperar la lista de todos los clientes en la base de datos Recuperar la lista de todas las órdenes para un cliente en particular Insertar una nueva orden en la tabla Orders Hacer consultas Ad-hoc por el administrador de la base de dato
ET
CI
a. b. c. d.
10. Su aplicación se conecta a una base de datos de SQL Server que contiene una tabla llamada Employees con las siguientes columnas: a. EmployeeID (int, identity) b. EmployeeType (char(1)) c. EmployeeDate (datetime)
Comprender los conceptos básicos de bases de datos
197
11. Necesita escribir una consulta que elimine todas las flas de la tabla donde el valor de EmployeeTypees ya sea C o T. No desea eliminar ninguna otra fla. ¿Cuál sentencia debe utilizar? a. DELETE FROM Employees WHERE EmployeeType LIKE ‘[CT]’
b. DELETE FROM Employees WHERE EmployeeType LIKE ‘[C-T]’
c. DELETE FROM Employees
ER ICA
WHERE EmployeeType LIKE ‘C’ OR ‘T’
d. DELETE * FROM Employees
WHERE EmployeeType IN (‘C’, ‘T’)
12. Su aplicación incluye un objeto SqlDataAdapter llamado SqlDataAdapter que se conecta a la tabla Employees. Basado en este SQLDataAdapter, su aplicación también incluye un objeto DataSet, dsEmployees. ¿Cuál línea de código debe utilizar para cargar toda la información desde la base de datos en el objeto DataSet? dsEmployees = sqlDataAdapter.Fill(“Employees”);
sqlDataAdapter.Fill(“dsEmployees”, “Employees”);
ÁM
a. b. c. d.
www.pdftron.com sqlDataAdapter.Fill(dsEmployees);
ET
CI
BE
RO
sqlDataAdapter.Fill(dsEmployees, “Employees”);
198
Lección 6
» Evaluación de Competencia Proyecto 6-1: Crear un Diagrama Entidad - relación Una compañía tiene un número de empleados. Cada empleado puede ser asignado a uno o más proyectos. Un proyecto puede tener uno o más empleados trabajando en él. Dibuje un diagrama entidad - relación para esta situación.
ER ICA
Proyecto 6-2: Crear un Procedimiento Almacenado A menudo necesita una lista de clientes para cierto país. Necesita crear un procedimiento almacenado que acepte el nombre del país como parámetro y retorne todos los clientes de ese país. ¿Cómo haría eso?
» Evaluación de Competencia
Proyecto 6-3: Normalizar Tablas
ÁM
Está convirtiendo un diagrama entidad - relación en tablas. Obtiene la siguiente tabla:
www.pdftron.com Books
BookId
2
3
CategoryName
Cocinando Sano
1001
Cocina
Profecía
1002
Misterio y Suspenso
Cambio
1003
Negocios
La Confesión
1002
Misterio y Suspenso
BE
4
CategoryId
RO
1
BookName
Necesita aplicar las reglas de normalización para garantizar la integridad de datos. ¿Cómo garantizaría que la tabla Books está en la tercera forma normal?
ET
CI
Proyecto 6-4: Crear y Manejar Eventos Está trabajando en una aplicación que requiere que guarde información de cliente desde la tabla Customers de la base de datos de Northwind en un archivo XML. Este archivo XML será utilizado por varias tareas de integración de datos. Necesita garantizar que el nodo raíz del XML es llamado Customers. El nodo raíz entonces tendrá un nodo Customer para cada cliente en la tabla Customers. ¿Cómo debe llevar a cabo esta tarea?
View more...
Comments