Sunteți pe pagina 1din 199

ET

CI

BE

RO

www.pdftron.com

ER ICA

Leccin 1

Introduccin a la programacin
Matriz de dominio de objetivos
Habilidad tecnolgica Comprender la programacin de computadoras Comprender las estructuras de decisin Comprender las estructuras de repeticin Comprender el manejo de excepciones Descripcin de dominio de objetivos Comprender el almacenamiento y los tipos de datos computacionales Comprender estructuras de decisin computacionales Nmero de dominio de objetivos 1.1 1.2 1.3 1.4

Identicar el mtodo apropiado para el manejo de las repeticiones Comprender el manejo de errores

ET

CI

BE

Como desarrollador de software para corporacin Northwind, parte de su trabajo es desarrollar programas de computadora que resuelvan problemas de la compaa. Algunos de estos ejemplos son: analizar rdenes de clientes y determinar descuentos, as como actualizar la informacin del almacn sobre los miles de productos en el inventario y elaborar un reporte interactivo que permita al usuario ordenar y fltrar los datos.

Es de suma importancia asegurarse que sus programas se diseen de acuerdo a las especifcaciones. Tambin necesita asegurarse que todos los clculos sean precisos y completos. Los programas que desarrolle debern ser robustos y capaces de mostrar mensajes de error pero tambin de continuar con el procesamiento. El lenguaje de programacin que utilice le proporcionar una variedad de herramientas y tcnicas que le permitirn 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.

RO

www.pdftron.com
Algoritmo Vector Constante Tabla de decisin Ciclo do-while Excepcin Diagrama de fujo Ciclo for Ciclo foreach If If-else Operador Programa Recursin Switch Try-catch-fnally Variable Ciclo while

Trminos clave

ER ICA

Leccin 1

Comprender la programacin de computadoras


EN RESUMEN

Un programa de computadora es un conjunto de instrucciones precisas para llevar a cabo una tarea. En esta seccin aprender a escribir algoritmos y programas de computadoras para solucionar un problema dado. Adems de escribir su primer programa computacional utilizando el lenguaje de programacin C#, tambin aprender la estructura bsica de un programa, as como a compilarlo, ejecutarlo, ingresar datos y generar resultados de un programa.

Un algoritmo es un conjunto de pasos ordenados y fnitos para resolver un problema dado.

El trmino algoritmo se refere a un mtodo para solucionar problemas. Los algoritmos se pueden describir con palabras pero podran suceder errores de comprensin relacionados con la complejidad y ambigedad de un idioma natural.

Introduccin a los diagramas de ujo

ET
Smbolos de diagramas de ujo comunes

Tabla 1-1

CI

BE

Esta seccin se enfoca en dos tcnicas para algoritmos, los diagramas de fujo y las tablas de decisin que son ms precisas que un idioma natural pero menos formales y ms fciles de utilizar que un lenguaje de programacin.

Un diagrama de fujo es una representacin grfca de un algoritmo. Un diagrama de fujo se realiza generalmente utilizando smbolos estandarizados para diagramas de fujo. Algunos de los smbolos comunes de diagramas de fujo aparecen en la tabla 1-1.
Smbolo del diagrama de ujo Descripcin Inicio o nal de un algoritmo Un proceso u operacin computacional Operacin de entrada o salida Operacin de toma de decisin

RO

www.pdftron.com
Estas herramientas para el desarrollo de algoritmos pueden ayudarlo a expresar la solucin para un problema de manera fcil, 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 programacin como C# sobre el cual aprender en la siguiente seccin.

De ah que los algoritmos generalmente se escriban en formatos ms simples y precisos como diagramas de fujo, rboles de decisin y tablas de decisin que representen un algoritmo como un diagrama, tabla o grfco. Estas tcnicas se utilizan generalmente antes de escribir los programas para contar con una mejor comprensin de la solucin.

ER ICA
Especica el ujo de control

Introduccin a los Algoritmos

Introduccin a la programacin

Por ejemplo, la fgura 1-1 muestra un diagrama de fujo que ingresa dos nmeros, los compara y produce como salida el nmero mayor.
Figura 1-1
Un diagrama de ujo sencillo que compara dos nmeros y da como resultado el mayor

Introduccin a las tablas de decisin

ET
Tabla 1-2

CI

BE
Cantidad < 10 Cantidad < 50 Cantidad < 100 Descuento
Una tabla de decisin que calcula descuentos

RO
S S S 5%

www.pdftron.com
Cuando se requiere de una gran cantidad de condiciones en un algoritmo, las tablas de decisin son un formato ms compacto y legible para representarlo. La tabla 1-2 muestra una tabla de decisin para calcular un descuento. Esta tabla genera un porcentaje de descuento dependiendo de la cantidad de producto que se haya comprado. La lnea en negrita en la tabla divide la tabla de decisin en cuatro cuadrantes. El primer cuadrante en la izquierda superior especifca las condiciones (Cantidad <10, etc.). El segundo cuadrante (superior derecha) especifca las reglas. Las reglas son las posibles combinaciones que resultan de cada condicin. El tercer cuadrante (inferior izquierda) especifca la accin (en este caso el Descuento) y el ltimo cuadrante especifca los elementos de la accin que corresponden a cada regla.
N S S 10% N N S 15% N N N 20%

Como puede ver, este diagrama de fujo muestra en el orden correcto todos los pasos necesarios para llevar a cabo la operacin. El control inicia con el smbolo Inicio y termina con el smbolo 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 (ejecucin seca). En ella se traza de forma manual lo pasos en el diagrama de fujo para revisar si los datos siguen la ruta correcta.

****Note las lneas en negritas que dividen la tabla en cuadrantes*****


Para descubrir cual accin se debe aplicar, se evala cada condicin para encontrar la regla coincidente y seleccionar la accin especifcada en la columna con la regla coincidente. Por ejemplo, si el valor de la cantidad es 75 entonces la primera regla evala un No, la segunda regla evala un No y la tercera evala un S. Por lo que debe seleccionar el elemento de la accin de la columna (N, N, S) que establece un descuento de 15%.

ER ICA

Leccin 1

Introduccin a C#
C# es un lenguaje de programacin de alto nivel muy popular que le permite escribir programas de computadora en un formato legible para los humanos. C# es parte de .NET Framework y se benefcia del tiempo de ejecucin y libreras de clase que se encuentran en .NET Framework. Como se mencion en la seccin anterior, las computadoras necesitan de instrucciones precisas y completas para llevar a cabo una tarea. Este conjunto de instrucciones se conocen como programas de computadora o simplemente programas.

Utilizar el cdigo binario para programar una computadora es muy difcil para llevar a cabo cualquier tarea. Para simplifcar la programacin, los cientfcos e ingenieros en computacin desarrollaron varios niveles de abstraccin entre la mquina y el humano. Estas abstracciones incluyen software, como los sistemas operativos, compiladores y varios sistemas en tiempo de ejecucin, que asumen la responsabilidad de traducir un programa legible para los humanos en un programa legible para la mquina.

ET

CI

BE
El .NET Framework

Cada lenguaje de programacin cuenta con su propio conjunto de vocabulario y gramtica (tambin conocido como sintaxis). En este curso, aprender a programar en C#, el cual es un lenguaje de programacin en .NET Framework. .NET Framework cuenta con un ambiente en tiempo de ejecucin para el programa C#. Framework tambin cuenta con libreras de clase que ofrecen una gran funcionalidad reutilizable que se puede utilizar directamente en su programa de C#.

El .NET Framework cuenta con tres componentes principales: un ambiente en tiempo de ejecucin, un conjunto de libreras de clase que ofrece una gran funcionalidad reutilizable y compiladores de lenguaje para C#, Visual Basic y Managed C++. El .NET Framework soporta diferentes lenguajes de programacin as como lenguajes adicionales al sistema. Aun cuando la sintaxis y vocabulario de cada lenguaje pueda ser diferente, cada uno utiliza las libreras de clase base con las que cuenta el Framework.

En este curso utilizar un ambiente de desarrollo integrado (IDE) para desarrollar su cdigo. Utilizar Visual Studio o la edicin gratuita de Visual Studio Express para escribir su cdigo. Cualquiera de estas herramientas le ofrece un ambiente altamente productivo para desarrollar y evaluar sus programas.

RO

www.pdftron.com

La mayora de los programas modernos se encuentran escritos en un lenguaje de alto nivel como C#, Visual Basic y Java. Estos lenguajes le permiten escribir instrucciones precisas en un formato legible para los humanos. El compilador de lenguaje puede entonces traducir el lenguaje de alto nivel en un lenguaje de bajo nivel que pueda comprenderse en el sistema en tiempo de ejecucin.

ER ICA

En un nivel muy bsico, las computadoras utilizan el sistema binario para representar informacin y cdigo. En el sistema binario, cada valor se representa utilizando nicamente dos smbolos, 0 y 1. A un programa de computadora escrito en cdigo binario se le conoce como cdigo binario.

Introduccin a la programacin

Escriba un programa en C#
Tome Nota C# es un lenguaje de programacin sensible a maysculas. Por ejemplo, si escribe Class en lugar de class, le resultar un error de sintaxis. PREPRESE. Para escribir un programa en C#, realice lo siguiente: 1. Inicie Visual Studio. Seleccione Archivo y despus Nuevo proyecto, Visual c#, Seleccione Aplicacin de consola en Plantillas 2. Ingrese IntrodCS en el cuadro Nombre. Asegrese que el cuadro de vericacin Crear directorio para la solucin se encuentre seleccionado e ingrese el nombre Lesson01 en el cuadro Nombre de la solucin. Haga clic en Aceptar para crear el proyecto.

4. Modique la plantilla para que luzca como el siguiente cdigo: Otra Manera Tambin puede ejecutar el programa si abre una ventana de lnea de comandos (cmd.exe) y despus navega a la carpeta de salida del proyecto, que de forma predeterminada es bin/debug bajo la ubicacin del proyecto. Se puede iniciar el programa escribiendo el nombre del programa en la ventana de comandos y presionando Enter. using System; namespace Lesson01 { class Program {

Figura 1-2

ET
7. Presione una tecla para cerrar la ventana de lnea de comandos. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

CI

Resultado del programa en una ventana

BE

RO
} }

www.pdftron.com
static void Main(string[] args) { } Console.WriteLine(hola, mundo!); 5. Seleccione Depurar, Iniciar sin depurar, o presione Ctrl+F5. 6. Observar el resultado del programa en una ventana de comandos, como aparece en la Figura 1-2.

ER ICA

3. Despus de crear el proyecto, notar que Visual Studio ha creado un archivo de nombre Program.cs y escrito una plantilla para usted.

Leccin 1

Tome Nota Cuando seleccione la opcin Depurar, Iniciar sin depurar y Visual Studio muestra automticamente el mensaje Presione una tecla para continuar. La ventana de lnea de comandos permanece abierta para que pueda ver el resultado. Si selecciona la opcin Depurar y despus Iniciar depuracin, la ventana de comandos se cierra tan pronto como se termina la ejecucin del programa. Es importante saber que la opcin Depurar e Iniciar depuracin cuenta con capacidades de depuracin como lo es la habilidad de pausar un programa en ejecucin en un punto dado y revisar el valor de varias variables en memoria.

El programa que acaba de crear es muy sencillo pero resulta de utilidad para comprender la estructura de un programa, su construccin y ejecucin. Primero comentemos sobre la parte de la construccin y ejecucin. A continuacin se menciona lo que sucede cuando selecciona la opcin Depurar y posteriormente Iniciar sin depurar en el paso 5 del ejercicio anterior:
1. Visual Studio invoca el compilador de C# para traducir el cdigo en un lenguaje de bajo nivel, en cdigo de Lenguaje Intermedio Comn (CIL). Este cdigo de bajo nivel se almacena en un archivo ejecutable de nombre Lesson01.exe. El nombre del archivo resultante se puede cambiar al modicar las propiedades del proyecto.

3. Cuando el programa termina, Visual Studio muestra el mensaje, Presione una tecla para continuar. Observe que este mensaje slo se genera cuando ejecuta el programa al utilizar la opcin Iniciar sin depurar.

Si no utiliza un IDE como Visual Studio, puede compilar su programa de forma manual utilizando las herramientas en lnea de comandos. Por supuesto, resulta mucho ms fcil y rpido utilizar Visual Studio para evaluar sus programas.

Tome Nota

Antes de que se pueda ejecutar el cdigo en Lenguaje Intermedio Comn (CIL), primero se debe traducir para la arquitectura de la mquina donde se ejecutar el cdigo. El sistema en tiempo de ejecucin de .NET Framework se encarga de esta traduccin tras bambalinas utilizando un proceso llamado compilacin just-intime.

ET

CI

BE

RO

www.pdftron.com

ER ICA

2. A continuacin, Visual Studio toma el resultado del proyecto y solicita al sistema operativo que lo ejecute. Aqu es cuando ve que la ventana de lnea de comandos muestra el resultado.

Introduccin a la programacin

Comprender la estructura de un programa en C#


En esta seccin, aprender sobre los elementos fundamentales del programa en C# que cre en la seccin anterior. La Figura 1-3 enlista el programa en el ejercicio anterior con nmeros. Esta seccin utiliza los nmeros de lnea para referirse a cada estructura del programa.
Figura 1-3

Tome Nota Para habilitar la vista de los nmeros de lnea en Visual Studio, seleccione Herramientas y despus Opciones. A continuacin, expanda el nodo Editor de texto y seleccione C#. Finalmente, en la seccin Mostrar, seleccione la opcin Nmeros de lnea (active la opcin Mostrar todas las conguraciones).

ET

CI
Referencia cruzada Puede encontrar ms informacin y otros tipos en la Leccin 2.

BE

RO

www.pdftron.com
Un programa en C# est formado por una o ms clases y otros tipos. Una clase es un conjunto de datos y mtodos. El cdigo en la Figura 1-3 defne una clase de nombre Program de las lneas 5 a la 11. Una clase se defne utilizando la palabra clave class seguida del nombre de la clase. El contenido de la clase se defne entre una llave de apertura ({) y una de cierre (}). La lnea 3 defne un espacio de nombre, Lesson01. Los Espacios de nombres se utilizan para organizar clases e identifcarlas de forma nica. El espacio de nombre y los nombres de las clases se combinan para crear un nombre de clase completamente calicado. Por ejemplo, el nombre de la clase completamente califcado para la clase Program es Lesson01. Program. C# requiere que el nombre de una clase completamente califcado sea nico. Por lo tanto, no puede tener otro nombre de clase para Program con el nombre Lesson01, pero puede utilizar Program para otro nombre como Lesson02. La clase Program defnida en el nombre Lesson02 es identifcada de forma nica utilizando su nombre de clase completamente califcado, Lesson02.Program. El .NET Framework cuenta con una gran cantidad de clases organizadas en muchos espacios de nombres. El espacio de nombres System contiene algunas de las clases ms comunes. Una de estas clases en el espacio de nombres System es Console. La clase Console ofrece funcionalidad de entrada y salida para la aplicacin de consola. El cdigo en la lnea 9 se refere a la clase Console e invoca al mtodo WriteLine. Para acceder al mtodo WriteLine debe hacerlo de la siguiente manera:
System.Console.WriteLine(hola, mundo!);

ER ICA

Listado del programa con nmeros de lnea

Leccin 1

Tome Nota Todas las sentencias en C# deben terminar con un punto y coma (;). Tome Nota El mtodo Main debe ser declarado como static. El mtodo static es invocable en una clase aun cuando no se haya creado una instancia de la clase. Aprender ms de este tema en la siguiente leccin.

Puesto que los nombres de las clases aparecen con frecuencia en el cdigo, escribir el nombre de la clase completamente califcados puede ser tedioso y hacer que los programas contengan exceso de palabras. Este problema se puede solucionar utilizando la directiva de C# using (vea el cdigo en la lnea 1). La directiva using le permite utilizar las clases en un espacio de nombres sin la necesidad de califcar completamente el nombre de la clase. La clase de Programa defne un solo mtodo por el nombre Main (lneas 7 a la 10). Main es un mtodo especial que tambin sirve como punto de entrada al programa. Cuando el tiempo de ejecucin inicia un programa, siempre empieza en el mtodo Main. Un programa puede tener muchas clases y cada clase puede tener muchos mtodos, pero debera tener slo un mtodo Main. Un mtodo puede a su vez llamar a otros mtodos. En la lnea 9, el mtodo Main est llamando al mtodo WriteLine de la clase System.Console para mostrar una cadena de caracteres en la ventana de lnea de comandos. Esa es la forma en la cual aparece el mensaje.

Comprender las variables

Las variables proporcionan almacenamiento temporal durante la ejecucin de un programa.

int number = 10;

ET

Comprender las constantes


Las constantes son los campos de datos o variables locales cuyos valores no se pueden modifcar. Las constantes se declaran utilizando la palabra const. Una const se puede declarar de la siguiente forma:
const int i = 10;

CI

BE
number = 20;

Cuando se declara una variable, se crea una ubicacin en la memoria de la computadora lo sufcientemente grande para contener el valor de este tipo de dato. Por ejemplo, en una mquina de 32-bit, una variable de un tipo de datos int necesitar dos bytes de memoria. El valor de una variable se puede modifcar por otra asignacin, como por ejemplo:

Este cdigo cambia el contenido de la ubicacin en memoria identifcada por el nombre number.

Aqu se declara una constante i del tipo de datos int y almacena un valor de 10. Una vez declarado, el valor de una constante no puede cambiar.

RO

www.pdftron.com
Tome Nota El nombre de una variable debe empezar con una letra o un guin bajo y puede contener slo letras, nmeros y guiones bajos. El nombre de una variable no debe ser mayor a 255 caracteres. Una variable debe ser nica dentro del mbito en el cual se haya denido.

Las variables en C # son marcadores de posicin utilizados para almacenar valores. Una variable tiene un nombre y un tipo de datos. El tipo de datos de la variable determina el valor que esta puede contener y el tipo de operaciones que se pueden desarrollar. Por ejemplo, la siguiente declaracin crea una variable de nombre number del tipo de datos int y asigna un valor de 10 a la variable:

ER ICA

Introduccin a la programacin

Comprender los tipos de datos


El tipo de datos especifca el tipo de valor con el cual se trabajar en el programa. El tipo de datos defne el tamao en memoria necesario para almacenar la informacin y el tipo de operaciones que se pueden realizar con los datos.
Referencia cruzada Puede obtener ms informacin sobre la creacin de sus propios tipos de datos en la Leccin 2.

C# ofrece varios tipos de datos predefnidos que puede utilizar en sus programas. Tambin puede defnir nuevos tipos al establecer una estructura de datos como una clase o un struct. Este captulo se enfoca en algunos de los tipos de datos predefnidos ms utilizados. La tabla 1-3 contiene algunos de los tipos de datos predefnidos ms utilizados en C#. El tamao mencionado en la tabla se refere a una computadora con longitudes de palabra de 32 bits. Para longitudes ms grandes, como de 64 bits, los tamaos sern diferentes.

Tabla 1-3
Algunos tipos de datos predenidos

Tipo de dato byte char short int long oat

Tamao 1 byte 2 byte 2 bytes 4 bytes 8 bytes 4 bytes

ET

CI

Comprender los Arreglos

Un arreglo es un conjunto de elementos en donde cada uno de ellos se accede a travs de un ndice nico. Un arreglo en C# se utiliza comnmente para representar un conjunto de elementos de tipo similar. A continuacin se incluye un ejemplo de una declaracin de un arreglo:
int[] numbers = { 1, 2, 3, 4, 5 };

BE

RO

www.pdftron.com
Tome Nota double 8 bytes 5.0e324 a 1.7e308 Las versiones sin signo de short, int y long son ushort, uint y ulong respectivamente. Los tipos sin signo tienen el mismo tamao como las versiones con signo pero almacenan rangos mucho mayores slo para valores positivos. bool 2 bytes Verdadero o falso string Cero o ms caracteres Unicode

Todos los tipos de datos mencionados en la tabla 1-3 son tipos de valores con excepcin de string, el cual es un tipo de referencia. Las variables que se encuentran basadas directamente en los tipos de valores contienen el valor en s. En el caso del tipo de referencia, la variable contiene la direccin de la ubicacin en memoria donde se encuentran almacenados los datos. Aprender ms sobre las diferencias entre los tipos de valores y referencias en la Leccin 2.

Esta declaracin crea un arreglo identifcado por el nombre numbers. Este arreglo puede almacenar un conjunto de cinco enteros. Esta declaracin tambin inicializa cada uno de los elementos del arreglo del 1 al 5 respectivamente. Cualquier elemento del arreglo se puede acceder de forma directa utilizando un ndice. En .NET Framework los ndices de arreglo empiezan desde cero. Esto signifca que para acceder al primer elemento de un arreglo, se utiliza el ndice 0, para acceder al segundo elemento se utiliza el ndice 1 y as sucesivamente.

ER ICA
Rango de valores 0 a 255 U+0000 a U+ffff (caracteres Unicode) -32,768 a 32,767 -2,147,483,648 a 2,147,483,647 1.5e45 a 3.4e38

-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

10

Leccin 1

Tome Nota El tema de los arreglos se cubre a mayor detalle en la Leccin 3, Comprender el desarrollo de software en general.

Para acceder a un elemento individual de un arreglo, se utiliza el nombre del arreglo seguido del ndice dentro de corchetes. Por ejemplo, numbers[0] devuelve el valor 1 del arreglo declarado anteriormente y numbers[4] devuelve el valor 5. Es ilegal acceder a un arreglo fuera de sus lmites defnidos. Por ejemplo, obtendr un error si intenta acceder al elemento del arreglo numbers[5].

Comprender los operadores


Los operadores son smbolos que especifcan la operacin a llevar a cabo con los operandos y regresar un resultado. Ejemplos de operadores incluyen +, -, *, /, etc., y los operandos pueden ser variables, constantes, literales, etc. Dependiendo de cuantos operandos se encuentren involucrados, hay varios tipos de operadores:

Tabla 1-4

BE
Primario Unario Multiplicativo Aditivo Desplazamiento Comprobacin de tipos y relacionales Igualdad AND lgico XOR lgico Logical OR AND Condicional OR Condicional Condicional Asignacin

Precedencia de operadores

Categora

RO

www.pdftron.com
Frecuentemente las expresiones involucran ms de un operador. En este caso, el compilador necesita determinar cul operador toma precedencia sobre otro. La tabla 1-4 contiene los operadores en C# en orden de precedencia. Entre ms arriba se encuentre el operador en la tabla, ms alta es su precedencia. Los operadores con precedencia ms alta son evaluados antes que los de baja. Los operadores que aparecen en la misma fla tienen la misma .
Operadores x.y f(x) a[x] x++ x-- new typeof checked unchecked + - ! ~ ++x --x (T)x * / % + << >> < > <= >= is as == != & ^ | && || ?: = *= /= %= += -= <<= >>= &= ^= |=

ET

CI

Operadores unarios: Los operadores unarios trabajan slo con un operando. Ejemplos incluyen ++x, x++, o isEven, donde x es de tipo de datos integer y isEven es un tipo de datos booleano. Operadores binarios: Los operadores binarios toman dos operandos. Por ejemplo, x + y o x > y. Operadores ternarios: Los operadores ternarios toman tres operandos. Slo hay un operador ternario, ?:, en C#.

ER ICA

Introduccin a la programacin

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

int y = x++; // el valor de y es 12 int z = ++x; // el valor de z es 14

Comprender los mtodos

Los mtodos sonbloques de cdigo que contienen series de sentencias. Los mtodos pueden recibir entradas va argumentos y pueden regresar un valor a quien los invoca.

ET

CI
Comprende los elementos bsicos de la programacin como las variables, tipos de datos, operadores y mtodos? -1.1

; Listo para la certicacin?

BE

RO

www.pdftron.com
En la segunda sentencia, el valor de x se incrementa antes de regresar su valor para la asignacin. Por lo tanto, despus de ejecutar la sentencia, el valor tanto de x como de z es 14. En la lista de cdigo anterior, aprendi sobre el mtodo Main. Los mtodos se encuentran donde estn las acciones en un programa. Un mtodo es un conjunto de sentencias que se ejecutan cuando se invoca el mtodo. El mtodo Main no regresa un valor, lo cual se indica utilizando la palabra void. Si un mtodo fuera a regresar un valor, se colocara 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 cmo y dnde se pueden acceder los miembros de la clase. Aprender ms sobre estos modifcadores en la Leccin 2.

Aqu en la primera sentencia, el valor de x se regresa antes del incremento. Como resultado, despus de que se ejecuta la sentencia, el valor de y es 12 y el valor de x es 13.

ER ICA

Sin embargo, la forma en la cual funcionan los operadores de incremento y decremento cuando se utilizan como parte de una asignacin 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 despus del incremento o decremento. Para comprender lo anterior, considere el siguiente cdigo:

12

Leccin 1

Comprender las estructura de decisin


EN RESUMEN

Las estructuras de decisin introducen la habilidad de toma de decisiones al programa, tambin le permiten diversifcarse a diferentes secciones del cdigo dependiendo del valor verdadero de una expresin booleana. Las estructuras de decisin 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 slo si la expresin booleana correspondiente es verdadera.

A veces en su programa, querr que una secuencia de sentencias se ejecute slo si una condicin es verdadera. En C# puede realizarlo al utilizar la sentencia if. Considere los siguientes pasos para crear un programa que utilice la sentencia if.

PREPRESE. Para utilizar la sentencia if, realice lo siguiente:

1. Agregue un nuevo proyecto de aplicacin de consola (de nombre if_Statement) a la solucin Lesson01.

2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs:

ET

CI
{ }

BE

int number1 = 10; int number2 = 20; if (number2 > number1)

3. Seleccione Depurar, Iniciar sin depurar, o presione Ctrl+F5. 4. Ver el resultado del programa en la ventana de lnea de comandos. 5. Presione una tecla para cerrar la ventana de consola. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Este cdigo es funcionalmente equivalente al diagrama de fujo de la Figura 1-4.

RO

www.pdftron.com
Uso de la sentencia if
Console.WriteLine(number2 es mayor que number1);

ER ICA

Introduccin a la programacin

13

Figura 1-4
El diagrama de ujo equivalente a la sentencia if

INICIO

n1 = 10

n2 = 20

ET

CI

BE

RO
if (number2 > number1) if (number2 > number1) int number1 = 10;

www.pdftron.com
En C#, los parntesis alrededor de la condicin son obligatorios, no as las llaves, estas son opcionales si slo hay una sentencia en el bloque de cdigo. Por lo tanto, la sentencia if anterior equivale a:
Console.WriteLine(number2 es mayor que number1);

Aqu la sentencia de salida slo se ejecutar si la expresin booleana en el parntesis es verdadera. Si la expresin es falsa, el control pasa a la siguiente sentencia que sigue de la sentencia if.

Por otro lado, observe este ejemplo:

Console.WriteLine(number2 es mayor que number1);

Console.WriteLine(number2);

Aqu, slo 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 expresin booleana. Para tener una mejor claridad, es mejor encerrar la sentencia que se vaya a ejecutar condicionalmente entre llaves. Las sentencias if tambin se pueden anidar dentro de otras sentencias if, como se muestra en el siguiente ejemplo:

ER ICA
Si

n2 > n1?

No

Salida n2 es > n1

FIN

14

Leccin 1

if (number1 > 5) { Console.WriteLine(number1 es mayor que 5); if (number1 < 20) {

} }

Puesto que las dos condiciones se evalan como verdadero, se generar el siguiente resultado:
number1 es mayor que 5 number1 es menor que 20

La sentencia if-else

ET

CI
{ {

BE
TestIfElse(10); if (n < 10)

La sentencia if-else le permite a su programa llevar a cabo una accin si la expresin booleana se evala como verdadera y una accin diferente si la expresin se evala como falsa. Considere los siguientes pasos para crear un programa que utiliza una sentencia if-else.

Uso de la sentencia if-else

PREPRESE. Para utilizar una sentencia if-else, realice lo siguiente:

1. Agregue un nuevo proyecto de aplicacin de consola (de nombre ifelse_Statement) a la solucin Lesson01.
2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs:

3. Agregue el siguiente mtodo a la clase Program.cs: public static void TestIfElse(int n)

RO

www.pdftron.com
Pero qu sucedera si el valor de number1 fuera 25 en lugar de 10 antes de la ejecucin de la sentencia exterior? En este caso, la primera expresin booleana se evaluara como verdadera pero la segunda se evaluara como falsa y se generara el siguiente resultado:
number1 es mayor que 5

ER ICA

Console.WriteLine(number1 es menor que 20);

Introduccin a la programacin

15

4. Seleccione Depurar, Iniciar sin depurar o presione Ctrl+F5. 6. Presione una tecla para cerrar la ventana.

5. Ver el resultado del programa en la ventana de comandos.

Figura 1-5

BE

CI

Diagrama de ujo equivalente a la sentencia if-else

RO
INICIO n < 10? n < 20? n < 30? FIN

www.pdftron.com
7. Modique el cdigo del mtodo Main para invocar el mtodo TestIfElse con valores diferentes. Observe cmo se ejecuta una bifurcacin de la sentencia if-else como resultado de sus cambios. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

El cdigo en el mtodo 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 evaluarn como falsas pero la tercera condicin (n<30) se evaluar como verdadera. Por lo tanto, el mtodo imprimir el siguiente resultado: n es menor que 30

Este programa en C# equivale al diagrama de fujo en la Figura 1-5.

ET

M
Si No Si No Si No

Salida n >= 30

ER ICA
es mayor que o igual a 30);
Salida n < 10 Salida n < 20 Salida n < 30

Console.WriteLine(n } else if (n < 20) { Console.WriteLine(n } else if (n < 30) { Console.WriteLine(n } else { Console.WriteLine(n }

es menor que 10);

es menor que 20);

es menor que 30);

16

Leccin 1

La sentencia switch
La sentencia switch permite una bifurcacin mltiple. En muchos casos, el uso de una sentencia switch puede simplifcar una combinacin compleja de sentencias if-else. La sentencia switch consiste de la palabra reservada switch, seguida de una expresin en parntesis, seguida de un bloque para el mismo. El bloque del switch puede incluir una o ms sentencias case o una sentencia default. Cuando se ejecuta la sentencia switch, dependiendo del valor de la expresin del switch, se transfere el control a una sentencia case coincidente. Si la expresin no coincide con ninguna sentencia case, el control se transfere a la sentencia default. La expresin del switch debe ir entre parntesis. Considere los siguientes pasos para crear un programa que utiliza una sentencia switch para evaluar expresiones simples.

Tome Nota La expresin que sigue a la sentencia case debe ser una expresin constante y debe ser del mismo tipo de datos de la expresin del switch.

Uso de la sentencia switch

PREPRESE. Para utilizar la sentencia switch, realice lo siguiente:

3. Agregue el siguiente mtodo a la clase Program.cs:

public static void TestSwitch(int op1, int op2, char opr) {

CI
{

ET

BE
int result; switch (opr) case +: result = op1 + op2; break; case -: result = op1 - op2; break; case *:

RO

www.pdftron.com
2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs: TestSwitch(10, 20, +);

1. Agregue un nuevo proyecto de aplicacin de consola (de nombre switch_Statement) a la solucin Lesson01.

ER ICA

Introduccin a la programacin

17

Tome Nota El mtodo 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 mtodo TestSwitch, la cadena de formato {0} se reemplaza con el valor del siguiente argumento, result. }

result = op1 * op2; break; case /: result = op1 / op2; break;

Console.WriteLine(Operador desconocido); return;

Console.WriteLine(Resultado: {0}, result); return; }

ET

CI
{

BE

RO

www.pdftron.com
4. Seleccione Depurar, Iniciar sin depurar, o presione Ctrl+F5. 6. Presione una tecla para cerrar la ventana. 5. Ver el resultado del programa en la ventana de comandos. 7. Modique el cdigo del mtodo Main para llamar al mtodo TestSwitch con valores diferentes. Observe cmo se ejecuta una bifurcacin diferente de la sentencia switch como resultado de sus cambios. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Aqu, el mtodo TestSwitch acepta dos operandos (op1 y op2) y un operador (opr) y evala la expresin resultante. El valor de la expresin 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 bifurcacin opcional default.

Hay una sentencia break despus 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 slo se ejecute una bifurcacin y evita errores de programacin. De hecho, si coloca cdigo despus 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 cdigo en la sentencia case, est bien si el control pasa a la sentencia case subsecuente. El siguiente cdigo demuestra que tan til puede ser esto:
public static void TestSwitchFallThrough()

ER ICA

default:

18

Leccin 1

Tome Nota Puede decidir entre utilizar sentencias ifelse o una sentencia switch dependiendo de la naturaleza de comparacin y legibilidad del cdigo. Por ejemplo, el cdigo del mtodo TestIfElse toma decisiones con base en las condiciones que son ms apropiadas de utilizar con las sentencias if-else. En el mtodo TestSwitch, las decisiones se basan en valores constantes, por lo que el cdigo es mucho ms legible en una sentencia switch.

DateTime dt = DateTime.Today; switch (dt.DayOfWeek) { case DayOfWeek.Monday: case DayOfWeek.Tuesday: case DayOfWeek.Wednesday: case DayOfWeek.Thursday: case DayOfWeek.Friday:

Console.WriteLine(Hoy es un da laboral); break; default:

EN RESUMEN

ET

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 repeticin se pueden utilizar para ejecutar las sentencias dentro el cuerpo del ciclo una cantidad de veces dependiendo de los criterios de terminacin del ciclo. Un ciclo tambin 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 iteracin del ciclo sin salir de este.

CI

Comprender las estructuras de repeticin

BE

Comprende las estructuras de decisin computacionales como las bifurcaciones y la repeticin? -1.2

Aqu si el valor de la expresin dt.DayofWeek es DayOfWeek.Monday, entonces existe una coincidencia con el primer case, pero puesto que no hay cdigo (o una sentencia de transferencia de control, la ejecucin contina a la siguiente sentencia, resultando en la aparicin del mensaje Hoy es un da laboral en la ventana de consola.

RO

www.pdftron.com
break; ; Listo para la certicacin? } }

Console.WriteLine(Hoy es un da de fn de semana);

ER ICA

Introduccin a la programacin

19

Comprender el ciclo while


El ciclo while ejecuta repetidamente un bloque de sentencias hasta que una expresin booleana se evale como falsa. La forma general de un ciclo while es
while (boolean test) sentencia Tome Nota La evaluacin booleana debe colocarse entre parntesis. Si se ejecuta ms de una sentencia como parte del ciclo while, se deben colocar entre llaves.

Puesto que la evaluacin booleana se lleva a cabo antes de la ejecucin del ciclo, es posible que el cuerpo del while nunca se ejecute. Esto pasa si la evaluacin resulta falsa desde la primera vez. Considere los siguientes pasos para crear un programa que utiliza la sentencia while.

ET
}

CI
{

BE
{ i++; }

RO
WhileTest(); int i = 1; while (i <= 5)

www.pdftron.com
Uso de la sentencia while
PREPRESE. Para utilizar la sentencia while, lleve a cabo las siguientes tareas: 1. Agregue un nuevo proyecto de aplicacin de consola (de nombre while_Statement) a la solucin Lesson01. 2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs: 3. Agregue el siguiente mtodo a la clase Program.cs: private static void WhileTest() Console.WriteLine(El valor de i = {0}, i);

ER ICA

Aqu, se lleva a cabo una evaluacin booleana al principio del ciclo. Si es verdadero, se ejecuta el cuerpo del ciclo y se realiza de nuevo la evaluacin. Si la evaluacin resulta en un valor falso, se termina el ciclo y el control se transfere a la siguiente sentencia despus del ciclo.

20

Leccin 1

4. Seleccione Depurar despus Iniciar sin depurar, o presione Ctrl+F5. 5. Ver el resultado del programa en la ventana de lnea de comandos. 6. Presione una tecla para cerrar la ventana. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

El valor de i = 1 El valor de i = 2 El valor de i = 3 El valor de i = 4 El valor de i = 5

Diagrama de ujo equivalente al ciclo while

BE CI

RO

www.pdftron.com
El diagrama de fujo equivalente a este ciclo while se encuentra en la Figura 1-6.
Figura 1-6

ET

M
INICIO i=1 i <= 5?
Si Imprimir i

ER ICA
No

En este ejercicio, a la variable i se le asigna el valor 1. A continuacin, se evala la condicin del ciclo while. Puesto que la condicin es verdadera (1<=5), se ejecuta el cdigo del bloque de sentencias while. El valor de i se escribe en la ventana de lnea de comandos y el valor de i se incrementa en 1, por lo que ahora vale 3. El control pasa entonces de vuelta a la sentencia while y la condicin se evala de nuevo. Puesto que la condicin sigue siendo verdadera (2<=5), el bloque de sentencias se ejecuta de nuevo. El ciclo continua hasta que el valor de i sea 6 y la condicin en el ciclo while sea falsa (6<=5). El mtodo anterior, cuando se ejecuta, genera el siguiente resultado.

i=i+1

FIN

Introduccin a la programacin

21

Tome Nota Para evitar un ciclo innito, debe asegurarse que este se haya diseado de forma tal que lleve a una terminacin.

La sentencia en el ciclo, el cual incrementa el valor de i, juega un papel crtico. Si omite esa sentencia, la conduccin de terminacin nunca se alcanzar y se tendr un ciclo infnito. En la mayora de los casos, para tener un ciclo while bien diseado, debe contar con tres partes: 1. Inicializacin: El inicializador establece el contador del ciclo en un valor inicial correcto.
En el ejemplo anterior, la variable i se establece en 1 antes de que inicie el ciclo.

2. Evaluacin del ciclo: La evaluacin del ciclo especifca la condicin de terminacin para el
ciclo. En el ejemplo anterior, la expresin (i>=5) es la expresin de condicin. ciclo de forma tal que se alcance la condicin de terminacin. En el ejemplo anterior, la expresin i++ es la expresin de terminacin.

Comprender el ciclo do-while

El ciclo do-while ejecuta repetidamente un bloque de sentencias hasta que una expresin booleana especfca se evale como falsa. El ciclo do-while evala la condicin al fnal del ciclo. El ciclo do-while es similar al while, pero a diferencia de este, el cuerpo del ciclo do-while se ejecuta al menos una vez.
Tome Nota La evaluacin booleana se debe colocar entre parntesis. Si se necesita ejecutar ms de una sentencia como parte del ciclo do-while, se deben colocar dentro de llaves.

ET

CI
{

BE
do

RO
DoWhileTest(); int i = 1;

www.pdftron.com
La forma general del ciclo do-while es
do sentencia while (evaluacin booleana);

Considere los siguientes pasos para crear un programa que utilice la sentencia do-while.

Uso de la sentencia do-while

PREPRESE. Para utilizar la sentencia do-while, realice lo siguiente: 1. Agregue un nuevo proyecto de aplicacin de consola (de nombre dowhile_Statement) a la solucin Lesson01.

2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs:

3. Agregue el siguiente mtodo a la clase Program.cs: private static void DoWhileTest()

ER ICA

3. Expresin de terminacin: La expresin de terminacin cambia el valor del contador del

22

Leccin 1

{ Console.WriteLine(El valor de i = {0}, i); i++; } while (i <= 5);

4. Seleccione Depurar posteriormente Iniciar sin depurar, o presione Ctrl+F5. 5. Ver el resultado del programa en la ventana de lnea de comandos. 6. Presione una tecla para cerrar la ventana. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

El ciclo for combina los tres elementos de iteracin: la expresin de inicializacin, la expresin de condicin de terminacin y la expresin de conteo, de forma ms legible.

ET
Tome Nota Las tres expresiones de control se deben colocar entre parntesis. Si se necesita ejecutar ms de una sentencia como parte del ciclo for, se deben colocar dentro de llaves.

CI

BE
sentencia

Comprender los ciclos

El ciclo for es similar al ciclo while; este permite que una o varias sentencias se ejecuten de forma repetida hasta que una expresin se evale como falsa. La forma general del ciclo for es:

for (init-expr; cond-expr; count-expr)

Como puede ver, el ciclo for combina las tres expresiones de control esenciales de la iteracin, lo cual resulta en cdigo ms legible. El ciclo for es particularmente til para crear iteraciones que se deben ejecutar una cantidad especifcada de veces. Considere los siguientes pasos para crear un programa que utilice la sentencia for.

RO

www.pdftron.com
La eleccin entre un ciclo while y uno do-while depende de si se quiere o no que el ciclo se ejecute al menos una vez. Si quiere que el ciclo se ejecute cero o ms veces, elija el ciclo while. Por el contrario, si desea que el ciclo se ejecute una o ms veces, elija el ciclo dowhile.

En este ejercicio, despus de que la variable i se asigna en 1, el control entra directamente en el ciclo. Se ejecuta el cdigo dentro de la sentencia do-while. El valor de i se escribe en la ventana de lnea de comandos y se incrementa en 1 por lo que el valor sube a 2. A continuacin, se evala la condicin del ciclo do-while. Como la condicin aun es verdadera (2<=5), el control regresa a la sentencia do-while y el bloque de sentencias se ejecuta de nuevo. El ciclo continua hasta que el valor de i llega a 6 y la condicin del do-while resulta falsa (6<=5). El mtodo anterior, cuando se ejecuta, genera el mismo resultado que el mtodo WhileTest.

ER ICA

Introduccin a la programacin

23

Uso de la sentencia for


PREPRESE. Para utilizar la sentencia for, realice las siguientes tareas: 1. Agregue un nuevo proyecto de aplicacin de consola (de nombre for_Statement) a la solucin Lesson01. 2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs: ForTest(); 3. Agregue el siguiente mtodo a la clase Program.cs: private static void ForTest() {

for(int i = 1; i<= 5; i++) {

Console.WriteLine(El valor de i = {0}, i);

ET

CI
{ }

Comprender los ciclos foreach


El ciclo foreach es til para la iteracin a travs de los elementos de un conjunto. El ciclo foreach puede concebirse como una versin mejorada del ciclo for para la

BE
for (; ;)

RO
//no hace nada

www.pdftron.com
} 4. Seleccione Depurar y despus Iniciar sin depurar o presione Ctrl+F5. 6. Presione una tecla para cerrar la ventana. 5. Ver el resultado de su programa en la ventana de lnea de comandos. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Cuando se ejecuta el mtodo ForTest, se produce el mismo resultado que con el mtodo WhileTest. Aqu, la variable i se crea dentro del mbito del ciclo for y su valor se asigna en 1. El ciclo contina mientras el valor de i sea menor o igual a 5. Despus del cuerpo del ciclo, se evala count-expr y el control regresa a cond-expr, Todos las expresiones de control de un ciclo for son opcionales. Por ejemplo, se pueden omitir todas las expresiones para crear un ciclo infnito como el siguiente:

ER ICA

24

Leccin 1

iteracin a travs de colecciones como arreglos y listas. La forma general de la sentencia foreach es la siguiente:
foreach (TipoElemento elemento in coleccin) sentencia

Uso de la sentencia foreach

PREPRESE. Para utilizar la sentencia foreach, realice lo siguiente:

1. Agregue un nuevo proyecto de aplicacin de consola (de nombre foreach_Statement) a la solucin Lesson01.

ET

CI
} }

BE
{

4. Seleccione Depurar y despus Iniciar sin depurar o presione Ctrl+F5. 5. Ver el resultado de su programa en la ventana de lnea de comandos. 6. Presione una tecla para cerrar la ventana. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

En este ejercicio, el ciclo itera de forma secuencial a travs de cada elemento de la coleccin y muestra el resultado en la ventana de lnea de comandos. Este mtodo genera el mismo resultado que el mtodo ForTest.

RO

www.pdftron.com
ForEachTest(); 3. Agregue el siguiente mtodo a la clase Program.cs: private static void ForEachTest() int[] numbers = { 1, 2, 3, 4, 5 }; foreach (int i in numbers) Console.WriteLine(El valor de i = {0}, i);

2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs:

ER ICA

Las expresiones de control para la sentencia foreach se deben colocar dentro de parntesis. Si se tiene que ejecutar ms de una sentencia como parte del ciclo foreach, se deben colocar dentro de llaves. Considere los siguientes pasos para crear un programa que muestre la manera en la cual el ciclo foreach proporciona una forma sencilla de realizar iteraciones en una coleccin.

Introduccin a la programacin

25

Comprender la recursividad
La recursividad es una tcnica de programacin que causa que un mtodo se invoque a s mismo para computar un resultado. La recursividad y la iteracin se encuentran relacionadas. Se puede escribir un mtodo que produzca los mismos resultados ya sea utilizando recursividad o iteraciones. Generalmente, la naturaleza del problema en s, le ayudar a seleccionar entre una solucin recursiva o iterativa. Por ejemplo, una solucin recursiva es ms elegante cuando puede defnir la solucin de un problema en trminos de una versin ms compacta para el mismo problema. Para tener una mejor idea, tomemos el ejemplo de la operacin factorial en matemticas. La defnicin recursiva general para el factorial de n (n!) es:

ET

CI
{

BE
{ }

RO
Factorial(5); if (n == 0) return 1;

www.pdftron.com
Considere los siguientes pasos para crear un programa que presente una solucin recursiva para el problema factorial.

Uso del mtodo recursivo

PREPRESE. Para utilizar el mtodo recursivo, realice lo siguiente: 1. Agregue un nuevo proyecto de aplicacin de consola (de nombre RecursiveFactorial) a la solucin Lesson01.

2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs:

3. Agregue el siguiente mtodo a la clase Program.cs: public static int Factorial(int n)

M
//caso base

De acuerdo con esta defnicin, si el nmero es 0, el factorial es uno. Si el nmero es mayor a cero, el factorial es el nmero multiplicado por el factorial del siguiente nmero ms pequeo. Por ejemplo, se puede desglosar 3! de la siguiente manera: 3! = 3 * 2! 3 * 2 * 1! 3 * 2 * 1 * 0! 3 * 2 * 1 * 1 6.

ER ICA

26

Leccin 1

else { return n * Factorial(n - 1); } } 4. Seleccione Depurar, Iniciar sin depurar, o presione Ctrl+F5. 5. Ver el resultado del programa en la ventana de lnea de comandos. Presione una tecla para cerrar la ventana. // caso recursivo

6. Modique el mtodo Main para pasar un valor diferente al mtodo Factorial y observe los resultados. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Como se vio en el ejercicio anterior, una solucin recursiva tiene dos partes principales:

; Listo para la certicacin? Puede identicar apropiadamente los mtodos para el manejo de las repeticiones? 1.3

EN RESUMEN

ET

CI

El .NET Framework soporta el manejo de excepciones para errores en tiempo de ejecucin. En esta seccin aprender a utilizar las excepciones try, catch, y fnally. Una excepcin es una condicin de error que ocurre durante la ejecucin de un programa en C#. Cuando esto sucede, el tiempo de ejecucin crea un objeto para representar el error y lanzarlo. A menos que atrape la excepcin escribiendo el cdigo correcto para manejar excepciones, la ejecucin del programa terminar. Por ejemplo, si intenta dividir un entero entre cero, se lanzar una excepcin DivideByZeroException. En el .NET Framework, una excepcin se representa utilizando un objeto de la clase System.Exception o una de sus clases derivadas. Existen clases de excepcin predefnidas que representan las situaciones de error ms comunes como DivideByZeroException. Si se encuentra diseando una aplicacin que necesite lanzar excepciones especfcas de aplicacin, deber crear clases de excepcin personalizadas que se deriven de la clase System.Exception.

BE

Comprender el manejo de excepciones

RO

www.pdftron.com

El caso base: La parte que especifca la condicin de terminacin que no llama nuevamente al mtodo. El caso base en el mtodo Factorial es n == 0. Si no tiene un caso base en su algoritmo recursivo, se crea una recursin infnita. Una recursin infnita har que su computadora se quede sin memoria y arrojar una excepcin System.StackOverfowException. El caso recursivo: La parte que mueve el algoritmo hacia la clase base. El caso recursivo en el mtodo Factorial es la parte del else, donde se llama nuevamente el mtodo pero con un valor menor para progresar hacia el caso base.

ER ICA

Introduccin a la programacin

27

Manejo de excepciones
Para manejar excepciones, coloque el cdigo que las lance dentro de un bloque try y coloque el cdigo que maneje las excepciones dentro de un bloque catch. El siguiente ejercicio demuestra cmo utilizar un bloque try-catch para manejar una excepcin. Este ejercicio utiliza el mtodo File.OpenText para abrir un archivoarchioe en disco. Esta sentencia se ejecutar bien en un caso normal, pero si no se encuentra el archivo o permiso de lectura del mismo, se lanzar una excepcin.

PREPRESE. Para manejar excepciones, realice lo siguiente:

1. Agregue un nuevo proyecto de aplicacin de consola (de nombre HandlingExceptions) a la solucin Lesson01. 2. Agregue el siguiente cdigo al mtodo Main de la clase Program.cs: ExceptionTest(); 3.

Tome Nota

CI
}

La clase StreamReader es parte del espacio de nombres System. IO. Cuando este cdigo se ejecuta, necesitar agregar una directiva using para el espacio de nombres System.IO.

BE

ET

RO
{ } { } { }

www.pdftron.com
{ StreamReader sr = null; try sr = File.OpenText(@c:\data.txt); Console.WriteLine(sr.ReadToEnd()); catch (FileNotFoundException fnfe) Console.WriteLine(fnfe.Message); catch (Exception ex) Console.WriteLine(ex.Message); 4. Cree un archivo (data.txt) utilizando el Bloc de notas o Visual Studio en la unidad c:. Se puede crear el archivo en otra ubicacin pero si lo hace, recuerde modicar la ubicacin del archivo en el programa. Escriba algo de texto en el archivo. 5. Seleccione Depurar y despus Iniciar sin depurar o presione Ctrl+F5. 6. Ver que el contenido del archivo de texto aparece en la ventana de lnea de comandos.

Agregue el siguiente mtodo a la clase Program.cs:

private static void ExceptionTest()

ER ICA

Manejo de excepciones

28

Leccin 1

Tome Nota En el mtodo ExceptionTest, es incorrecto cambiar el orden de los dos bloques catch. Las excepciones ms especcas necesitan enlistarse antes de las excepciones genricas, de lo contrario ocurrirn errores de compilacin.

Presione una tecla para cerrar la ventana. 7. Elimine el archivo data.txt y ejecute nuevamente el programa. Esta vez aparecer una excepcin a FileNotFoundException y aparecer un mensaje en la ventana. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Tome Nota Un bloque try debe tener al menos un bloque catch o un bloque nally asociado.

La ejecucin del cdigo se detiene cuando ocurre una excepcin. El tiempo de ejecucin busca una sentencia catch que corresponda al tipo de excepcin. Si el primer bloque catch no atrapa la excepcin arrojada, el control se mueve al siguiente bloque catch y as sucesivamente. Si la excepcin no se maneja en el mtodo, el tiempo de ejecucin revisa la sentencia catch en el cdigo y contina para el resto de la pila de llamadas.

ET

CI
3. { try {

BE

Cuando ocurre una excepcin, con frecuencia signifca que algunas lneas de cdigo no se ejecutaron luego de que ocurri la excepcin, lo cual puede dejar su programa en un estado inestable. Puede utilizar la sentencia fnally para garantizar que se ejecute cdigo de limpieza. Esto puede involucrar el cerrar conexiones, liberar recursos o establecer variables a sus valores esperados. Observemos el cdigo del siguiente ejercicio.

Uso de try-catch-nally

PREPRESE. Para utilizar la sentencia try-catch-nally, realice lo siguiente:

1. Agregue un nuevo proyecto de aplicacin de consola (de nombre trycatchnally) a la solucin Lesson01.

2. Agregue el siguiente cdigo al mtodo Main a la clase Program.cs: TryCatchFinallyTest(); Agregue el siguiente mtodo a la clase Program.cs: private static void TryCatchFinallyTest() StreamReader sr = null;

RO

www.pdftron.com
El bloque fnally se utiliza con el bloque try. El bloque fnally siempre se ejecuta sin importar si ocurre o no la excepcin. El bloque fnally se utiliza con frecuencia para escribir cdigo de limpieza.

Uso de try-catch-nally

sr = File.OpenText(@c:\data.txt);

ER ICA

Para manejar la excepcin, se colocan la sentencias que pueden causar la excepcin en un bloque try. Luego se agregan los bloques catch para manejar una o ms excepciones. En este ejemplo, adems de manejar la excepcin FileNotFoundException, tambin utilizamos un bloque catch con ms excepciones genricas para obtener todas las otras excepciones. El nombre de la excepcin para un bloque catch debe ir entre parntesis. Las sentencias que se ejecutan cuando se obtiene una excepcin deben ir entre llaves.

Introduccin a la programacin

29

Console.WriteLine(sr.ReadToEnd()); } catch (FileNotFoundException fnfe) { Console.WriteLine(fnfe.Message); } catch (Exception ex) Console.WriteLine(ex.Message); } fnally { { } {

if (sr != null) sr.Close();

ET

CI
Comprende cmo manejar errores en sus programas? -1.4

; Listo para la certicacin?

BE

RO

www.pdftron.com
} } 4. Cree un archivo de texto (data.txt) utilizando el Bloc de notas o Visual Studio en la unidad c:. Se puede crear el archivo en otra ubicacin pero recuerde modicar la ubicacin del archivo en el programa. Escriba texto en el archivo. 5. Seleccione Depurar, Iniciar sin depurar o presione Ctrl+F5. 6. Ver que el contenido del archivo de texto aparece en la ventana de lnea de comandos. Presione una tecla para cerrar la ventana. 7. Elimine el archivo data.txt le y ejecute nuevamente el programa. Esta vez obtendr un FileNotFoundException y aparecer un mensaje en la ventana.

En este ejercicio, el programa se asegura que el objeto StreamReader se cierre y que se liberen los recursos cuando se complete la operacin. El cdigo en el bloque fnally se ejecuta sin importar si aparece una excepcin o no.

ER ICA

30

Leccin 1

Matriz de resumen de habilidades


En esta leccin aprendi:

ET

CI

BE

RO

www.pdftron.com

Un algoritmo es un conjunto de pasos ordenado y fnito para solucionar un problema dado. Puede encontrar de utilidad expresar un algoritmo a travs de un diagrama de fujo o de una tabla de decisin antes de desarrollar un programa de manera formal. El lenguaje de programacin C# es parte del .NET Framework y se benefcia tanto del soporte de tiempo de ejecucin y las libreras de clase incluidas en .NET Framework. Main es un mtodo especial que tambin sirve como punto de entrada al programa. Cuando el tiempo de ejecucin corre un programa, siempre inicia en el mtodo Main. Las variables en C# son marcadores de posicin utilizadas para almacenar valores. Una variable tiene un nombre y un tipo de datos. El tipo de datos de la variable determina el valor que esta puede contener y el tipo de operaciones en las cuales se puede utilizar. El tipo de datos determina el tamao de memoria necesario para almacenar los datos el tipo de operaciones que se pueden llevar a cabo con la informacin. Los operadores son smbolos como +, -, *, /, que especifcan cual operacin llevar a cabo con los operandos y regresar un resultado. Las sentencias if-else le permiten a su programa llevar a cabo una accin si la expresin booleana se evala como verdadera o una accin diferente si la expresin resulta ser falsa. La sentencia switch le permite contar con varias ramifcaciones. En la mayora de los casos, una sentencia switch puede simplifcar una combinacin compleja de sentencias if-else. C# tiene cuatro estructuras de control diferentes que le permite a sus programas llevar a cabo tareas repetitivas: el ciclo while, el do-while, el for y el foreach. El while y el do-while ejecutan de forma repetida un bloque de sentencias hasta que una expresin booleana especfca se evale como falsa. El ciclo do-while evala la condicin al fnal del ciclo. El ciclo for combina los tres elementos de iteracin: la sentencia de inicializacin, la condicin de terminacin y la sentencia de incremento/decremento en un cdigo ms legible. El ciclo foreach es til para iterar los elementos de una coleccin. La recursin es una tcnica de programacin que hace que un mtodo se llame a s mismo para computar un resultado. El .NET Framework soporta el manejo de excepciones estndar y maneja errores en tiempo de ejecucin. Para manejar las excepciones, se coloca cdigo que arroja excepciones dentro de un bloque try y se coloca cdigo que maneja las excepciones en un bloque catch. El bloque fnally se utiliza con el bloque try. El bloque fnally siempre se ejecuta sin importar si se arroja o no una excepcin. El bloque fnally se utiliza con frecuencia para escribir cdigo de limpieza.

ER ICA

Comprender los conceptos bsicos de bases de datos

31

Evaluacin de conocimiento
Complete los espacios en blanco Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios en blanco proporcionados. 1. La sentencia ______ selecciona la ejecucin de una lista de sentencias teniendo una etiqueta asociada que corresponda al valor de una expresin.

3. El nico operador que toma tres argumentos es el operador ______.

4. El ciclo ______ representa la forma ms compacta para iterar los elementos de una coleccin. 5. En una computadora de 32-bit, una variable del tipo de datos int ocupa ______ bytes de memoria. 6. Par acceder al primer elemento de un arreglo, se utilice un ndice de _____.

CI
a. b. c. d.
{

ET

BE
25 26 27 28

RO
Opcin mltiple
int n = 20; int d = n++ + 5; int i = 1;

www.pdftron.com
8. Las ______ son los campos de datos o variables locales cuyos valores no se modifcan. 9. Cuando un algoritmo involucra grandes cantidades de condiciones, una ______ es un formato compacto y ms legible para presentar el algoritmo. 10. Un ______ es una representacin grfca de un algoritmo. Encierre la letra que corresponda a la respuesta correcta. 1. Si escribe el siguiente cdigo: 2. Cul ser el valor de d despus de ejecutar el cdigo? 3. Si escribe el siguiente cdigo:
private static void WhileTest()

7. La ______ es una tcnica de programacin que causa que un mtodo se llame a s mismo para poder computar un resultado.

ER ICA

2. El ciclo ______ evala la condicin al fnal en lugar de hacerlo al principio del ciclo.

32

Leccin 1

while (i < 5) { Console.WriteLine(El valor de i = {0}, i); i++; } }

4. Cuntas veces se ejecutar el ciclo while en este cdigo? a. b. c. d. 0 1 4 5

5. Si escribe el siguiente cdigo:


int number1 = 10; int number2 = 20;

6. Cul resultado aparecer despus de ejecutar este cdigo? a. b. c. d. number1 number2 number1 number2 number2 number1

ET

CI
a. b. c. d. a. b. c. d.

BE
break continue default return

7. En una sentencia switch, si ninguno de las sentencias case coincide con la expresin del switch, a cul sentencia se transfere el control?

8. Necesita escribir cdigo que cierre una conexin a una base de datos. Necesita asegurarse que este cdigo se ejecute siempre sin importar si ocurre o no una excepcin. Dnde debera escribir este cdigo? Dentro de un bloque try Dentro de un bloque catch Dentro de un bloque fnally Dentro de un mtodo Main

9. Necesita almacenar valores con un rango de 0 a 255. Necesita tambin asegurarse que el programa minimice el uso de memoria. Cul tipo de datos debera utilizar

RO

www.pdftron.com
if (number2 > number1) Console.WriteLine(number1); Console.WriteLine(number2);

ER ICA

Comprender los conceptos bsicos de bases de datos

33

para almacenar estos valores? a. b. c. d. Byte Char Short Int

10. Si no tiene una clase base en su algoritmo recursivo, crea una recursin infnita. Una recursin infnita causar que su programa arroje una excepcin. Cul excepcin ser esta?

11. Se encuentra aprendiendo cmo desarrollar algoritmos repetitivos en C#: Escribe el siguiente mtodo:
private static void ForTest() {

CI
a. b. c. d.

ET

BE

RO
}

www.pdftron.com
{ Console.WriteLine(El valor de i = {0}, i); }

12. Cuntas repeticiones llevar cabo este ciclo for? a. b. c. d. 0 4 5 infnito

13. Cul de las siguientes caractersticas de C# utilizara para organizar el cdigo y crear tipos globalmente nicos? Assemblies Espacio de nombres Clase Tipo de datos

14. Al escribir el siguiente cdigo:


int[] numbers = {1, 2, 3, 4}; int val = numbers[1];

15. Tambin crea una variable del tipo RectangleHandler como se muestra a continuacin:
RectangleHandler handler;

for(int i = 1; i < 5;)

ER ICA

a. b. c. d.

OutOfMemoryException StackOverfowException DivideByZeroException InvalidOperationException

34

Leccin 1

16. a. b. c. d. 1 2 3 4

Cul es el valor de la variable val despus de ejecutar el cdigo?

Evaluacin de destreza

Se encuentra desarrollando una aplicacin de facturacin que calcula los porcentajes de descuento con base en la cantidad de productos adquiridos. La lgica para calcular descuentos se encuentra en la siguiente tabla de decisin. Necesita escribir un mtodo en C# que utilice la misma lgica para calcular el descuento. Cmo escribira su programa?
Cantidad < 10 Cantidad < 50 Cantidad < 100 Descuento S S S 5% N N N

M
10%
INICIO
Ingresar n

BE CI

RO

www.pdftron.com
Escenario 1-2: Convierta un diagrama de ujo en un programa de C# Se encuentra desarrollando una librera de funciones matemticas. Antes desarroll el siguiente diagrama de fujo para describir el algoritmo para calcular el factorial de un nmero. Necesita escribir un equivalente en C# para este diagrama de fujo. Cmo escribira el programa?
fact = 1 n > 1?
Si fact = fact * n No n=n-1 Salida de fact

ET

ER ICA
S N N S S N 15% 20%
FIN

Escenario 1-1: Convierta una tabla de decisin en un Programa de C#

Comprender los conceptos bsicos de bases de datos

35

Evaluacin de aptitud
Proyecto 1-3: Maneje excepciones Se encuentra escribiendo cdigo para una librera aritmtica simple. Decide crear un mtodo de nombre Divide que toma dos argumentos, x y y, y regresa el valor de x/y. Necesita obtener cualquier excepcin aritmtica que pueda resultar de los errores en aritmtica, casting o conversiones de tipos de datos. Tambin necesita obtener cualquier otra excepcin que pueda resultar del cdigo. Necesita crear el cdigo para manejar excepciones estructurndolo de forma correcta para cubrir este requerimiento. Cmo escribira un programa con estas caractersticas? Proyecto 1-4: Cree un algoritmo recursivo

Se encuentra desarrollando una librera de funciones de utilidad para su aplicacin. Necesita escribir un mtodo que tome un entero y cuente la cantidad de dgitos signifcativos en el mismo. Necesita crear un programa recursivo para solucionar este problema. Cmo escribira un programa con estas caractersticas?

ET

CI

BE

RO

www.pdftron.com

ER ICA

36

Leccin 1

ET

CI

BE

RO

www.pdftron.com

ER ICA

Leccin 2

Introduccin a la programacin orientada a objetos


Matriz de dominio de objetivos
Habilidad tecnolgica Comprender los objetos Comprender los valores y las referencias Comprender el encapsulamiento Comprender la herencia Comprender el polimorsmo Comprender las interfaces Descripcin de dominio de objetivo Comprender los principios bsicos de las clases Nmero del dominio del objetivo 2.1 1.1

Comprender el almacenamiento y los tipos de datos Comprender el encapsulamiento Comprender la herencia Comprender el polimorsmo Comprender las interfaces

ET

CI

BE
Como desarrollador de software para la corporacin Northwind, forma parte de un equipo de desarrollo de programas de computadora que resuelven problemas de la empresa. Cualquier programa que escriba debe ser fcil de entender y mantener por un largo periodo de tiempo. Necesita desarrollar programas utilizando tcnicas que impulsen el reciclado de cdigo, la extensibilidad y la colaboracin. En lugar de pensar en un programa como una lista de mtodos, incorpore en sus programas conceptos de negocios del mundo real como clientes, productos, proveedores y las interacciones entre los mismos.

RO

www.pdftron.com
Trminos clave
Accessors Clase abstracta Constructor Delegado Encapsulamiento Evento Herencia Interfaz Espacio de nombres Polimorfsmo Propiedad Tipo de referencia Tipo de valor

ER ICA
2.4 2.2 2.3 2.4

38

Leccin 2

Comprender objetos
EN RESUMEN

La programacin orientada a objetos es una tcnica de programacin que utiliza objetos. Los objetos son estructuras de datos auto contenidas que consisten de propiedades, mtodos y eventos. Las propiedades especifcan los datos representados por el objeto, los mtodos especifcan el comportamiento de un objeto y los eventos proporcionan la comunicacin entre los objetos.

Un objeto de software es conceptualmente similar a un objeto en el mundo real.

Comprender las clases

Una clase es una plantilla de la cual se crean los objetos individuales.

ET

CI

BE
Crear una clase

Los objetos en el mundo real necesitan de una plantilla que defna la forma en la que se construirn. Todos los objetos que se crean a partir de la misma plantilla se ven y comportan de forma similar. Por ejemplo, piense en un modelo especfco de un coche. En el mundo del software, una clase es la plantilla de la cual se crean objetos individuales. A un objeto se le conoce tambin como instancia de una clase.

PREPRESE. Antes de realizar estos pasos, asegrese de abrir Microsoft Visual Studio y abrir un nuevo proyecto de aplicacin de consola de nombre Lesson02. 1. Agregue una nueva clase de Visual C# de nombre Rectangle al proyecto.

RO

www.pdftron.com
Un objeto de software es conceptualmente similar a uno del mundo real. Un objeto almacena su estado en campos y expone su comportamiento a travs de mtodos. Cuando se invoca un mtodo en el objeto, obtendr una funcionalidad bien defnida sin la necesidad de preocuparse sobre la complejidad interna del objeto o del mtodo en s. Este concepto de ocultar complejidad se conoce como encapsulamiento y es una de las muchas caractersticas de la programacin orientada a objetos que aprender en esta leccin.

Una buena manera de empezar a pensar de forma orientada a objetos es observando el mundo real por ejemplo, un coche, un telfono, un reproductor de msica, etc. Notar que todos tienen un estado y un comportamiento. Por ejemplo, los coches tienen un estado (nombre del modelo, color, velocidad, cantidad de gasolina) y un comportamiento (acelerar, frenar, cambiar velocidades). Tambin notar que algunos objetos son ms simples y otros ms complejos. Algunos objetos complejos como los coches estn hechos de objetos ms pequeos que a su vez tienen su propio estado y comportamiento. Tambin se dar cuenta que aunque un coche es un objeto complejo, slo necesita saber algunas cuantas cosas para poder interactuar con uno. Cuando conduce un auto, simplemente invoca un comportamiento como acelerar o frenar y desconoce muchos miles de detalles internos sobre su funcionamiento.

ER ICA

Pensar de forma orientada a objetos

Introduccin a la programacin orientada a objetos

39

2. Reemplace el cdigo de la clase Rectangle con el siguiente: class Rectangle { private double length; private double width; public Rectangle(double l, double w) { length = l; width = w; }

public double GetArea() { } }

return length * width;

ET

CI
Cada clase es una denicin de un nuevo tipo de datos. Por lo tanto, una denicin de una clase se le relaciona con un tipo.

Tome Nota

Comprender los mtodos


Un mtodo es un bloque de cdigo contiene una serie de sentencias. Un mtodo defne las acciones y operaciones soportadas por una clase. Un mtodo se defne al especifcar el nivel de acceso, el tipo de retorno, el tipo de mtodo y una lista opcional de parmetros en parntesis seguido de un bloque de cdigo dentro de llaves. La clase Rectangle defne un solo mtodo de nombre GetArea. Para GetArea, el nivel de acceso

BE

RO

www.pdftron.com
Genere el proyecto y asegrese de que no tenga errores.
PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Acaba de crear una nueva clase de C de nombre Rectangle. Para defnir una nueva clase se utiliza la palabra reservada class. La clase Rectangle tiene dos campos de datos, length y width. Estos campos se defnen utilizando el modicador de acceso private. Un modifcador de acceso especifca a cual regin de cdigo tendr acceso el campo. Por ejemplo, un modifcador de acceso public no limita el acceso pero el modifcador de acceso private limita el acceso dentro de la clase en la cual se defna el campo. La clase tambin defne un mtodo de nombre GetArea.

ER ICA

40

Leccin 2

es pblico, el tipo de retorno es double, el nombre del mtodo es GetArea, la lista de parmetros est vaca y el bloque de cdigo es una sentencia return sencilla. Un mtodo puede regresar un valor al cdigo invocador. Si un mtodo no regresa ningn valor, su tipo de retorno se especifca con la palabra reservada void. El mtodo debe utilizar una sentencia return para poder regresar un valor. La sentencia return fnaliza la ejecucin de un mtodo y regresa el valor especfco al cdigo invocador. El tipo de dato del valor retornado de un mtodo debe coincidir con el tipo de retorno especifcado en la lnea de declaracin de un mtodo. El tipo de retorno del mtodo GetArea es double, lo que signifca que el mtodo GetArea debe retornar un valor del tipo doble. El mtodo GetArea satisface este requerimiento al retornar la expresin length * width, el cual es un valor double. El siguiente cdigo defne un mtodo InitFields que toma dos parmetros de tipo doble y regresa un void:
public void InitFields(double l, double w) Tome Nota El nombre del mtodo, su lista de parmetros y el orden de los tipos de datos de los parmetros se reconocen en conjunto como la rma del mtodo. Una rma de mtodo debe ser nica en la clase. { length = l; width = w; }

Los constructores se utilizan para inicializar los miembros de datos del objeto. Los constructores son mtodos de clase especiales que se ejecutan cuando se crea una nueva instancia de la clase. Los constructores se utilizan para inicializar los miembros de datos del objeto. Los constructores deben tener exactamente el mismo nombre de la clase y no tienen un tipo de retorno. Se pueden defnir constructores mltiples, cada uno con una frma nica, para una clase.

ET

CI

BE

Comprender los constructores

Un constructor que no toma argumentos se conoce como el constructor default. Si se defne una clase sin ningn constructor, se genera automticamente un constructor default invisible que no hace nada. Con frecuencia es til tener constructores adicionales para contar con ms formas con la cuales inicializar un objeto. La clase Rectangle, defnida con anterioridad, es slo una forma de crear e inicializar su objeto: llamando al constructor que acepta dos parmetros, ambos del tipo de datos default.

RO

www.pdftron.com
El mtodo InitFields toma dos parmetros y utiliza los valores de los mismos para asignar de forma respectiva lo campos de datos length y width. Cuando el tipo de retorno de un mtodo es void, se puede utilizar una sentencia return sin valor. Si no se utiliza una sentencia return, como en el mtodo InitFields, el mtodo dejar de ejecutarse cuando llegue al fnal del bloque de cdigo. El mtodo InitFields se puede utilizar para inicializar de forma apropiada el valor de los campos de datos, pero como lo aprender en la siguiente seccin, los constructores de hecho le dan una forma de inicializar una clase.

ER ICA

Introduccin a la programacin orientada a objetos

41

Crear objetos
Los objetos se crean a partir de plantillas defnidas por clases.

Crear un objeto
UTILICE el proyecto de consola de aplicacin, Lesson02, que cre en el ejercicio anterior.

1. Modique el cdigo de la clase Program de la siguiente forma:


{ {

static void Main(string[] args)

Rectangle rect = new Rectangle(10.0, 20.0); double area = rect.GetArea(); area);

Console.WriteLine(rea del Rectngulo: {0}, }

Tome Nota

ET

CI

Las clases y los objetos son diferentes. Una clase dene la plantilla de un objeto pero no al objeto en s. Por otro lado, un objeto es una instancia concreta de una clase pero no la clase en s.

Comprender las propiedades


Las propiedades le permiten accede a los datos de una clase de una forma segura y fexible. Las propiedades son miembros de la clase que se pueden acceder como los campos de

BE

RO

www.pdftron.com
} 2. Seleccione Depurar y despus Iniciar sin depurar. Aparecer una ventana de consola mostrando el rea del rectngulo. 3. GUARDE su proyecto. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

La clase Rectangle cuenta con solo una forma de construir una instancia de la clase: invocando un constructor con dos argumentos del tipo de datos double. Se crea un objeto utilizando la palabra reservada new seguida de la invocacin al constructor de clase apropiado. Cuando se ejecuta el cdigo, un objeto de tipo Rectangle se crea en la memoria heap. Una referencia a esta memoria se almacena dentro de la variable rect. La variable rect se almacena en la pila. Posteriormente, en este bloque de cdigo, puede utilizar rect para hacer referencia y manipular el objeto que se acaba de crear.

Utilizando la referencia del objeto, puede acceder a los miembros de la clase. Por ejemplo, el cdigo llama al mtodo GetArea en el objeto y el valor retornado por el mtodo se almacena en la variable rea. Los campos de datos, length y width, del objeto rect no estn accesibles aqu debido a que estn marcados como private en la defnicin de la clase.

ER ICA

class Program

42

Leccin 2

Tome Nota A las propiedades, generalmente se les conoce como campos inteligentes ya que pueden contener cdigo para la vericacin de consistencia o validez de datos.

datos pero que puede contener cdigo como un mtodo. Las propiedades se utilizan con frecuencia para exponer los campos de datos de una clase de una forma ms controlada. Por ejemplo, un campo privado se puede exponer utilizando una propiedad pblica, pero no es necesario utilizar las propiedades de esta manera. Una propiedad tiene dos accessors, get y set. El accessor get se utiliza para retornar el valor de la propiedad y el accessor set se utiliza para asignar un nuevo valor a la propiedad. A una propiedad frecuentemente se le defne como public y siempre tiene un nombre que comienza con una letra mayscula. Por el contrario. Al asignar nombres a los campos de datos privados se utiliza siempre al principio una letra minscula.

Crear propiedades

UTILICE el proyecto que guard en el ejercicio anterior.

1. Modique el cdigo de la clase Rectangle como se muestra a continuacin. En este cdigo, el constructor se elimina y se insertan dos propiedades: class Rectangle { private double width; public double Length { get { } {

private double length;

ET

CI
} {

BE
set } get { } set

RO
return length; public double Width return width;

www.pdftron.com
if ( value > 0.0) length = value;

ER ICA

Introduccin a la programacin orientada a objetos

43

{ if (value > 0.0 ) width = value; } }

public double GetArea() { } } class Program { { return length * width;

2. Modique el cdigo de la clase Program como se muestra a continuacin:

static void Main(string[] args)

ET

CI
Tome Nota El patrn de programacin general es que todos los campos de datos de una clase deben declararse como private y que el acceso a estos campos privados debe ser va propiedades pblicas y revisar los valores de datos para su validacin.

BE

RO
} } 4. GUARDE su proyecto.

www.pdftron.com
rect.Width = 20.0; Console.WriteLine( double area = rect.GetArea(); rea del rectngulo: {0}, area); 3. Seleccione Depurar, Iniciar sin depurar. Aparecer una ventana de consola mostrando el rea del rectngulo. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

En este ejercicio, modifc la clase Rectangle para ingresar dos propiedades, Length y Width. Las propiedades generalmente se defnen con un modifcador de acceso pblico. En el cdigo para la propiedad Length, el accessor get simplemente retorna el valor del campo de datos length. Sin embargo, el accessor set revisa el valor signado (utilizando la palabra reservada value) a la propiedad y modifca el campo de datos length slo si el valor es positivo. Los campos privados length y width tambin se conocen como campos de respaldo por las propiedades que los exponen. Adems, la clase Rectangle no declara ningn contructor explcito. En este caso, los usuarios de la clase (el mtodo Main) necesita utilizar el constructor predefnido y confar en las propiedades para inicializar los datos de la clase. El mtodo Main utiliza las propiedades Length y Width para establecer los datos para el objeto rect. Se ignorar si se trata de establecer Length o Width como un valor negativo y en ese caso los campos de datos seguirn conservando su valor original de 60.

M
rect.Length = 10.0;

Rectangle rect = new Rectangle();

ER ICA

44

Leccin 2

Cuando se defnen propiedades se pueden excluir cualquiera de los accessors get o set. Si no incluye el accessor set, no proporciona una forma de establecer el valor de la propiedad y por lo tanto tendr una propiedad de slo lectura. Por otro lado, si no incluye el accessor get, no se proporciona una forma de obtener el valor de la propiedad y por lo tanto tendr una propiedad de slo escritura.

Comprender las propiedades auto-implementadas


Las propiedades auto-implementadas simplifcan las declaraciones de las propiedades. C# introdujo las propiedades auto-implementadas con la versin 3 para simplifcar la declaracin de propiedades donde no hay lgica adicional especifcada en los accessors get y set. Por ejemplo, sin la revisin de validacin, las propiedades Length y Width se defnen de la siguiente manera:
private double length; private double width; public double Length { get { } { }

CI
}

ET

BE
} { get { } set { }

Con las propiedades auto-implementadas de C#, la sintaxis simplifcada para la declaracin de la propiedad inicia de la siguiente forma:

RO
public double Width return width; width = value;

www.pdftron.com
return length; set length = value;

ER ICA

Introduccin a la programacin orientada a objetos

45

public double Length { get; set; } public double Width { get; set; }

En este caso, los campos de respaldo para las propiedades se defnen tras bambalinas y no son accesibles de forma directa por el cdigo. Las propiedades auto-implementadas utilizadas con los constructores predefnidos tambin simplifcan la creacin e inicializacin de los objetos. Por ejemplo, ahora se puede crear e inicializar un objeto de la siguiente manera:
{

Rectangle rect = new Rectangle Console.WriteLine(

{ Length = 10.0, Width = 20.0 };

Area of Rectangle: {0}, rect.GetArea());

Uso de la palabra reservada this

CI
}

ET

BE
{ } { }

RO
class Rectangle { length = l; width = w; class Rectangle

www.pdftron.com
La palabra reservada this es una referencia a la instancia actual de la clase. Se puede utilizar la palabra this para referirse a cualquier miembro del objeto actual. Por ejemplo, anteriormente en este captulo, la clase Rectangle se escribi como se indica a continuacin:
private double length; private double width; public Rectangle(double l, double w) public double GetArea() return length * width;

Pero se pudo haber escrito de la siguiente manera:

La palabra reservada this se puede utilizar para acceder a miembros desde dentro de los constructores, mtodos de instancia y accessors de propiedades de instancia.

ER ICA

static void Main(string[] args)

46

Leccin 2

{ private double length; private double width; public Rectangle(double l, double w) { this.length = l; } this.width = w;

public double GetArea() { } Tome Nota En C#, los caracteres // se utilizan para agregar comentarios en una sola lnea en el cdigo. El texto despus de los caracteres // se ignora por el compilador. Los comentarios en varias lneas comienzan con los caracteres/* y terminan con */. }

return this.length * this.width;

Comprender los delegados

Los delegados son tipos especiales que se utilizan para encapsular un mtodo dentro de una frma especfca. Los delegados son objetos especiales que pueden contener une referencia a un mtodo con una frma especfca. Un delegado se defne utilizando la palabra reservada delegate. Se puede defnir un delegado como se indica a continuacin:
public delegate void RectangleHandler(Rectangle rect);

ET

CI

BE

Dentro del mbito de la defnicin del constructor Rectangle, los nombres length y width ahora se referirn al parmetro que se est pasando. El nombre de los campos de datos se ha opacado y slo se pueden acceder utilizando la palabra this.

Le defnicin delegate especifca la frma del mtodo cuya referencia se pueda contener por un objeto delegate. Por ejemplo, en el cdigo anterior se defne un delegado RectangleHandler que puede contener referencias a un mtodo que regresa un void y acepta un solo parmetro del tipo Rectangle.

RO

www.pdftron.com
public Rectangle(double length, double width) { // los nombres de parmetro length y width // opacan los miembros de clase length y // width en este mbito this.length = length; this.width = width; }

Como puede ver, la palabra this se utiliz dentro del constructor y del mtodo GetArea para referirlo a los campos de datos del objeto actual de la clase Rectangle. Aun cuando no era necesario utilizar la palabra this en este caso, utilizarla proporciona mayor fexibilidad al nombrar los parmetros del mtodo. Por ejemplo, podra defnir el constructor como se muestra a continuacin:

ER ICA

Introduccin a la programacin orientada a objetos

47

Por lo tanto, si tiene un mtodo con una frma similar, resulta un candidato ideal para la asignacin a una instancia delegate. Por ejemplo:
public void DisplayArea(Rectangle rect) { } Console.WriteLine(rect.GetArea());

El tipo delegate se puede utilizar para declarar una variable que se puede referir a cualquier mtodo con la misma frma que el delegado. Por ejemplo, puede decir:
RectangleHandler handler;

Y puede asignar el mtodo al delegado utilizando la siguiente sintaxis:


handler += new Rectanglehandler(DisplayArea);

Como alternativa, puede utilizar la siguiente sintaxis:


handler += DisplayArea;m

ET

CI

Comprender los eventos

Los eventos son una forma por la cual una clase notifca a otras clases u objetos que sucedi algo de inters. La clase que enva la notifcacin se conoce como editor. La clase que recibe la notifcacin se conoce como suscriptor del evento. Los eventos son fciles de comprender en el contexto de una interfaz grfca de usuario (GUI). Por ejemplo, cuando un usuario da clic en un botn, ocurre un evento Click. Los elementos en una interfaz de usuarios mltiples se pueden suscribir a este evento y cambiar su estado visual (por ejemplo, algunos controles se habilitan o deshabilitan). En este tipo de comunicacin de eventos, los editores de eventos no necesitan saber cules objetos se suscriben a los eventos que se estn llevando a cabo. Los eventos no se limitan a la programacin en GUI. De hecho, los eventos tienen un papel importante en las libreras de clase del .NET Framework para que los objetos hagan notar cualquier cambio en sus estados. Trabajar con eventos en prcticamente todos los programas.

BE

RO

www.pdftron.com
Finalmente, se puede llamar a un delegado se puede realizar a travs de una sintaxis de invocacin de mtodos como la siguiente:
Rectangle rect = new Rectangle (10, 20); handler(rect);

Cuando se llama un delegado de esta forma, se invocan todos los mtodos en esta lista de invocacin. En este ejemplo, el objeto handler se refere slo a un mtodo DisplayArea por lo que el mtodo DisplayArea se invocar con el objeto rect como un parmetro.

Entre otras muchas aplicaciones, los delegados forman la base para las declaraciones de eventos, como se comentar en la siguiente seccin.

Note que la sintaxis utiliza la operacin de adicin. Esto signifca que puede asociar ms de un mtodo (de frma compatible), creando una lista de invocacin de uno o ms mtodos.

ER ICA

48

Leccin 2

Al defnir los eventos, generalmente necesita dos tipos de informacin:

Un delegado que conecta al evento con su controlador(es) de evento(s). Una clase que contiene los datos del evento. Esta clase generalmente se deriva de la clase EventArgs.

Para defnir un evento, puede utilizar un delegado personalizado. Sin embargo, en la mayora de los casos si el evento no contiene informacin especfca del mismo, no ser sufciente con utilizar el delegado predefnido EventHandler. El delegado EventHanler se defne de la siguiente manera:

Aqu, el parmetro sender es una referencia al objeto que provoca el evento y el parmetro es una referencia a un objeto de datos del evento que no contiene datos del mismo.

La clase EventArgs se utiliza por los eventos que no pasan ninguna informacin relacionada con los mismos a un controlador de eventos cuando se ocasiona un evento. Si el controlador de eventos requiere de informacin relacionada a los mismos, la aplicacin debe derivar una clase desde la clase EventArgs para recibir los datos relacionados con los eventos.

Tome Nota

CI
} }

El campo EventArgs. Empty representa un evento sin datos. El campo equivale a tener una instancia de slo lectura de la clase EventArgs.

ET

BE
{ get { } set { } class Program

2. Modique el cdigo de la clase Program con lo siguiente:

RO
private double length; public double Length return length;

www.pdftron.com
UTILICE el proyecto que guard en el ejercicio anterior. class Rectangle { 1. Modique el cdigo de la clase Rectangle de la siguiente forma: public event EventHandler Changed; length = value; Changed(this, EventArgs.Empty);

Publicar y suscribirse a eventos

ER ICA

public delegate void EventHandler(Object sender, EventArgs e);

Introduccin a la programacin orientada a objetos

49

static void Main(string[] args) { Rectangle r = new Rectangle(); r.Length = 10; } static void r_Changed(object sender, EventArgs e) Rectangle r = (Rectangle)sender; Console.WriteLine( {

r.Changed += new EventHandler(r_Changed);

Tome Nota El cdigo en el mtodo r_Changed utiliza un operador cast para convertir un tipo de datos de objeto en el tipo de datos Rectangle. El casting se explicar ms adelante en esta leccin en la seccin Casting entre tipos. } }

Value Changed: Length = {0}, r.Length);

ET

CI

BE

RO

www.pdftron.com
4. GUARDE su proyecto. PAUSA. Deje su proyecto abierto para utilizarlo en el siguiente ejercicio.

Aqu la clase Rectangle defne un evento Changed que se invoca cuando la propiedad Length del objeto Rectangle cambia. El delegado del evento Changed es del tipo EventHandler. En la clase Rectangle, el evento Changed se invoca cuando se llama el accessor set de la propiedad Length.

Se puede suscribir al evento Changed dentro del mtodo Main al adjuntar el mtodo r_Changed como un controlador de evento para el evento utilizando el siguiente cdigo:
r.Changed += new EventHandler(r_Changed);

La frma del mtodo r_Changed coincide con los requerimientos del delegado EventHandler. El mtodo r_Changed se invoca tan pronto se establece el valor de la propiedad Length en el mtodo Main.

El cdigo anterior utiliza el operador += en lugar del operador de asignacin simple (=) para adjuntar el controlador de eventos. Al utilizar el operador +=, se asegura que este controlador de eventos se agregue a la lista de controladores que ya se encuentra adjunta al evento. Esta tcnica le permite tener varios controladores de eventos que puedan responder a un evento. Si utiliza el operador de asignacin (=) para asignar el nuevo controlador de evento, se anular cualquier controlador de eventos existente que se encuentre adjunto al evento y el nuevo evento ser el detonado cuando se invoque el evento.

3. Seleccione Depurar, Iniciar sin depurar. Aparecer una ventana de consola para mostrar que el valor de la propiedad Length cambi.

ER ICA

50

Leccin 2

Comprender los espacios de nombres


Un espacio de nombres le permite organizar el cdigo y crear nombres de clase nicos. Un espacio de nombres es un elemento del lenguaje que le permite organizar cdigo y crear nombres de clase globalmente nicas. Digamos que crea una clase del nombre Widget. Existe la posibilidad de que otro grupo adjunte cdigo que tambin contenga una clase del mismo nombre. En ese caso, cmo maneja la ambigedad de nombres? La solucin es organizar el cdigo en un espacio de nombres. Una metodologa comn es utilizar el nombre de la compaa en el espacio de nombres. Por ejemplo, puede decir:

ET

Comprender los miembros estticos


Los miembros estticos pertenecen a la clase en s en lugar de a objetos individuales. Los miembros de la clase como los campos de datos, mtodos y propiedades que se han comentado hasta ahora en esta seccin, todos operan sobre objetos individuales. Tales miembros se llaman como miembros de instancia porque se pueden utilizar slo despus de que una instancia de la clase es creada. En contraste, la palabra reservada static se utiliza para declarar miembros que no pertenecen a objetos individuales sino a la clase en s. Tales miembros de clase se llaman como miembros estticos. Un ejemplo comn de un miembro esttico es el mtodo Main que sirve como punto de entrada en su programa.

CI

BE

Con el uso de espacios de nombres puede terminar con nombres de clase completamente califcados muy largos que ocasionara un exceso de texto y necesidad de teclear. C# soluciona este inconveniente a travs de la directiva using. Puede utilizar la directiva using en la parte superior del archivo de la clase como se muestra a continuacin.
using System.Text;

Una vez que haya incluido la directiva using para un espacio de nombres, no necesitar califcar de forma completa las clases de ese espacio de nombres en el archivo.
using System.Text;

RO

www.pdftron.com
La clase del espacio de nombres CompanyA puede ser referida de forma nica por su nombre de clase completamente califcada CompanyA.Widget, mientras que el otro Widget se puede identifcar como CompanyB.Widget. El .NET Framework utiliza espacios de nombres para organizar todas sus clases. Por ejemplo, el espacio de nombres System agrupa todas las clases bsicas. El espacio de nombres System.Data organiza las clases para el acceso a datos. El espacio de nombres System.Web se utiliza para clases relacionadas con la Web.

ER ICA

namespace CompanyA { public class Widget { } } and namespace CompanyB { public class Widget { }

Introduccin a la programacin orientada a objetos

51

Crear miembros estticos


UTILICE el proyecto que guard en el ejercicio anterior. 1. Modique el cdigo de la clase Rectangle como se muestra a continuacin: class Rectangle { public static string ShapeName { } get { return Rectngulo; }

public double Length { get; set; } public double Width { get; set; } public double GetArea() { }

return this.Length * this.Width;

BE CI
; Listo para la certicacin? Comprende los conceptos bsicos de las clases? -2.1 } }

ET

RO
{1}, 4. GUARDE su proyecto.

www.pdftron.com
{ static void Main(string[] args) { Rectangle rect = new Rectangle { Length = 10.0, Width = 20.0 }; Console.WriteLine(Nombre de la forma: {0}, Area: Rectangle.ShapeName, rect.GetArea()); 3. Seleccione Depurar, Iniciar sin depurar. Aparecer una ventana de consola para mostrar el nombre y rea de la forma. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

2. Modique el cdigo de la clase Program a lo siguiente: class Program

Cuando se crea una instancia de una clase, se crea una copia separada para cada campo de instancia pero solo una copia del campo esttico se comparte por todas las instancias. Un miembro esttico no se puede referenciar a travs de un objeto de instancia. En su lugar, un miembro esttico se referencia a travs del nombre de la clase (como Rectangle. ShapeName en el ejercicio anterior). No se puede utilizar la palabra reservada this con un mtodo esttico o una propiedad debido a que slo se puede utilizar para acceder a objetos de instancia.

ER ICA

52

Leccin 2

Comprender los valores y las referencias


EN RESUMEN

Los tipos de valores almacenan directamente los valores mientras que los tipos de referencia slo almacenan una referencia al valor real. Un tipo de valor almacena directamente los datos en su memoria. Los tipos de referencia, por otro lado, slo almacenan una referencia a la ubicacin en memoria. Los datos se encuentran almacenados en la ubicacin en memoria a la cual se hace referencia. La mayora de los tipos de datos bsicos como bool, int, char, double, etc., son tipos de valores. Los tipos de datos defnidos por el usuario, creados utilizando la palabra reservada struct tambin son tipos de valores. Los tipos de referencia incluyen los tipos creados utilizando las palabras reservadas object, string, interface, delegate, y class.

Comprender las estructuras

La palabra reservara struct se utiliza para crear tipos defnidos por el usuario que consisten en grupos pequeos de campos relacionados. Las estructuras son tipos de valores opuestos a las clases que son tipos de referencias.

Tome Nota

Comprender la asignacin de memoria


Despus de introducir un valor o texto en una celda, puede modifcarla de varias formas. Puede eliminar el contenido por completo, introducir un valor diferente para reemplazar el que estaba o alterar lo que ingres. Una buena forma de comprender cmo los valores se diferencian de los tipos de referencia es visualizar cmo se representa cada uno de ellos en memoria. La Figura 2-1 muestra cmo se crean los tipos de valor en memoria. Cuando crea una variable de tipo int, se crea una ubicacin en memoria que puede utilizar para almacenar un valor del tipo int. Inicialmente, cuando no asigna un valor de forma explcita, el valor predeterminado del tipo de datos (para un int el valor predeterminado es 0) se almacena en la ubicacin en memoria. Cuando se realiza una asignacin, la direccin de memoria identifcada por el nombre de la variable se actualiza con el nuevo valor (10 en el caso de la asignacin en la Figura 2-1).

ET

CI

BE

Las estructuras se utilizan generalmente para crear tipos simples. Si se encuentra creando una estructura muy compleja, considere mejor utilizar una clase.

Las estructuras pueden contener la mayora de los elementos que puede contener una clase, como constructores, mtodos, propiedades, etc. Sin embargo, como aprender en la siguiente seccin, las estructuras son tipos de valores mientras que las clases son tipos de referencias. A diferencia de una clase, una estructura no puede heredar de otra clase o estructura.

RO
public double X, Y;

www.pdftron.com
public struct Point {

Las estructuras se defnen utilizando la palabra reservada struct como se muestra a continuacin:

ER ICA

Introduccin a la programacin orientada a objetos

53

Figura 2-1
Visualizacin de un tipo de valor en memoria

Production note: This gure should be redrawn on a smaller scale. Please also make the arrows as straight lines when you redraw it.

int number; number = 10;

nmero 0 nmero 10

La Figura 2-2 muestra un tipo de referencia, el tipo de datos string. Cuando crea una variable de tipo string, se crea una ubicacin en memoria que se identifcar por este nombre. Sin embargo, esta ubicacin en memoria no va a albergar el contenido del string. Esta variable almacenar la direccin en memoria (una referencia) de la ubicacin donde de hecho se almacenar el string.
Figura 2-2
Visualizacin de un tipo de referencia en memoria

ET

CI

BE
{ }

RO
name = Northwind;
struct Point

www.pdftron.com
string name;
nombre null
direccin datos

name = "Northwind";

Vista de Cdigo

Inicialmente, cuando no se asigna un valor, la variable tendr el valor de null (una referencia null, en otras palabras, esta variable no hace referencia a una direccin en memoria vlida). En la siguiente sentencia, cuando dice:

la cadena Northwind se crea en una ubicacin de memoria en particular (para simplifcar, digamos que la direccin en memoria es m100) y esa direccin de memoria se almacena en el nombre de la variable. Cuando es hora de recuperar el valor del nombre de la variable, el tiempo de ejecucin sabr que su contenido no se encuentra almacenado en la variable en si sino en la ubicacin en memoria a la cual apunta la variable.

Copiar valores y tipos de referencia


UTILICE el proyecto que guard en el ejercicio anterior. 1. Agregue el siguiente cdigo despus de la denicin de la clase Rectangle para crear una estructura Point:

public double X, Y;

ER ICA
Vista de Memoria nombre
m100

"Northwind"

m100

54

Leccin 2

2. Modique el cdigo del mtodo Main como se muestra a continuacin: static void Main(string[] args) Tome Nota Es posible crear un struct sin utilizar el operador new. Puede simplemente decir Point p1; para crear una variable del tipo struct. { Point p1 = new Point(); p1.X = 10; p1.Y = 20; Point p2 = p1; p2.X = 100;

Console.WriteLine(p1.X = {0}, p1.X); Rectangle rect1 = new Rectangle

{ Length = 10.0, Width = 20.0 }; Rectangle rect2 = rect1; rect2.Length = 100.0;

Tome Nota

3. Seleccione Depurar y despus Iniciar sin depurar. Aparecer una ventana de consola para mostrar los valores para p1.X y rect1.Length. 4. GUARDE su proyecto. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente eje

ET

CI

Cuando copia una variable de tipo de referencia a otra variable del mismo tipo, slo se copian las referencias. Como resultado, despus de la copia, las dos variables apuntan al mismo proyecto.

BE
Point p2 = p1; p2.X = 100;

La primera parte del programa crea una copia del tipo de valor Point y la segunda mitad del programa crea una copia del tipo de referencia Rectangle. Analicemos como se realiza la copia del tipo de valor. Cuando se ejecuta la siguiente sentencia, se crea una nueva variable p2 en memoria y su contenido se copia desde la variable p1:

Despus de ejecutar esta sentencia, se crea la variable p2 y el contenido de la variable p1 se copia a la variable p2. Tanto p1 como p2 tienen su propio conjunto de valores disponibles en sus ubicaciones en memoria respectivas. Por lo que, cuando se ejecuta la siguiente sentencia:

slo se afecta el valor de X correspondiente a la ubicacin en memoria de la variable p2. El valor de X para la variable p1 permanece sin cambios.

RO

www.pdftron.com
Console.WriteLine(rect1.Length = {0}, rect1.Length); }

ER ICA

Introduccin a la programacin orientada a objetos

55

Ahora, analicemos cmo funciona la copia entre los tipos de referencia. Cuando se ejecuta la siguiente sentencia, se crea una nueva variable rect2, igual que antes, el contenido de rect1 se copia a la ubicacin en memoria de rect2:
Rectangle rect2 = rect1;

rect2.Length = 100.0;

; Listo para la certicacin? Comprende los tipos de datos y l asignacin de memoria? -1.1

Esta sentencia hace referencia a la ubicacin en memoria apuntada por rect2 (la cual resulta ser la misma ubicacin en memoria apuntada por rect1) y modifca Length del objeto Rectangle. Ahora, si intenta hacer referencia a la misma ubicacin en memoria va el objeto rect1, obtendr el objeto modifcado y aparecer el siguiente cdigo mostrando el valor rect1.Length = 100.

ET

CI
EN RESUMEN

Comprender el encapsulamiento

El encapsulamiento es un mecanismo para ocultar informacin que hace que el cdigo sea fcil de mantener y entender. El encapsulamiento es un mecanismo para restringir el acceso a una clase o miembros clase para ocultar decisiones en el diseo que pueden cambiar. El encapsulamiento les da a los diseadores de las clases la fexibilidad para cambiar el cdigo cuando sea necesario sin cambiar todo el cdigo que hace uso de ese cdigo. Adems, cuando oculta informacin, tambin oculta la complejidad asociada a la misma. Como resultado, con la ayuda del encapsulamiento, puede escribir cdigo que sea ms fcil de comprender y mantener.

BE

RO

www.pdftron.com
Comprender la memoria heap y la pila call
Los objetos son siempre memoria asignada en el heap. El heap es la memoria disponible para el programa en tiempo de ejecucin para la asignacin dinmica de memoria. En contraste, algunos elementos de datos se pueden crear en la pila de ejecucin o en la pila call. Los elementos creados en la pila son los parmetros de mtodo y las variables locales declaradas dentro de un mtodo. La memoria de pila se reclama cuando por ejemplo se retorna un mtodo. La memoria asignada en el heap se reclama automticamente por el recolector de basura cuando los objetos ya no se utilizan (ya no hay objetos que hacen referencia a ellos).

rect1.Length);

Console.WriteLine(rect1.Length = {0},

ER ICA

Pero puesto que la clase Rectangle es un tipo de referencia, el contenido de la variable rect1 es de hecho una referencia a la ubicacin en memoria que contiene un objeto de Rectangle. As que, despus de la inicializacin anterior, tanto rect1 y rect2 apuntan a la misma ubicacin en memoria y al mismo objeto de Rectangle. Slo hay un objeto de rectangle en memoria y tanto rect1 como rect2 se referen a l. La siguiente sentencia modifca Length del objeto de rectangle:

56

Leccin 2

Tome Nota Cuando el cdigo en C# se compila, el cdigo ejecutable de salida contenido dentro de un archivo .dll o .exe tambin se llama como una asamblea. Una asamblea es una unidad de cdigo ejecutable que puede instalar de forma independiente.

En los ejercicios anteriores, vio el encapsulamiento cuando:

Declar los miembros de datos como private y reforz la inicializacin de campos de datos va un constructor. Como los miembros de datos se encuentran ocultos de los usuarios de la clase, el desarrollador de la clase Rectangle puede cambiar los nombres de los campos de datos sin la necesidad de cambiar el cdigo invocador. Las propiedades ofrecen una excelente manera de encapsular los campos de datos junto con cualquier otro tipo de lgica. Los modifcadores de acceso como private y public le permiten controlar el nivel de acceso que quiera tener para un miembro de la clase o para la clase en s. En esta seccin aprender ms sobre los modifcadores de acceso.

Comprender los modicadores de acceso

Los modifcadores de acceso controlan dnde se puede utilizar un tipo o miembro de tipo.
Tabla 7-2
Las partes que conforman al elemento <authorization>

private

El acceso se restringe a la clase contenedora.

protected

El acceso se restringe a la clase contenedora y a cualquier clase que se derive directa o indirectamente de la clase contenedora. Aprender ms sobre las clases derivadas en la seccin Comprender la herencia ms adelante en esta leccin. El acceso se restringe al cdigo en la misma asamblea. Este modicador de acceso es una combinacin de protected OR internal. Es decir, el acceso est restringido a cualquier cdigo en la misma asamblea y slo a las clases derivadas en otra asamblea.

internal

protected internal

Tome Nota

Debera utilizar el nivel de acceso ms restrictivo que tenga sentido para un miembro de tipo.

ET
; Listo para la certicacin? Comprende el encapsulamiento? -2.4

CI

BE

Los modifcadores de acceso no estn permitidos en las declaraciones de espacio de nombres pero se implica un acceso pblico para los espacios de nombre. Las clases de alto nivel (declaradas directamente bajo un espacio de nombres) slo pueden ser public o internal. El modifcador de acceso internal es el predeterminado para una clase si no se especifca ningn modifcador de acceso. La clase Rectangle defni en el ejercicio anterior elementos predeterminados para tener un acceso interno. La accesibilidad de una clase anidada puede no ser menos restrictiva que la accesibilidad de una clase contenedora.

RO

www.pdftron.com
Modificador de acceso public Descripcin El acceso no se restringe.

Todos los tipos y miembros de tipo tienen un nivel de acceso que especifca donde esa clase o sus miembros se pueden utilizar en su cdigo. El nivel de acceso se puede establecer utilizando uno de los modifcadores de acceso especifcados en la Tabla 2-1.

ER ICA

Introduccin a la programacin orientada a objetos

57

Comprender la herencia
EN RESUMEN

Despus de haber introducido un valor o texto en una celda, lo puede modifcar de varias maneras. Puede eliminar el contenido por completo, ingresar un valor diferente para reemplazar el que estaba o alterar lo que ingres. La herencia le permite crear clases nuevas que reutilizan, extienden y modifcan la funcionalidad defnida en las clases existentes. La clase que hereda la funcionalidad se conoce como clase derivada y la clase cuya funcionalidad es heredada se conoce como clase base. La clase derivada hereda toda la funcionalidad de la clase base y puede contener caractersticas adicionales que la hace diferente de la clase base.
Tome Nota A diferencia de las clases, las estructuras no soportan la herencia.

Digamos que queremos crear un conjunto de clases que describa polgonos como rectngulos o tringulos. Estas clases tendrn algunas propiedades en comn como anchura y longitud. Para este caso, se puede crear una clase base Polygon con las propiedades Width y Length, y las clases derivadas Rectangle y Triangle heredarn estas propiedades a la vez que cuentan con su propia funcionalidad. El siguiente ejercicio explica lo anterior de forma ms detallada.

CI
}

ET

BE
} { { } { }

RO
{

www.pdftron.com
UTILICE el proyecto que guard en el ejercicio anterior. class Polygon 1. Agregue una nueva clase Polygon como se muestra a continuacin: public double Length { get; protected set; } public double Width { get; protected set; } 2. Modique la clase Rectangle como se muestra a continuacin: class Rectangle : Polygon public Rectangle(double length, double width) Length = length; Width = width; public double GetArea() return Width * Length;

Crear clases derivadas

ER ICA

58

Leccin 2

3. Modique el cdigo del mtodo Main como se muestra a continuacin: static void Main(string[] args) { Rectangle rect = new Rectangle(10, 20); Console.WriteLine( Width={0}, Length={1}, Area = {2}, rect.Width, rect.Length, rect.GetArea()); 4. Seleccione Depurar y despus Iniciar sin depurar. Aparecer una ventana de consola para mostrar la anchura, longitud y rea del rectngulo. 5. GUARDE su proyecto. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio. }

Para defnir una clase derivada, coloque dos puntos despus del nombre de la clase derivada seguido del nombre de la clase base. Aqu la clase Polygon es la clase base para la clase Rectangle.

La clase Rectangle hereda todos los datos no privados y el comportamiento de la clase Polygon. Adems, la clase Rectangle defne funcionalidad adicional (mtodo GetArea) que no est disponible en la clase base.

Las clases abstractas proporcionan una defnicin comn de la clase base que se pueden compartir por varias clases derivadas. Las clases selladas, por otro lado, cuentan con una funcionalidad completa pero no se pueden utilizar como clases bases.

ET

CI

BE

Comprender las clases abstractas y selladas

En el ejercicio anterior defni un mtodo GetArea en la clase Rectangle. Suponga que quiere crear otra clase, Triangle, que es del tipo Polygon. Ahora, necesitar un mtodo GetArea en la clase Triangle para calcular el rea de un tringulo.

Con frecuencia, las clases base actan como el repositorio de la funcionalidad comn. En el caso de Polygon, el polgono en s no sabr cmo calcular el rea sin contar con el conocimiento sobre el tipo de forma. Pero en general, podemos esperar que todas las clases del tipo Polygon sean capaces de calcular sus propias reas. Tales expectativas pueden depender de la clase base con la ayuda de una palabra reservada abstract.

Crear clases abstractas


UTILICE el proyecto que guard en el ejercicio anterior. 1. Modique la clase Polygon como se muestra a continuacin:

RO

www.pdftron.com

Las propiedades Length y Width en la clase Polygon se declaran como un modifcador de acceso protegido para el accessor set. Esto signifca que el acceso al accesor set est disponible slo desde dentro de la clase Polygon y sus clases derivadas. Aun puede obtener el valor de las propiedades Length y Width en el mtodo Main pero obtendr un error si intenta asignar un valor a estas propiedades.

ER ICA

Introduccin a la programacin orientada a objetos

59

abstract class Polygon { public double Length { get; protected set; } public double Width { get; protected set; } abstract public double GetArea(); } class Rectangle : Polygon { { 2. Modique la clase Rectangle como se muestra a continuacin:

public Rectangle(double length, double width) Length = length; Width = width; }

ET
Tome Nota No puede crear instancias de una clase abstracta.

CI

BE

RO
} } 4. GUARDE su proyecto.

www.pdftron.com
public override double GetArea() { return Width * Length; 3. No se necesita realizar modicaciones al mtodo Main. Seleccione Depurar, Iniciar sin depurar. Aparecer una ventana de consola para mostrar el ancho, longitud y rea del rectngulo. PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Esta versin de la clase Polygon defne un mtodo de nombre GetArea. La razn principal para incluir este mtodo en la clase base es que ahora la clase base puede proporcionar una plantilla comn de funcionalidad para las clases derivadas. Pero, como ya se coment, la clase base Polygon no conoce lo sufciente para calcular el rea de la forma. La situacin se puede manejar haciendo el mtodo abstracto. Un mtodo abstracto cuenta con una defnicin pero no proporciona ninguna implementacin (cuerpo de mtodo). Si ninguno de los miembros de la clase es abstracto, la clase en s necesita marcarse como abstracta. No se puede instanciar una clase abstracta.

Las clases derivadas pueden proporcionar una implementacin de la clase abstracta para crear una clase concreta (clase no abstracta). La clase derivada puede proporcionar una implementacin de un mtodo abstracto al sobrescribirlo en una clase derivada. Por ejemplo, la clase Rectangle sobrescribe el mtodo abstracto GetArea de la clase base y proporciona una implementacin completa. Como resultado, la clase Rectangle ya no es una clase abstracta y se puede instanciar de forma directa.

ER ICA

60

Leccin 2

Las clases selladas, por otro lado, se defnen cuando su implementacin est completa y no quiere que se herede una clase. Una clase sellada se puede crear utilizando la palabra reservada sealed como se muestra a continuacin:
sealed class Rectangle : Polygon { // miembros de la clase aqu }

Tome Nota C# no soporta la herencia de ms de una clase base, a lo cual se le conoce como herencia mltiple.

sealed public override double GetArea() { } return Width * Length;

Esta declaracin asegura que el mtodo GetArea no se pueda sobrescribir en una clase derivada.

Todas las clases en el .NET Framework heredan de forma directa o indirecta de la clase Object. Por ejemplo, cuando declar la siguiente clase anteriormente:
class Polygon {

ET

CI
{ }

BE
}

era funcionalmente equivalente a la siguiente declaracin:


class Polygon : Object public double Length { get; protected set; } public double Width { get; protected set; }

Pero no tiene que declarar la clase Polygon de la segunda manera porque la herencia de la clase Object se asume de forma implcita. Como parte de esta herencia, una clase derivada sobrescribe los mtodos de la clase Object. Dos de los mtodos ms comunes son:

RO

www.pdftron.com
Herencia desde la clase Object
La clase Object es la clase base ms importante de todas las clases en el .NET Framework.
public double Length { get; protected set; } public double Width { get; protected set; }

Equals: Soporta la comparacin entre dos objetos. Retorna true si los dos objetos tienen el mismo valor.

ER ICA

Puesto que Rectangle es una clase sellada, no se puede utilizar como una clase base. Tambin es posible marcar miembros de la clase seleccionados como sellados para evitar que se sobrescriban en una clase derivada. Por ejemplo, puede decir:

Introduccin a la programacin orientada a objetos

61

ToString: Retorna una representacin string de la clase. De manera predeterminada, retorna el nombre complete de la clase. Es con frecuencia til para sobrescribir este mtodo para que regrese una representacin string del estado actual del objeto.

El siguiente ejemplo muestra como sobrescribir el mtodo ToString en la clase Rectangle:


class Rectangle : Polygon { public Rectangle(double length, double width) { Length = length; Width = width;

public override double GetArea() { } return Width * Length;

El tiempo de ejecucin le permite castear un objeto a cualquiera de sus tipos base. Las clases derivadas tienen una relacin es un con la clase base. Por ejemplo, podemos decir que el Rectngulo es un Polgono. Un objeto de la clase Rectangle tiene en este caso dos tipos de datos: el objeto es un Rectngulo y el objeto es tambin un Polgono.

ET

CI

BE

Casting entre tipos

RO
} }

www.pdftron.com
{ return String.Format( Width = {0}, Length = {1}, Width, Length);

El tiempo de ejecucin le permite castear un objeto a su clase o a cualquiera de sus clases base. Por ejemplo, puede decir:
Polygon p = new Rectangle(10, 20);

Aqu, se crea un nuevo objeto Rectangle y se castea a su tipo base Polygon. C# no requiere de una sintaxis especial porque castear a un tipo base se considera una conversin segura. Tambin se puede castear de la siguiente manera:
Object o = new Rectangle(10, 20);

Rectangle r = (Rectangle) o;

public override string ToString()

ER ICA

62

Leccin 2

Aqu, un objeto Rectangle se asigna primero a un Object (la clase base fundamental) y el objeto resultante se castea de vuelta como un Rectangle. Cuando sucede la ltima asignacin, se requiere de un casteo explicito porque convertir un objeto ms general a un objeto menos general. El tiempo de ejecucin revisa si el valor de la variable o es compatible con la clase Rectangle. Si en tiempo de ejecucin el valor de o no es compatible con la clase Rectangle, el tiempo de ejecucin arroja una System.InvalidCastException.

El operador is

Si se encuentra utilizando un operador as para convertir un tipo, la revisin del operador is no es necesaria. Puede simplemente revisar el valor de retorno de as contra null.

if (o is Rectangle) {

Rectangle r = (Rectangle) o; }

Aqu el tiempo de ejecucin revisar el valor del objeto o. La sentencia cast slo se ejecuta si o contiene un objeto Rectangle.

Rectangle r = o as Rectangle; if (r != null) {

; Listo para la certicacin? Comprende la herencia? -2.2

ET
EN RESUMEN

Comprender el polimorsmo
El polimorsmo es la capacidad de las clases derivadas para compartir una funcionalidad en comn con las clases base pero defniendo su propio comportamiento. Digamos que se encuentra desarrollando una aplicacin que permite a los usuarios trabajar con diferentes tipos de polgonos. Cuenta con una coleccin que contiene diferentes tipos de polgonos como un rectngulo, un tringulo y un cuadrado. Cada polgono le provee con su propia implementacin del mtodo Draw. Cuando trabaja con esta coleccin, no

CI

BE
// hacer algo }

Si en tiempo de ejecucin, no es posible castear el valor de la variable o a rectangle, se asigna un valor null a la variable r. No se arrojarn excepciones.

RO

www.pdftron.com
El operador as
Otro operador cast til es el operador as. El operador as es similar a la operacin cast pero, en el caso de as, si el tipo de conversin no es posible, se retorna null en lugar de arrojar una excepcin. Por ejemplo, considere este cdigo:

ER ICA

Tome Nota

Para evitar errores en tiempo de ejecucin como InvalidCastException, se utiliza el operador is para revisar si se permite el casteo antes de llevarlo a cabo:

Introduccin a la programacin orientada a objetos

63

necesariamente debe saber exactamente con cual forma est trabajando sino que preferir que se invoque el mtodo Draw correcto en cada ocasin. El polimorfsmo le permite realizar esto. El polimorfsmo permite a los objetos de la clase derivada que se les trate en tiempo de ejecucin como el objeto de la clase base. Cuando se invoca un mtodo en tiempo de ejecucin, su tipo exacto se identifca y se invoca el mtodo apropiado desde la clase derivada.

Uso del polimorsmo


UTILICE el proyecto que guard en el ejercicio anterior. class Polygon { { }

1. Modique la clase Polygon como se muestra a continuacin:

public virtual void Draw()

Console.WriteLine(Dibujando: Polgono); }

ET
} {

CI
{

BE
} } { }

RO
{ {

www.pdftron.com
2. Modique la clase Rectangle como se muestra a continuacin: class Rectangle : Polygon public override void Draw() Console.WriteLine(Dibujando: Rectngulo); 3. Agregue una nueva clase, Triangle, como se muestra a continuacin: class Triangle : Polygon public override void Draw() Console.WriteLine(Dibujando: Tringulo); 4. Modique el mtodo Main como se muestra a continuacin: static void Main(string[] args)

ER ICA

64

Leccin 2

List<Polygon> polygons = new List<Polygon>(); polygons.Add(new Polygon()); polygons.Add(new Rectangle()); polygons.Add(new Triangle()); foreach (Polygon p in polygons) { p.Draw(); } }

5. Seleccione Depurar y despus Iniciar sin depurar. Aparecer una ventana de consola para mostrar el mensaje sobre el dibujo de cada polgono. 6. GUARDE su proyecto.

PAUSA. Deje el proyecto abierto para utilizarlo en el siguiente ejercicio.

Dibujando: Polgono

Dibujando: Rectngulo Dibujando: Tringulo

ET

Comprender las palabras reservadas override y new


La palabra reservada override reemplaza un miembro de la clase base en una clase derivada. La palabra reservada new crea un nuevo miembro del mismo nombre en la clase derivada y oculta la implementacin de la clase base. Cuando una clase base defne un miembro virtual, la clase derivada tiene dos opciones para manejar esta situacin: la clase derivada puede utilizar ya sea la palabra override o new. La palabra override toma la prioridad sobre la defnicin de la clase base del miembro. El objeto de la clase derivada llamar el miembro sobrescrito en lugar del miembro de la clase base.

CI

BE

El tipo de datos List<Polygon> es capaz de almacenar una coleccin de objetos que son del tipo Polygon o tipos que derivan de Polygon. EL ciclo foreach se encuentra iterando en una coleccin de objetos Polygon. El tipo subyacente del primer objeto es Polygon, pero el segundo y tercer objeto en la coleccin son de hecho objetos Rectangle y Triangle que se acaban de castear como Polygons. El tiempo de ejecucin ver en el tipo subyacente e invocar el mtodo de sobrescritura desde la clase derivada. Esa es la razn por la cual la versin de la clase derivada del mtodo Draw se llama tanto para los objetos Rectangle como Triangle.

RO

www.pdftron.com
Si el mtodo en una clase derivada no se encuentra precedida por las palabras new u override, el compilador afrontar una advertencia y el mtodo se comportar como si la palabra new estuviera presente.

Tome Nota

Tanto la clase Rectangle como Triangle sobrescriben el mtodo Draw de la clase base con sus propias defniciones utilizando la palabra reservada override. Cuando se ejecuta el mtodo Main se genera el siguiente resultado:

En este ejercicio, las defniciones de las clases Polygon y Rectangle se simplifcan para enfatizar el concepto de polimorfsmo. La clase base proporciona un solo mtodo Draw. Lo importante aqu es notar la palabra reservada virtual. Esta palabra permite a las clases derivadas sobrescribir el mtodo.

ER ICA

Introduccin a la programacin orientada a objetos

65

Si se utiliza la palabra reservada new, se crea una nueva defnicin del miembro y se oculta el miembro de la clase base. Sin embargo, si la clase derivada se castea a una instancia de la clase base, se pueden seguir llamando a los miembros ocultos de la clase. Modifquemos el mtodo Triangle del ejercicio anterior a lo siguiente:
class Triangle : Polygon { public new void Draw() { } Tome Nota La clase System.Object proporciona un mtodo ToString. Por estndar, debe utilizar este mtodo para retornar la representacin legible para el humano con respecto a una clase. Cuando cree sus tipos, es recomendable practicar la sobrescritura de este mtodo para retornar informacin legible sobre los objetos. }

Ahora modifquemos el cdigo en la clase Main de la siguiente manera:


Triangle t = new Triangle(); t.Draw(); Polygon p = t; p.Draw();

Comprende el polimorsmo? -2.3

ET
EN RESUMEN

CI

Comprender las interfaces

Las interfaces se utilizan para establecer contratos a travs de los cuales los objetos pueden interactuar entre s sin conocer los detalles de implementacin. Las interfaces se defnen utilizando la palabra reservada interface. Una defnicin de interface consiste en un conjunto de frmas para mtodos, propiedades, delegados, eventos o indexadores. Una defnicin de interface no puede consistir de ningn campo de datos o detalles de implementacin como cuerpos de mtodos. Una interface comn defnida en el espacio de nombres System es el espacio IComparable.

BE

; Listo para la certicacin?

RO
Dibujando: Polgono

www.pdftron.com
El programa producir el siguiente resultado:
Dibujando: Tringulo

Cuando se invoca directamente el mtodo Draw en el objeto de la clase derivada, se utiliza la nueva versin del mtodo. Sin embargo, si se ejecuta el mtodo cuando la clase derivada se castee como una clase base, se ejecuta la versin oculta de la clase base del mtodo Draw.

ER ICA

Console.WriteLine(Dibujando: Tringulo);

66

Leccin 2

Esta interface se defne de la siguiente manera:


interface IComparable { int CompareTo(object obj); Tome Nota Por estndar, todas las interfaces denidas en el .NET Framework empiezan con la letra I mayscula. Aun cuando puede asignar nombres a sus interfaces de la forma que quiera, es mejor utilizar el estndar de Framework. }

Si la instancia es igual al parmetro, CompareTo retorna 0. Se retorna un valor positivo si el valor del parmetro es menor que la instancia o si el parmetro es null. Si el valor del parmetro es mayor que la instancia entonces se retorna un valor negativo. Si el parmetro no es de tipo compatible, entonces se arroja una ArgumentException.

Uso de la interface IComparable

UTILICE el proyecto que guard en el ejercicio anterior.

ET

CI
{ } { }

BE
{

1. Modique la clase Rectangle como se muestra a continuacin: class Rectangle : Polygon, IComparable public double Length { get; set; } public double Width { get; set; } public override void Draw() Console.WriteLine(Dibujando: Rectngulo);

RO

www.pdftron.com
public double GetArea() return Length * Width;

Cmo es que IComparable decide cmo comparar dos objetos Rectangle o dos objetos Employee? No lo hace. Las clases que estn interesadas en tales comparaciones deben implementar la interface IComparable al proporcionar un cuerpo de mtodo para el mtodo CompareTo. Cada clase que implementa IComparable es libre de proporcionar su propia comparacin lgica dentro del mtodo CompareTo.

ER ICA

La interface IComparable tiene un solo mtodo (CompareTo) que acepta un objeto y retorna un int. El valor de retorno de este mtodo indica el resultado de comparar un parmetro dado con el objeto actual. De acuerdo con la documentacin del mtodo CompareTo:

Introduccin a la programacin orientada a objetos

67

public int CompareTo(object obj) { if (obj == null) return 1; if (!(obj is Rectangle)) throw new ArgumentException(); Rectangle target = (Rectangle)obj;

double diff = this.GetArea() - target.GetArea(); if (diff == 0) return 0; return 1; }

else if (diff > 0) else return -1;

ET

CI
}

BE

RO
{ GUARDE su proyecto.

www.pdftron.com
} 2. Modique el mtodo Main como se muestra a continuacin: static void Main(string[] args) Rectangle rect1 = new Rectangle Rectangle rect2 = new Rectangle { Length = 100, Width = 200 }; { Length = 10, Width = 20 }; Console.WriteLine(rect1.CompareTo(rect2)); 3. Seleccione Depurar y despus Iniciar sin depurar. Aparecer una ventana de consola al valor -1 puesto que el rea de rect1 es menor que el rea de rect2.

La clase Rectangle deriva se la clase Polygon e implementa la interface IComparable. Una clase que implementa una interface debe implementar todos los mtodos declarados en la interface. Una interface es similar a una clase abstracta pero hay diferencias notables. Una clase abstracta proporciona una implementacin incompleta mientras que una interface no proporciona ninguna implementacin. Una clase tambin puede implementar mltiples interfaces pero est limitada a heredar de una sola clase base.

ER ICA

68

Leccin 2

; Listo para la certicacin? Comprende el encapsulamiento? -2.4

Por lo que, cmo decide si utilizar una clase abstracta o una interface? Una forma de decidir es revisar si existe una relacin es un entre los dos conceptos. Por ejemplo, si existe una relacin de herencia entre SalariedEmployee y Employee, entonces puede utilizar una clase abstracta para estandarizar la funcionalidad comn entre clases derivadas. Por otro lado, no hay una relacin es un entre Employee y la IComparable. Por lo tanto, la funcionalidad de comparacin es mejor si se implementa como una interface.

ET

CI

BE

RO

www.pdftron.com

ER ICA

Comprender los conceptos bsicos de bases de datos

69

Resumen de la matriz de habilidades


En esta leccin aprendi:

ET

CI

BE

RO

www.pdftron.com

ER ICA

La programacin orientada a objetos es una tcnica de programacin que utiliza objetos. Los objetos son estructuras de datos auto contenidas que consisten de propiedades, mtodos y eventos. Las propiedades especifcan los datos representados por el objeto; los mtodos especifcan el comportamiento del objeto y los eventos proporcionan la comunicacin entre los objetos. Una clase es la plantilla a partir de la cual se crean los objetos individuales. Los constructores se utilizan para inicializar los miembros de datos del objeto. La palabra reservada this se pueden utilizar para acceder a los miembros desde dentro de los constructores, mtodos de instancia y accessors de propiedades de instancia. Los delegados son tipos especiales utilizados para encapsular un mtodo dentro de una frma especfca. Los eventos son una forma en la cual una clase notifca a otras clases u objetos cuando sucede algo de inters. La clase que enva la notifcacin se conoce como editor del evento. La clase que recibe la notifcacin se conoce como suscriptor del evento. Los espacios de nombre le permiten organizar cdigo y crear nombres de clase nicos. La palabra reservada static se utiliza para declarar miembros que no pertenecen a objetos individuales sino a la clase en s. Los tipos de valor almacenan directamente el valor mientras que los tipos de referencia almacenan solo la referencia al valor real. La palabra reservada struct se utiliza para crear tipos defnidos por el usuario que consisten de pequeos grupos de campos relacionados. Las estructuras son tipos de valor, las clases son tipos de referencias. El encapsulamiento es un mecanismo para restringir el acceso a una clase o miembros de la clase para ocultar las decisiones de diseo que pueden cambiar. El encapsulamiento proporciona a los diseadores de la clase la fexibilidad para cambiar el cdigo cuando sea necesario sin cambiar todo el cdigo involucrado. Un modifcador de acceso especifca la regin de cdigo a la cual tendr acceso un campo. Por ejemplo, un modifcador de acceso pblico no limita el acceso, pero un privado limita el acceso dentro de la clase en la cual se defna el campo. La herencia le permite crear clases nuevas que reutiliza, extienden y modifcan la funcionalidad defnida en clases existentes. La clase que hereda funcionalidad se conoce como clase derivada y la clase cuya funcionalidad se hereda se conoce como clase base. El polimorfsmo es la capacidad que tienen las clases derivadas para compartir funcionalidad con las clases base pero aun defniendo su propio comportamiento nico. La palabra reservada override reemplaza un miembro de la clase base en una clase derivada. La palabra new crea un nuevo miembro con el mismo nombre en la clase derivada y oculta la implementacin en la clase base.

70

Leccin 2

Evaluacin de conocimiento
Complete los espacios en blanco Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios proporcionados. 1. Una __________ es una huella de un objeto.

3. Las clases que quieran soportar la comparacin deben implementar la interface IComparable y luego proporcionar un cuerpo para el mtodo __________. 4. Puede utilizar el operador __________ para verifcar si es legal castear un tipo a otro.

5. Las tres caractersticas principales de un lenguaje de programacin orientada a objetos son el __________, __________, y __________. 6. Podemos utilizar __________ para agrupar clases relacionaras para reducir la colisin de nombres. 7. La palabra reservada __________ se refere a la instancia actual de la clase. 8. Un tipo__________ es uno que referencia a un mtodo.

Opcin mltiple

ET

CI
a. b. c. d.

BE
a. b. c. d. Public Private Protected Internal Abstract Virtual New Overrides

Encierre en un crculo la opcin que contenga la respuesta correcta. 1. Desea restringir el acceso de un mtodo a la clase contenedora o a una clase que se derive de la clase contenedora. Cul modifcador de acceso debera utilizar para utilizar este mtodo?

2. En una clase defni un mtodo llamado Render. Este mtodo proporciona funcionalidad a los archivos Render bitmap en pantalla. Le gustara que las clases derivadas sustituyeran esta funcionalidad para soportar la renderizacin de formatos de imgenes adicionales. Desea que el mtodo Render de la clase derivada se ejecute aun si la clase derivada est casteada como la clase base. Cul palabra reservada utilizara con la defnicin del mtodo Render en la clase base?

RO

www.pdftron.com
9. Una __________ es un tipo de valor, mientras que una __________ es un tipo de referencia. 10. Puede utilizar la palabra reservada __________ para declarar un miembro, el cual pertenece a la clase en s en vez de a un objeto especfco.

ER ICA

2. Una clase que no proporciona una implementacin complete se debe declarar con la palabra reservada __________.

Comprender los conceptos bsicos de bases de datos

71

3. Defni una clase AdvMath que defne funcionalidad matemtica avanzada. No desea que la funcionalidad de esta clase se herede a una clase derivada. Cul palabra reservada debe utilizar para defnir la clase AdvMath? a. b. c. d. Sealed Abstract Private Internal

a. Agregar a la funcionalidad de consulta a la clase base con el modifcador de acceso pblico. b. Hacer que todas las clases hereden de la clase abstracta y sobrescriban el mtodo de la clase base para ofrecer su propia funcionalidad de consulta. c. Hacer que todas las clases hereden de la clase base que proporcione la funcionalidad de consulta. d. Crear una interfaz comn que se implemente por todas las clases. 5. Cul de los siguientes elementos de clase debera utilizar para defnir el comportamiento de una clase? a. b. c. d. Mtodo Propiedad Evento Delegado

ET

CI

BE

RO

www.pdftron.com
6. Se encuentra escribiendo un cdigo para una clase de nombre Product. Necesita asegurarse que los miembros de datos de las clases se inicialicen en sus valores correctos tan pronto como cree un objeto de la clase Product. El cdigo de inicializacin se debe ejecutar siempre. Qu es lo que debera hacer? a. Crear un mtodo esttico en la clase Product para inicializar los miembros de datos. b. Crear un constructor en la clase Product para inicializar los miembros de datos. c. Crear una propiedad esttica en la clase Product para inicializar los miembros de datos. d. Crear un evento en la clase Product para inicializar los miembros de datos. 7. Se encuentra creando una nueva clase de nombre Square que se deriva de la clase Polygon. La clase Polygon tiene el siguiente cdigo: a. class Polygon b. { c. public virtual void Draw() d. { e. // cdigo adicional... f. } g. } 8. El mtodo Draw en la clase Square debe proporcionar nuevas funcionalidades pero tambin oculta la implementacin de la clase Polygon del mtodo Draw. Cul segmento de cdigo debera elegir? a. class Square : Polygon

ER ICA

4. Necesita proporcionar la funcionalidad de consulta a varias de sus clases. Cada algoritmo de clase para consulta ser diferente. No todas las clases tienen una relacin es un entre s. Cmo soportara esta funcionalidad?

72

Leccin 2

{ public override void Draw() { // cdigo adicional... } } {

b. class Square : Polygon

{ } } {

// cdigo adicional...

c. class Square : Polygon

d. class Square : Polygon

ET

CI
{ { }

BE
} }

9. Se encuentra creando una nueva clase de nombre Rectangle. Escribe el siguiente cdigo:
class Rectangle : IComparable public double Length { get; set; } public double Width { get; set; } public double GetArea() return Length * Width;

RO
{

www.pdftron.com
// cdigo adicional... } } public static void Draw() // cdigo adicional...

public virtual void Draw()

ER ICA

public new void Draw()

Comprender los conceptos bsicos de bases de datos

73

public int CompareTo(object obj) { // a completarse } }

10. Necesita completar la defnicin del mtodo CompareTo para habilitar la comparacin de los objetos de Rectangle. Cul de los siguientes cdigos debera escribir? a.
{ public int CompareTo(object obj) Rectangle target = (Rectangle)obj;

double diff = this.GetArea() - target.GetArea(); if (diff == 0) return 0; return 1;

else if (diff > 0) else return -1;

BE CI
c.
} {

ET

RO
return 1; return 0; return 1;

www.pdftron.com
} {

b.

M
if (diff == 0) else if (diff > 0) return -1; else return 0; if (this == target) else if (this > target) else return -1;

public int CompareTo(object obj)

Rectangle target = (Rectangle)obj;

double diff = this.GetArea() - target.GetArea();

public int CompareTo(object obj) Rectangle target = (Rectangle)obj;

ER ICA

74

Leccin 2

d. public int CompareTo(object obj)


{ Rectangle target = (Rectangle)obj; if (this == target) return 1; else if (this > target) else return 0; }

11. Se encuentra escribiendo un cdigo para un nuevo mtodo de nombre Process: a. void Process(object o) b. { c. d. }

ET

CI
a. b. c. d.

BE
el siguiente:

a. b. c. d.

13. Se encuentra escribiendo el cdigo para controlar los eventos en su programa. Defne un delegado de nombre RectangleHandler como el siguiente: a. public delegate void RectangleHandler(Rectangle rect); b. Tambin crea una variable del tipo RectangleHandler como c. RectangleHandler handler;

14. Ms adelante en el programa, necesita agregar un mtodo de nombre DisplayArea a la lista de invocacin de mtodos de la variable controladora. La frma del mtodo DisplayArea corresponde al de la frma del mtodo RectangleHandler. Cualquier cdigo que escriba no debera afectar ningn cdigo controlador de eventos existente. Cul de los siguientes cdigos debera escribir?
Handler = new Rectanglehandler(DisplayArea); Handler = DisplayArea; Handler += DisplayArea; Handler -= DisplayArea;

RO

www.pdftron.com
12. El cdigo recibe un parmetro de tipo objeto. Necesita castear este objeto en el tipo Rectangle. En ocasiones, el valor de o enviado al mtodo puede no ser un valor de Rectangle vlido. Necesita asegurarse que el cdigo no genere ningn error System. InvalidCastException al hacer las conversiones. Cul de las siguientes lneas de cdigo debera utilizar dentro del mtodo Process?
Rectangle r = (Rectangle) o; Rectangle r = o as Rectangle; Rectangle r = o is Rectangle; Rectangle r = (o != null) ? o as rectangle:(Rectangle) o;

ER ICA

return -1;

Comprender los conceptos bsicos de bases de datos

75

Evaluacin de destreza
Escenario 2-1: Creacin de propiedades 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 vaca o a un valor null debe arrojar una excepcin. El usuario de la clase Product no debe ser capaz de acceder a cualquier otro miembro de datos de la clase Product. Cmo crear esta clase?. Escenario 2-2: Creacin de un Struct

Se encuentra desarrollando un juego que necesita representar la ubicacin de un objetivo en el espacio tridimensional. La ubicacin 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 ubicacin. Cmo debera representar la ubicacin en su programa?. Evaluacin de destreza

ET

CI
{ }

BE

RO
void Invoke();

www.pdftron.com
Se encuentra escribiendo un cdigo para una clase Product. La clase Product contiene el nombre y el precio de un producto. Necesita sobrescribir el mtodo de la clase base (System.Object) ToString para proporcionar informacin sobre los objetos de la clase product al cdigo invocador. Cul cdigo necesita escribir para la clase Product para cumplir con este requisito?. Proyecto 2-4: Creacin y manejo de eventos Se encuentra escribiendo un cdigo para la creacin y manejo de eventos en su programa. La clase SampleClass necesita implementar la siguiente interface:
public delegate void SampleDelegate(); public interface ISampleEvents event SampleDelegate SampleEvent;

Proyecto 2-3: Sobrescribiendo el mtodo ToString

Necesita escribir el cdigo para SampleClass y para un mtodo test que crea una instancia de SampleClass e invoca el evento. Cul cdigo debera escribir?. En una clase defni un mtodo llamado Render. Este mtodo proporciona funcionalidad a los archivos Render bitmap en pantalla. Le gustara que las clases

ER ICA

76

Leccin 2

ET

CI

BE

RO

www.pdftron.com

ER ICA

Leccin 3

Desarrollo General de Software


Matriz de Dominio de Objetivos
Habilidad Tecnolgica Comprender la Administracin del Ciclo de Vida de una Aplicacin Comprender las Pruebas Comprender las Estructuras de Datos Comprender los Algoritmos de Clasicacin Descripcin del Dominio de Objetivo Nmero del Dominio del Objetivo 3.1 3.1 3.3 3.3

Comprender la Administracin del Ciclo de Vida de una Aplicacin Comprender la Administracin del Ciclo de Vida de una Aplicacin Comprender los algoritmos y estructuras de datos Comprender los algoritmos y estructuras de datos

ET

CI

BE

Como desarrollador para la Corporacin 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 aplicacin y a menudo necesita interactuar con el equipo de pruebas de software y participar en las pruebas en persona. Necesita tener una comprensin general de las pruebas de software. Cuando desarrolla software utiliza varios tipos de estructuras de datos y algoritmos. Necesita saber cul estructura de datos utilizar para cada una de las reas a desarrollar as como conocer las implicaciones de su eleccin. Tambin debe tener una comprensin general de varios mtodos de ordenacin.

RO

www.pdftron.com
Trminos Clave
Arreglos o vectores Pruebas de caja negra Ordenamiento de burbuja Listas enlazadas Ordenamiento rpido Colas Pruebas de regresin Pilas Pruebas de unidad Pruebas de caja blanca

ER ICA

78

Leccin 3

Comprender la Administracin del Ciclo de Vida de una Aplicacin


EN RESUMEN

La Administracin del Ciclo de Vida de una Aplicacin 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 aplicacin de software es ms que solo escribir el cdigo. Se necesita desarrollar distintas actividades en el orden correcto para desarrollar una aplicacin de software exitosamente. Administrar estas actividades es conocido colectivamente como una Administracin del Ciclo de Vida de Aplicacin (ALM). Algunas de las actividades que son parte del proceso de ALM como se muestra en la Figura 3-1 son: Requerimientos, Diseo, Desarrollo, Pruebas, Entrega y Administracin de Liberacin.
Figura 3-1
Administracin del Ciclo de Vida de Aplicacin

ET

Comprender el Anlisis de Requerimientos


El anlisis de requerimientos es el proceso de determinar los requerimientos del negocio detallados para un nuevo sistema de software.

CI

BE

En esta seccin aprender acerca de las distintas actividades y roles involucrados en cada una de las actividades en la administracin del ciclo de vida de una aplicacin.

El ciclo de vida de aplicacin inicia cuando la necesidad por una nueva aplicacin de software es identifcada. El administrador de un negocio generalmente es la persona que patrocina el proyecto. l o ella analizan la necesidad, verifcan cmo el proyecto encaja con la estrategia global del negocio, organiza la fnanciacin e inicializa el proceso de seleccin 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 ejecucin 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 contratacin de miembros del equipo y de facilitar la cooperacin dentro del equipo.

RO

www.pdftron.com

ER ICA

Desarrollo General de Software

79

El anlisis de requerimientos es uno de los pasos ms importantes en el ciclo de vida de aplicacin. Requerimientos precisos, completos y bien documentados son crticos para el xito del proyecto. Los requerimientos pueden ser funcionales o no funcionales. Los requerimientos funcionales especifcan exactamente lo que el sistema est diseado para llevar a cabo. En contraste, los requerimientos no funcionales son requerimientos de calidad tales como la escalabilidad, seguridad, confabilidad, etc. 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 diseo es utilizado para crear planes, modelos y la arquitectura de cmo el software ser implementado. El proceso de diseo despliega especifcaciones tcnicas detalladas que sern utilizadas por el desarrollo del sistema. La salida del proceso de diseo es un conjunto de modelos y especifcaciones tcnicas que proporcionan la direccin a los desarrolladores y otros miembros del equipo durante la actividad de desarrollo de software. La salida del proceso de diseo es ms abstracta que concreta. Por ejemplo, no existen sistemas reales con los cuales pueda interactuar.

Comprender el Desarrollo de Software

La actividad de desarrollo de software involucra la implantacin de diseo creando cdigo de software, bases de datos y otro contenido relacionado. Esta es la actividad donde los requerimientos son implementados en cdigo funcional basado en el diseo 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:

ET

CI

BE

RO

www.pdftron.com

Un arquitecto disea el proyecto del sistema. Esto incluye identifcar los componentes y servicios, su comportamiento y cmo interactan entre s y con el mundo exterior. Un diseador de experiencia del usuario crea la experiencia del usuario del sistema. Los elementos de experiencia del usuario incluyen el diseo de los elementos de la interfaz de usuario (UI), disear la navegacin entre varios formularios, pantallas o pginas, etc. Los desarrolladores escriben el cdigo 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 diseador de experiencia del usuario. Los administradores de bases de datos (DBAs) son responsables de la implementacin y administracin de la base de datos. Los DBAs tambin planean la integridad de datos, seguridad y velocidad. Los escritores tcnicos desarrollan los manuales del sistema y archivos de ayuda que sern entregados junto con la aplicacin. Los desarrolladores de contenido son expertos en la material quienes desarrollan el contenido del sistema. Por ejemplo, si la aplicacin es un sitio web de resea de

Algunos de los participantes importantes en esta actividad son:

ER ICA

Comprender el Proceso de Diseo

80

Leccin 3

pelculas, no es sufciente slo mostrar videos en el sitio, necesita asegurarse que hay sufciente contenido para reunir el inters del usuario.

Comprendiendo las Pruebas de Software


La Prueba de Software verifca que la implementacin coincide con los requerimientos del sistema. 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 aplicacin en accin 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 cdigo ser asignado a un desarrollador para repararlo.

Comprender la Administracin de Liberacin

La actividad de administracin de liberacin es utilizada para administrar el desarrollo, entrega y soporte de liberaciones de software.

ET
EN RESUMEN

Comprender las Pruebas

La prueba de software es el proceso de verifcar el software contra sus requerimientos. La prueba se realiza despus de que la mayora 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 tcnicos y de negocios. Cuando hay diferencia entre

CI

Comprende la administracin del ciclo de vida de aplicacin y sus actividades? USD 3.1

BE

; Listo para la certicacin?

RO

www.pdftron.com
Los participantes principales en las actividades de administracin son:

La administracin de liberacin incluye actividades tales como empaquetado y despliegue del software, administracin de defectos de software y administracin de solicitudes de cambio de software.

Administrador de Liberacin: el administrador de liberacin coordina a varios equipos y unidades del negocio para garantizar la liberacin a tiempo del producto de software. Personal de Operacin: Se aseguran que el sistema sea entregado como se prometi. Esto podra involucrar quemar los DVDs y embarcarlos conforme se reciben las rdenes. O podra ser mantener un sistema de Software como un Service (SaaS) de forma regular. El personal de operacin es tambin responsable de la liberacin de cualquier actualizacin del sistema (con reparadores de errores o nuevas caractersticas). Personal de soporte tcnico: Interactan con clientes y ayudan a resolver sus problemas con el sistema. El soporte tcnico puede generar mtricas valiosas acerca de cules reas del sistema son ms difciles para los usuarios y que posiblemente necesiten ser actualizadas en la prxima versin del software.

ER ICA

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. Las pruebas de software involucran tanto pruebas funcionales y no funcionales. La prueba funcional es probar precisamente los requerimientos funcionales del sistema y las caractersticas que conforman la funcionalidad esencial. Por ejemplo, probar si el usuario puede agregar artculos a un carrito de compras es parte de la prueba funcional para un sitio web de comercio electrnico. 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 mtodos 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

Comprender los Niveles de Prueba

Tome Nota Es importante notar que el proceso de prueba de software puede slo ayudar a encontrar defectos, no garantiza la ausencia de defectos. El software complejo tiene un gran nmero de posibles rutas de ejecucin y muchos parmetros 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 produccin.

ET

CI

BE

La prueba se lleva cabo en varias fases del ciclo de vida del desarrollo de aplicacin. Los Niveles de Prueba especifcan donde tiene lugar la prueba del ciclo de vida. Los niveles de prueba estn defnidos por donde tiene lugar la prueba en el ciclo de vida del desarrollo de software. Estn los siguientes cinco niveles de prueba:

RO

www.pdftron.com
Estas tcnicas se complementan entre s. La prueba de caja negra es ms utilizada para asegurarse que todos los requerimientos son cubiertos. La prueba de caja blanca es utilizada para asegurarse que cada mtodo o funcin tiene sus propios casos de prueba disponibles. Prueba de unidad: La prueba de unidad verifca la funcionalidad de una unidad de cdigo. Por ejemplo, una prueba de unidad puede probar si un mtodo 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 cdigo. La prueba de unidad a menudo utiliza una herramienta automatizada que puede simplifcar el desarrollo de casos y tambin mantiene registro de si una modifcacin de software causa que falle alguna de las pruebas de unidad existentes. Visual Studio tiene soporte integrado para la prueba de unidad. Tambin puede utilizar herramientas de apertura de cdigo tales como NUnit para automatizar pruebas de unidad para cdigo de.NET Framework. Prueba de Integracin: La prueba de integracin prueba la interfaz entre los componentes de software. La prueba de integracin puede ser desempeada incrementalmente conforme los componentes se desarrollan, o puede ser llevada a cabo como un bigbang cuando todos los componentes estn listos para trabajar juntos. El primer mtodo se prefere sobre el segundo puesto que reduce el riesgo e incrementa la confanza en el sistema que se est desarrollando. La prueba de integracin puede tambin involucrar la prueba de interaccin de componentes

La prueba de caja negra trata al software como una caja negra, enfocndose slo 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 cdigo fuente.

ER ICA

Comprender los Mtodos de Prueba

82

Leccin 3

Tome Nota Es mucho ms efectivo y menos costoso encontrar defectos antes que tarde en el ciclo de desarrollo de software.

; Listo para la certicacin? Comprende los distintos mtodos de prueba? USD 3.1

EN RESUMEN

ET
Arreglos

Un arreglo es una coleccin de tems almacenados en una ubicacin de memoria contigua y direccionados utilizando uno o ms ndices. Un arreglo es una estructura de datos muy comn que representa una coleccin 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 homognea 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 estn basados en ceros.

CI

BE

Las estructuras de datos son tcnicas para organizar y almacenar datos en la memoria de la computadora. El cmo la informacin es almacenada afecta la manera en la cual los datos son recuperados y manipulados. Comprender una estructura de datos involucra comprender no solo el patrn de almacenamiento sino tambin conocer los mtodos utilizados para crear, acceder y manipular la estructura de datos. Las estructuras de datos son los bloques de construccin de la mayora de los programas de computadora y permite a los desarrolladores el implementar funcionalidad compleja. La mayora de los frameworks de programacin proporcionan soporte integrado para una variedad de estructuras de datos y mtodos asociados para manipular estas estructuras de datos. En esta seccin aprender algunos tipos distintos de estructuras de datos de manera que est familiarizado con las tcnicas generales para la manipulacin de estructuras de datos.

RO

www.pdftron.com
Comprender las Estructuras de Datos

con un sistema externo. Por ejemplo, si un componente se basa en datos de un servicio Web externo, la prueba de integracin garantiza que el componente est funcionando correctamente con la aplicacin 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 estn funcionando juntos y con cualquier sistema externo. Prueba de aceptacin: Este nivel de prueba a menudo es desempeado por los propios clientes. Generalmente hay dos niveles de pruebas aceptacin previa a la liberacin amplia del producto: prueba alfa y prueba beta. La prueba Alfa es desempeada por un grupo muy limitado de usuarios y es una oportunidad para dar una vista de cerca al producto a los clientes ms importantes y reunir retroalimentacin. Las liberaciones Alfa pueden omitir algunas caractersticas 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 ms amplia de clientes y solicita retroalimentacin. En trminos de funcionalidad, la liberacin beta del software es muy cercana a la liberacin fnal. Sin embargo, los equipos de desarrollo podran estar trabajando en mejorar el rendimiento y reparando algunos defectos conocidos. Prueba de Regresin: Conforme los defectos son reportados y reparados, es importante asegurarse que una reparacin no rompe nada que funcionaba previamente. Esto se lleva a cabo como parte de la prueba de regresin. Con cada nueva reparacin, los testers de software ejecutan una serie de pruebas de regresin para asegurarse que la funcionalidad que se saba que funcionaba aun funciona.

ER ICA

Desarrollo General de Software

83

Representacin Interna
En el siguiente cdigo, 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];

Figura 3-2
Representacin interna de una estructura de datos de un arreglo

ET

CI
Operaciones Comunes

BE
Asignacin Acceso

RO

www.pdftron.com
La variable numbers entonces acta como una referencia a la ubicacin 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 estn 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. Tambin 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 nmero de fla y el nmero de columna al cual pertenece. Tanto el nmero de fla y el nmero de columna son indexados por cero. Por ejemplo, la expresin table[2, 3] se refere a un tem en la tercera fla y en la cuarta columna de un arreglo por el nombre table. El arreglo soporta las siguientes operaciones:

Para trabajar con un arreglo, primero asigne la memoria creando e inicializando un arreglo

ER ICA

Inicialmente, los nmeros variables sern establecidos a null debido a que el arreglo an 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 direccin 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.

84

Leccin 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 cdigo 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

Los arreglos funcionan mejor cuando el nmero de tems en la coleccin est predeterminado y se requiere de acceso rpido a cada tem.

Una cola es una coleccin de tems en la cual el primer tem aadido a la coleccin es el primer en ser removido.

Representacin Interna

ET

CI

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 comnmente conocido como el primero que entra es el primero que sale (FIFO). La capacidad de una cola es el nmero de tems que puede mantener. Sin embargo, conforme los elementos son agregados a la cola, la capacidad es incrementada automticamente. Una cola es una estructura de datos heterognea, lo que signifca que los tems en una cola pueden ser de diferentes tipos de datos.

BE

Con el fn de evitar la reubicacin excesiva de espacio de memoria y permitir una administracin 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 ubicacin 2 en la cola. Ya que la cola es circular, mientras tenga registro de los apuntadores de cabeza y cola, no importa en cual ubicacin 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 recin agregado. Los espacios null en la Figura 3-3 son los lugares vacos en la cola que pueden ser llenados antes de que la cola necesite una reasignacin de memoria.

RO

www.pdftron.com
Colas

En el.NET Framework, puede utilizar la clase ArrayList para aproximarse a los requerimientos de un vector para lograr la homogeneidad y un tamao fjo. Un ArrayList es un tipo de coleccin que puede mantener tems de cualquier tipo de datos y se puede expandir dinmicamente cuando sea necesario. Sin embargo, un ArrayList no es tan rpido como un arreglo.

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 rpida. Sin embargo, los arreglos estn limitados por los requerimientos de homogeneidad y de tamao fjo. Aunque el tamao del arreglo puede ser incrementado, el hacerlo requiere la reasignacin de todos los elementos del arreglo y es una operacin que consume tiempo.

Desarrollo General de Software

85

El .NET Framework proporciona una implementacin 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 programacin que no proporcionan una implementacin 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
Representacin interna de una estructura de datos de una cola

Tome Nota Una versin genrica de la clase Queue est disponible como parte del espacio de nombres de System. Collections.Generic. Esta versin genrica es utilizada para crear una cola de tems que son del mismo tipo de datos.

ET
Pilas

CI
Rendimiento y Uso

Una pila es una coleccin 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

BE

RO

www.pdftron.com
Operaciones Comunes
Una cola soporta las siguientes operaciones comunes: Enqueue: Esta operacin primero verifca si hay sufciente capacidad disponible en la cola para agregar un tem ms. 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 operacin 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 operacin Peek le permite mirar el tem actual en la posicin de la cabeza sin removerlo realmente de la cola. Contains: Esta operacin le permite determinar si existe un tem en particular en la cola. Una cola es una estructura de datos de un propsito especial que es ms adecuada para una aplicacin donde necesita procesar tems en el orden recibido. Algunos ejemplos pueden incluir una cola de impresin, sistema de mensajera 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.

ER ICA

86

Leccin 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 nmero de tems que puede mantener. Sin embargo, conforme los elementos son agregados a la pila, la capacidad es automticamente incrementada. Una pila es una estructura de datos heterognea, lo que signifca que los tems en una pila pueden ser de diferentes tipos de datos.

Representacin Interna

Tome Nota Una versin generic de la clase Stack est disponible como parte del espacio de nombres de System. Collections.Generic. Esta versin genrica 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 recin agregado. Los tems tambin 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.

ET
Listas Enlazadas

Rendimiento y Uso

Una lista enlazada es una coleccin de nodos ordenados de forma que cada nodo contiene un enlace al siguiente nodo en la secuencia.

CI

BE

Una pila es una estructura de datos con propsito especial que es ms 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 administracin de memoria en tiempo de ejecucin, evaluacin de expresin, registro de llamado de mtodo, 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.

RO

www.pdftron.com
Operaciones Comunes
Una pila soporta las siguientes operaciones comunes: Push: La operacin push primero verifca si hay capacidad sufciente disponible en la pila para agregar un tem ms. 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 operacin 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 operacin Peek le permite mirar en el tem actual en la parte superior de la pila sin removerlo realmente de la pila. Contains: La operacin Contains le permite determinar si un tem en particular existe en la pila.

El .NET Framework proporciona una implementacin de la estructura de datos de pila como parte de la clase Stack en el espacio de nombres de System.Collections. En lenguajes de programacin que no proporcionan una implementacin de la pila, puede escribir su propia clase Stack utilizando una estructura de datos parecida al arreglo y simular las operaciones de la pila.

ER ICA

Como una cola, una pila a menudo es implementada como un buffer circular con el fn de evitar la reubicacin de espacio en memoria y para una administracin ms 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.

Desarrollo General de Software

87

Una lista enlazada es una coleccin 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 reubicacin de espacio en memoria para la lista entera cuando se necesita agregar ms tems.

Representacin Interna
En memoria, una lista enlazada puede ser visualizada como una coleccin de nodos, como se muestra en la Figura 3-4.
Representacin interna de una estructura de datos de una lista enlazada sencilla

Representacin de una estructura de datos de una lista doblemente enlazada

ET

CI
Un enlace es una referencia de direccin que apunta al siguiente nodo en la secuencia y el otro enlace es una referencia hacia atrs que apunta de regreso al nodo previo en la secuencia. Como puede imaginar, una lista doblemente enlazada es fcil de atravesar en cualquier direccin. El .NET Framework proporciona una clase LinkedList como parte del espacio de nombres de System.Collections.Generic. Esta clase implementa homogneamente una lista doblemente enlazada de un tipo de datos especfco. Puede escribir sus propias clases para implementar un diferente tipo de implementacin de lista enlazada.

BE

Figura 3-5

RO

www.pdftron.com
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 crculo. En una lista doblemente enlazada, cada nodo contiene dos enlaces, como se muestra en la Figura 3-5.

Cada nodo contiene dos piezas de informacin: 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 dems despus del nodo encabezado. En la Figura 3-4, la cola es la lista enlazada iniciando desde el nodo B.

ER ICA

Figura 3-4

88

Leccin 3

Operaciones Comunes
Una lista enlazada soporta las siguientes operaciones comunes:

Rendimiento y Uso

ET
; Listo para la certicacin? Comprende las estructuras de datos comunes? USD 3.2

CI
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 recuperacin de datos. Sin embargo, para operaciones de insertar y eliminar, las listas enlazadas son extremadamente rpidas: la insercin o eliminacin de un nodo involucra solo cambiar un link. Adems las listas enlazadas no tienen una capacidad mxima despus 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 implementacin ideal. Si en su lugar, los requerimientos llaman con frecuencia operaciones de insert y delete, entonces puede ser ms recomendable utilizar una lista enlazada.

BE

RO

www.pdftron.com
Agregando un nuevo nodo a una lista enlazada

Figura 3-6

ER ICA

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 gustara 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 seccin de datos del nodo. Luego, copiara la seccin de enlace del nodo A a la seccin de enlace del nodo Z de modo que el nodo Z est apuntando al nodo B. Finalmente, necesitar copiar la direccin del nodo Z recin creado a la seccin de enlace del nodo A de manera que el nodo A inicia apuntando al nodo Z. Remove: Similar a la operacin add, la operacin de remove o delete es tambin 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 operacin 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 operacin fnd hasta que alcance el fnal de la lista, lo cual sucede cuando encuentra un enlace null.

Desarrollo General de Software

89

Comprender los Algoritmos de Ordenamiento


EN RESUMEN

Los algoritmos de ordenamiento tales como Ordenamiento de burbuja y el Ordenamiento Rpido (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. 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 das, puede encontrar capacidades de ordenamiento bsicas ya integradas en libreras populares y estructuras de datos. Por ejemplo, en el .NET Framework, puede hacer uso del mtodo Array.Sort para ordenar un arreglo. Sin embargo, an es importante mirar el ordenamiento como una manera de comprender la resolucin de un problema y anlisis de algoritmos. En esta seccin, le echar un vistazo a dos algoritmos de ordenamiento comunes: ordenamiento de burbuja y ordenamiento rpido.

ET
Tabla 3-1

CI
Paso 1.
Primera pasada del ordenamiento de burbuja

BE
Antes 20, 30, 10, 40 20, 30, 10, 40 20, 10, 30, 40 2. 3.

RO
Despus 20, 30, 10, 40 20, 10, 30, 40

www.pdftron.com
El algoritmo de ordenamiento de burbuja utiliza una serie de operaciones de comparacin e intercambio para ordenar una lista en el orden correcto. El ordenamiento de burbuja funciona comparando dos elementos para verifcar si estn fuera de lugar, si lo estn, los intercambia. El algoritmo contina 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 ms pequeos son burbujeados hacia arriba. 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 deberan ser ordenados en orden del ms pequeo al ms grande. El algoritmo de ordenamiento de burbuja intenta solucionar este problema en una o ms 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 ningn elemento, si no hubo intercambios entonces ninguno de los elementos esta fuera de lugar y la lista ha sido completamente ordenada.
Comentarios El algoritmo compara los primeros dos elementos (20 y 30),y ya que estn en el orden correcto, no es necesario el intercambio. El algoritmo compara los siguientes dos elementos (30 y 10),y ya que estn fuera de lugar, los elementos son intercambiados. El algoritmo compara los siguientes dos elementos (30 y 40),y ya que estn en el orden correcto, no es necesario el intercambio. 20, 10, 30, 40

Ordenamiento de Burbuja

ER ICA

90

Leccin 3

Al fnal de la primera pasada, el ordenamiento de burbuja ha desempeado un intercambio y hay una posibilidad que los tems an no estn completamente ordenados. De manera que el ordenamiento de burbuja da otra pasada a la lista.
Tabla 3-2
Primera pasada del ordenamiento de burbuja

Paso 1.

Antes 20, 10, 30, 40 10, 20, 30, 40 10, 20, 30, 40

Despus 10, 20, 30, 40 10, 20, 30, 40 10, 20, 30, 40

Comentarios El algoritmo compara los primeros dos elementos (20 y 10),y como estn fuera de lugar, los elementos son intercambiados. El algoritmo compara los siguientes dos elementos (20 y 30),y ya que estn en el orden correcto, no es necesario el intercambio. El algoritmo compara los siguientes dos elementos (30 y 40),y ya que estn en el orden correcto, no es necesario el intercambio.

2.

3.

Al fnal de la segunda pasada, el ordenamiento de burbuja ha desempeado 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:
Tabla 3-3
Primera pasada del ordenamiento de burbuja

Paso 1.

Antes 10, 20, 30, 40 10, 20, 30, 40

Despus 10, 20, 30, 40 10, 20, 30, 40

3.

Tome Nota

Cuando se utiliza el ordenamiento de burbuja puede asegurarse que un arreglo estar ordenado en un paso menos que el nmero 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.

ET

CI
{ do {

BE
bool swapped; swapped = false; { {

Al fnal de la tercera pasada, el ordenamiento de burbuja no realiz ningn intercambio. Eso garantiza que la lista ahora esta ordenada y el algoritmo puede fnalizar. En C# este algoritmo puede ser expresado por el siguiente mtodo:
staticint[] BubbleSort(int[] numbers)

for (int i = 0; i <numbers.Length - 1; i++) if (numbers[i] > numbers[i + 1]) //swap

RO
10, 20, 30, 40 10, 20, 30, 40

www.pdftron.com
2. El algoritmo compara los siguientes dos elementos (20 y 30),y ya que estn en el orden correcto, no es necesario el intercambio. El algoritmo compara los siguientes dos elementos (30 y 40),y ya que estn en el orden correcto, no es necesario el intercambio.

ER ICA
Comentarios El algoritmo compara los siguientes dos elementos (10 y 20),ya que estn en el orden correcto, no es necesario el intercambio.

Desarrollo General de Software

91

int temp = numbers[i + 1]; numbers[i + 1] = numbers[i]; numbers[i] = temp; swapped = true; } } } while (swapped == true); return numbers; }

Ordenamiento Rpido (QuickSort)

El algoritmo de ordenamiento rpido utiliza las operaciones de particin y comparacin para ordenar los elementos de una lista en el orden correcto. El algoritmo de ordenamiento rpido utiliza la tcnica de divide y conquista para particionar continuamente una lista hasta que el tamao del problema sea realmente pequeo y difcilmente requiera algn ordenamiento. Los siguientes pasos explican esto ms a detalle:

ET
Tabla 3-4

CI
Paso
Visualizando el ordenamiento rpido

BE

1. 2.

RO

Datos a ser ordenados 20, 10 30

www.pdftron.com

Un lista de tamao cero o uno siempre es ordenada por s misma. Para una lista ms grande, puede elegir algn elemento como elemento pivote. Luego particionar la lista de tal manera que todos los elementos ms pequeos que o iguales al elemento pivote van a la lista izquierda y todos los elementos ms grandes que el elemento pivote van a la lista derecha. Ahora la combinacin de la lista izquierda, el elemento pivote y la lista derecha estn ordenadas. El problema ahora se particiona en dos listas ms pequeas, la lista de la izquierda y la lista de la derecha. Ambas listas pueden ser resueltas utilizando la tcnica descrita en las vietas anteriores. Finalmente, unir todas las pequeas listas ordenadas con el fn de crear la lista ordenada completa. La siguiente tabla explica el algoritmo de ordenamiento rpido con un pequeo ejemplo.
Comentarios Inicia con una lista no ordenada y elige un elemento pivote, en este caso 30. 50, 40 Particin de la lista: los tems menores al pivote van a la lista izquierda y los tems ms 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. 50, 10, 30, 20, 40

ER ICA

92

Leccin 3

3.

10

20

30

40

50

En la lista izquierda, 20 es mayor que 10 y 50 es ms grande que 40, por lo tanto ambos van en la lista derecha. Nos quedan listas con solo un nmero, las cuales por denicin estn ordenadas. La lista unida nal es la lista ordenada.

4.

10, 20, 30, 40, 50

staticint Partition (int[] numbers, int left, int right, intpivotIndex) {

intpivotValue = numbers[pivotIndex];

intnewPivot = left; {

for (int i = left; i < right; i++) if (numbers[i] <= pivotValue) temp = numbers[newPivot]; numbers[i] = temp; newPivot++; } } {

ET

CI
}

BE
returnnewPivot;

numbers[newPivot] = numbers[i];

temp = numbers[right];

numbers[right] = numbers[newPivot]; numbers[newPivot] = temp;

En esta tcnica, primero el elemento pivote es movido al fnal del arreglo. Luego todos

RO

www.pdftron.com
numbers[pivotIndex] = temp; // mayor que el pivote // newPivot almacena el indice del primer nmero //mueve el elemento pivote a su posicin //almacenada

numbers[right] = numbers[pivotIndex];

int temp = numbers[right];

// se mueve el elemento pivote al fnal

ER ICA

El defecto principal del algoritmo descrito podra parecer la memoria adicional requerida por la creacin de listas ms pequeas separadas. Sin embargo, crear listas separadas no es necesario. Utilizando una tcnica ligeramente modifcada, el arreglo puede ser particionado, como se muestra en el siguiente cdigo:

Desarrollo General de Software

93

los elementos menores que o iguales al elemento pivote son movidos al frente del arreglo. Finalmente, el elemento pivote es ubicado justo antes del elemento ms grande que l, efectivamente particionando el arreglo. Este algoritmo de particin puede entonces ser utilizado por el ordenamiento rpido para particionar la lista, reducir el problema en problemas ms pequeos y entonces lo resuelve recursivamente:

staticint[] QuickSort(int[] numbers, {

if (right > left) {

intpivotIndex = left + (right - left) / 2; pivotIndex= Partition( //particiona el vector

numbers, left, right, pivotIndex);

Comprende los algoritmos de ordenamiento comunes? USD 3.3

ET

CI

BE

RO
return numbers; }

www.pdftron.com
; Listo para la certicacin? QuickSort( } // ordena la particin derecha numbers, pivotIndex + 1, right);

numbers, left, pivotIndex - 1);

Debido al enfoque de particin, el algoritmo de ordenamiento rpido, es mucho ms rpido que el algoritmo de ordenamiento de burbuja.

QuickSort(

//ordena la particin izquierda

ER ICA

int left, int right)

94

Leccin 3

Resumen de matriz de habilidades


En esta leccin aprendi:

ET

CI

BE

Evaluacin de Conocimientos

Llene los Espacios en Blanco 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 reparacin, los testers de software ejecutan una serie de ______ para asegurarse que la funcionalidad que se saba 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 coleccin de tems que permite operaciones tales que el ultimo tem agregado a la coleccin 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 coleccin de nodos tales que cada nodo contiene un ____ al

RO

www.pdftron.com

La administracin del ciclo de vida de aplicacin 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 despus que la mayora del trabajo de desarrollo est completado. Las estructuras de datos son tcnicas de organizacin y almacenamiento de datos en la memoria de la computadora. Como los datos son almacenados afecta cmo son recuperados y manipulados. Comprender una estructura de datos involucra comprender no solo el patrn de almacenamiento sino tambin los mtodos utilizados para crear, acceder y manipular la estructura de datos. Un arreglo es una coleccin de tems, del mismo tipo de datos, almacenados en ubicaciones de memoria contiguas y direccionadas utilizando uno o ms ndices. Una cola es una coleccin de tems que permite operaciones tales que el primer tem agregado a la coleccin es el primero en ser removido. Una pila es una coleccin de tems que permite operaciones tales que el ultimo tem agregado a la coleccin es el primero en ser removido. Una lista enlazada es una coleccin 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 comparacin e intercambio para ordenar los elementos en una lista en el orden correcto. El algoritmo de ordenamiento rpido utiliza las operaciones de particin y comparacin para ordenar los elementos de una lista en el orden correcto.

ER ICA

Comprender los conceptos bsicos de bases de datos

95

siguiente nodo en la secuencia. 7. La operacin______agrega un tem a la cola mientras que la operacin ______remueve un tem desde una cola. 8. El algoritmo de ordenamiento rpido utiliza las operaciones de ______ y comparacin 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. 10. Tanto la prueba Alfa y la prueba Beta son parte de las pruebas de ______de un sistema.

Eleccin Mltiple

Encierre en un crculo la letra que corresponda a la mejor respuesta.

1. El producto que est desarrollando an no est terminado, pero le gustara liberar el producto a una audiencia de clientes ms amplia para su retroalimentacin y pruebas. Bajo cul de los siguientes niveles de pruebas caer esta actividad? a. b. c. d. Prueba de Integracin Prueba de Sistema Prueba de Aceptacin Prueba de Regresin

ET

CI
a. b. c. d.

BE
a. b. c. d. a. Enqueue b. Dequeue

RO
a. b. c. d. Prueba de Integracin Prueba de Unidad Prueba Alfa Prueba Beta Arreglo Pila Cola Lista enlazada

www.pdftron.com
2. Los testers del software tienen acceso a su cdigo fuente. Los testers necesitan escribir casos de prueba que garanticen que el mtodo retorna valores correctos. En cul de los siguientes niveles de pruebas caer esta actividad? 3. Cul de las siguientes estructuras de datos permite acceso directo a todos sus tems? 4. Cul de las siguientes actividades en el ciclo de vida de aplicacin es utilizado por un arquitecto para crear el proyecto tcnico del sistema? Anlisis de requerimientos Diseo Desarrollo Mantenimiento 5. En su aplicacin, usted est utilizando una estructura de datos de cola para manipular datos. Necesita encontrar cul tem de datos ser procesado despus, pero no desea realmente procesar los tems aun. Cul de las siguientes operaciones de la cola utilizar?.

ER ICA

96

Leccin 3

c. Peek d. Contains 6. Est desarrollando un programa que requiere que registre los llamados de mtodo. Puede invocar solo un mtodo a la vez. Sin embargo, un llamado de mtodo puede a su vez invocar a otros mtodos. Cuando un mtodo termina y retorna el control al mtodo que lo llama. Cul estructura utilizar para registrar estos llamados de mtodo?. a. b. c. d. Cola Arreglo Lista enlazada Pila

7. Est desarrollando un programa que simula una cola de trabajo. A menudo los trabajos se hacen ms rpidos 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 tambin. Cul de las siguientes estructuras de datos es ms adecuada para este requerimiento? a. b. c. d. Arreglo Cola Lista enlazada Pila

ET

CI
a. b. c. d. a. b. c. d.

BE

a. b. c. d.

10. Est desarrollando un programa que desempea operaciones de insertar y eliminar frecuentes en los datos. Su requerimiento tambin dicta una capacidad para acceder a registros previos y siguientes cuando el usuario presiona el botn de previo o siguiente. Cul de las siguientes estructuras de datos se ajustar mejor a sus requerimientos?. Arreglo Lista enlazada circular Lista enlazada Lista doblemente enlazada

11. Est desarrollando un programa que desempea 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 solucin debe requerir tan poca memoria como sea posible. Cul de las siguientes estructuras de datos se ajustar mejor a sus requerimientos?. Arreglo Lista enlazada circular Lista enlazada Lista doblemente enlazada

RO
{2, 4, 1, 4} {2, 3, 4, 4} {2, 4, 1, 2} {4, 3, 1, 4}

www.pdftron.com
a. int[] numbers = {2, 3, 1, 4}; b. numbers[2] = 4; 9. Cules sern los contenidos del arreglo despus de que la segunda sentencia es ejecutada?.

8. Usted escribe el siguiente cdigo en su programa:

ER ICA

Comprender los conceptos bsicos de bases de datos

97

Evaluacin 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. Cmo escribira tal programa?. Proyecto 3-2: Utilizando Colas Est escribiendo un programa que utiliza dos colas. Los datos en cada cola ya estn en orden ascendente. Necesita procesar el contenido de ambas colas de tal manera en que la salida sea impresa en la pantalla ordenada. Cmo escribira tal programa?.

Evaluacin de Competencia

Proyecto 3-3: Utilizando Pilas

ET

CI

BE

RO

www.pdftron.com
Proyecto 3-4: Utilizando Listas Enlazadas 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. Cmo escribira tal programa?.

Est escribiendo un programa que utiliza dos pilas. Los datos en cada pila ya estn en orden descendiente. Necesita procesar el contenido de ambas pilas de tal manera que la salida sea impresa en la pantalla en orden ascendente. Cmo escribira tal programa?.

ER ICA

98

Leccin 3

ET

CI

BE

RO

www.pdftron.com

ER ICA

Leccin 4

Comprender las Aplicaciones Web


Matriz de Dominio de Objetivos
Habilidad Tecnolgica Comprender el Desarrollo de una Pgina Web Comprender el Desarrollo de una Aplicacin ASP.NET Comprender el IIS Web Hosting Comprender el Desarrollo de Servicios Web Descripcin del Dominio de Objetivo Comprender el Desarrollo de una Pgina Web Nmero del Dominio del Objetivo 4.1 4.2

Comprender el desarrollo de una aplicacin Web del Microsoft ASP.NET Comprender el Web hosting Comprender los servicios Web

ET

CI

BE

Como desarrollador de una gran empresa necesita desplegar aplicaciones que se puedan utilizar a travs de redes como la World Wide Web. La aplicacin ser desplegada en un servidor Web de Windows pero sus usuarios utilizarn mltiples sistemas operativos y navegadores Web.

RO

www.pdftron.com
Hojas de estilo en cascada (CSS) Lenguaje de Marcado de Hipertexto (HTML) Servicios de Informacin de Internet (IIS) JavaScript SOAP Administracin de estado Servicio Web Lenguaje de Defnicin de Servicio Web (WSDL)

Trminos Clave

ER ICA
4.3 4.4

100

Leccin 4

Comprender el Desarrollo de una Pgina Web


EN RESUMEN

Una pgina Web es un documento que es servido a travs de la World Wide Web (WWW) y que se puede mostrar a travs de un navegador Web. Las pginas 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. La World Wide Web (tambin conocida como WWW o la Web) es un sistema de documentos de hipertexto interconectados y otros recursos tales como imgenes y video que se pueden acceder va internet. Tecnologas mltiples trabajan juntas para hacer posible la WWW. Discutiremos dos de estas tecnologas en esta seccin:

Protocolo de Transferencia de Hipertexto (HTTP) Lenguaje de Marcado de Hipertexto (HTML)

HTTP es el protocolo de comunicacin fundamental utilizado por la World Wide Web. HTTP proporciona el lenguaje comn que los servidores Web y los navegadores Web utilizan con el fn de comunicarse.

Tome Nota

Los trminos Internet y la Web son comnmente 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.

ET

CI

BE

Cuando un navegador enva una solicitud HTTP para una pgina Web a un servidor Web (tanto la pgina y el servidor Web son identifcados por una URL), el servidor prepara una respuesta HTTP para el navegador. Esta respuesta especifca el contenido y presentacin de la pgina Web.

El lenguaje que el servidor Web y el navegador Web utilizan para describir una pgina 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 imgenes, videos y otros objetos sean referenciados en un archivo para crear pginas Web multimedia. HTML puede incrustar scripts tales como JavaScript que afecta el comportamiento de las pginas Web. HTML tambin puede ser utilizado para incluir hojas de estilo en cascada (CSS) para defnir el formato y presentacin del contenido de una pgina. El navegador Web lee el cdigo HTML e interpreta los resultados en la pantalla. Una pgina Web puede contener hipervnculos a otros recursos tales como imgenes y videos. Cada uno de estos recursos es identifcado por su propia URL. Con el fn de interpretar completamente una pgina, el navegador har solicitudes HTTP adicionales para obtener esos recursos y desplegarlos como parte de la pgina Web. En las siguientes secciones, aprender ms acerca de varios componentes que conforman una pgina Web tales como HTML, CSS y JavaScript.

RO

www.pdftron.com

HTTP utiliza el Localizador de Recurso Uniforme (URL) para identifcar nicamente y direcciona cada recurso en Internet. Una URL es esencialmente una direccin 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. Tambin notar el protocolo HTTPS (HTTP Seguro) en uso para asegurar aplicaciones donde los datos necesitan ser cifrados antes de que puedan ser transmitidos a travs de la red. La siguiente parte de la URL es la direccin 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.

ER ICA

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 pgina Web. El propsito de HTML es proporcionar un lenguaje estndar para describir pginas Web de forma que diferentes navegadores Web pueden comprenderlo y desplegar las pginas 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 mayora de los navegadores le permiten visualizar el cdigo fuente HTML de la pgina. HTML consiste de un conjunto de etiquetas (tambin llamadas elementos HTML) que defnen la estructura y contenido de una pgina. Por ejemplo, la etiqueta <html> especifca el inicio del documento HTML. Las etiquetas HTML siempre son rodeadas por parntesis 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 <html>es </html>. Una pgina HTML consta de dos partes: un encabezado y un cuerpo. El encabezado es encerrado dentro de las etiquetas <head>y</head>y es utilizado para proporcionar un ttulo al documento y vnculos a tems externos que pueden ser utilizados en la pgina, tales como archivos CSS y archivos de JavaScript. El cuerpo es encerrado dentro de las etiquetas <body>y</body> y es utilizado para proporcionar la estructura complete y contenido de la pgina que ser desplegada dentro del navegador Web. Este es un ejemplo de una etiqueta que despliega una imagen:
<img height=400px width=400px alt=Mimas Cassini src=

Tome Nota HTML est basado en texto. HTML utiliza etiquetas para incrustar imgenes, audio, video y otros muchos tipos de multimedia y contenido interactivo en la pgina.

ET
Tome Nota Esta leccin no cubre todos los elementos HTML. Para aprender ms sobre elementos HTML, busque Elementos HTML en el MSDN.

CI

BE

RO
Saturns moon</a>

www.pdftron.com
Tome Nota Note que el documento HTML no contiene la imagen en s. La etiqueta img especca la URL de la imagen, la cual el navegador descarga separadamente y la interpreta como parte de la pgina. http://upload.wikimedia.org/wikipedia/commons/b/bc/Mimas_ Cassini.jpg/>

La etiqueta <img> especifca atributos adicionales. Por ejemplo, el atributo src especifca la ubicacin 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:

<a href=http://en.wikipedia.org/wiki/Mimas_(moon)>

Aqu, <a> es la etiqueta de anclaje, la cual es utilizada para crear hipervnculos en la pgina Web. El atributo href especifca la URL objetivo y el texto dentro de los parntesis angulares es el que es mostrado como un enlace. Tome los pasos en el siguiente ejercicio para crear un documento HTML.

ER ICA

102

Leccin 4

Trabajar con HTML


PREPRESE. Para crear un documento HTML, haga lo siguiente: 1. Abra el Visual Studio. Crear un Nuevo proyecto basado en la plantilla de aplicacin web vaca de ASP.NET. Nombre al proyecto TrabajandoConHTML y nombre la solucin Leccion04. 2. Seleccione Proyecto, Agregar Nuevo tem, y seleccione la platilla de Pagina HTML. Nombre el archivo default.htm. 3. Remplace el cdigo por defecto en el archivo HTML con el siguiente cdigo: <head> </head> <body> <h1>Mimas Cassini</h1> <html xmlns=http://www.w3.org/1999/xhtml> <title>Saturns Moon</title>

La etiqueta img es utilizada para mostrar la imagen de <a href=http://en.wikipedia.org/wiki/Mimas_(moon)> Saturns moon</a>: <br /> <img height=400px width=400px

</html>

Figura 4-1

ET

CI

Una pgina HTML simple con una imagen y un hipervnculo.

BE

4. Seleccione Depurar y despus Inicie la Depuracin (o presione F5). La pginadefault.htm se abrir en un navegador Web. Note que la salida se parece a la gura 4-1, donde puede ver las etiquetas <img>y<a>en accin.

RO

www.pdftron.com
alt=Mimas Cassini </body> src=http://goo.gl/3BeK/>

ER ICA

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 informacin separada del cdigo HTML. Esta separacin hace ms fcil el actualizar la apariencia de su sitio Web. Visual Studio incluye herramientas para construir y pre visualizar sus hojas de estilo. CSS es un lenguaje que describe toda la informacin acerca de mostrar una pgina Web. Cuando se interpreta pginas 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 sern aplicados al encabezado H1. CSS le permite separar la presentacin de una pgina Web de su contenido. Esta separacin 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 podra ser abrir un editor HTML y modifcar cada archivo en el sitio Web que utiliza la etiqueta H1. Esto podra ser una solucin aceptable si el sitio Web tiene solo una o dos pginas, pero y si el sitio web tiene un gran nmero de pginas, digamos 50 o 100? Imagine cambiar manualmente cada pgina. Si tal cambio es solicitado muy a menudo, el proceso de desarrollo Web ser muy tedioso y propenso a errores (Cmo garantiza que no omiti ninguna etiqueta?). Afortunadamente, con CSS puede poner toda la informacin de estilo en un archivo separado y conectar todas las pginas 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 pginas en el sitio Web.

Tome Nota Cuando se utiliza efectivamente, CSS es una gran herramienta para incrementar la consistencia del ancho del sitio y la posibilidad de mantenimiento.

Diseo de Hojas de Estilo en Cascada

ET

CI

BE
body { } div

RO
<head runat=server> <style type=text/css>

www.pdftron.com
El lenguaje CSS est basado en texto y es fcil de leer y entender. A continuacin se muestra un ejemplo de una pgina HTML que defne estilo CSS:
<html xmlns=http://www.w3.org/1999/xhtml> <title>Comprendiendo CSS</title> font-family: Verdana; font-size: 9pt;

ER ICA

104

Leccin 4

{ color:Red; } .block {

border-color: Blue; border-width: thin;

border-style: outset; font-family: Arial; } </style> </head> <body>

<div>Sample DIV text</div>

ET

CI
</body> </html>

BE

<div class=block>Sample DIV text with block class</div> <span class=block>Sample SPAN text with block class</span>

Las defniciones CSS deben estar dentro del elemento <style> y son defnidos bajo el elemento <head>. 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 debera utilizar la fuente Verdana con tamao 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 pgina de arriba en el navegador, se parecer a lo mostrado en la Figura 4-2.

RO
Sample body text <br />

www.pdftron.com

ER ICA

background-color: Yellow;

Comprender las Aplicaciones Web

105

Figura 4-2
Formateando HTML con hojas de estilo en cascada

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 interpretacin fnal. En el ejemplo previo, el archivo CSS fue escrito dentro de HTML. Una aproximacin ms 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.

CI
{ } div { } {

ET

BE
body .block

RO
font-size: 9pt; color:Red;

www.pdftron.com
Trabajar con Archivos CSS
PREPRESE. Para escribir el archivo CSS y enlazar a un archivo HTML, haga lo siguiente: 1. Agregue un Nuevo proyecto basado en la plantilla de aplicacin web vaca de ASP.NET a la solucin Leccion04. Nombre el proyecto ComprendiendoCSS. 2. Seleccione Proyecto y despus Agregar nuevo elemento. Seleccione la plantilla de Hoja de Estilo. Nombre el archivo estilos .css. Remplace el cdigo por defecto en el archivo con el siguiente cdigo: font-family: Verdana;

background-color: Yellow;

ER ICA

106

Leccin 4

border-color: Blue; border-width: thin; border-style: outset; font-family: Arial; } 3. Seleccione Proyecto, despus Agregar nuevo elemento y seleccione la plantilla de Pgina HTML. Nombre el archivo default.htm. Remplace el cdigo por defecto en el archivo con el siguiente cdigo: -//W3C//DTD XHTML 1.0 Transitional//EN

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> <html xmlns=http://www.w3.org/1999/xhtml> <head> <link rel=STYLESHEET

type=text/css href=styles.css /> <title>Understanding CSS</title> </head> <body>

<div class=block>Sample DIV text with block class</div>

<span class=block>Sample SPAN text with block class</span> </body> </html>

Tome Nota

Cuando el CSS es almacenado en archivos separados, el navegador del usuario descargar y los almacenar localmente. Aunque pueden ser utilizados en mltiples paginas sin ninguna necesidad de volver a descargarlos, esto reduce la transferencia de datos innecesaria.

ET

CI

BE

4. Seleccione Depurar y despus Inicie la depuracin (o presione F5). La pgina default.htm se abrir en un navegador Web. Note que la salida es similar a la Figura4-2. <link rel=STYLESHEET type=text/css href=styles.css />

El elemento HTML <link>es utilizado para enlazar el archivo CSS con la pgina HTML:

El elemento <link> siempre se pone dentro del elemento <head>. El atributo href especifca la direccin del archivo CSS a utilizar. Para enlazar mltiples pginas con un archivo CSS, necesitar poner el elemento <link>dentro de cada pgina HTML. Visual Studio incluye un diseador de estilo integrado que puede ayudarle en el diseo 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. Tambin puede modifcar el estilo seleccionado actualmente seleccionando Styles, Build Style option. Esta opcin abre el editor de Modify Style como se muestra en la Figura 4-3.

RO

www.pdftron.com
Sample body text <br /> <div>Sample DIV text</div>

ER ICA

<!DOCTYPE html PUBLIC

Comprender las Aplicaciones Web

107

Figura 4-3
El cuadro de dilogo Modify Style

Tome Nota

Muchos sitios Web modernos proporcionan una experiencia altamente interactiva que rivaliza con aplicaciones de escritorio. Tales aplicaciones pueden ser desarrolladas utilizando la programacin Ajax. Ajax es una abreviatura para XML y JavaScript Asncrono. Ajax utiliza extensivamente el JavaScript con el n de proporcionar aplicaciones Web sensibles. ElASP.NET AJAX framework le permite implementar la funcionalidad de Ajax en pginas Web de ASP.NET.

ET

CI

BE

RO

www.pdftron.com
JavaScript es un lenguaje de scripting de lado del cliente que se ejecuta dentro de un navegador Web para ayudar a crear pginas Web mucho ms interactivas de lo que es posible utilizando slo HTML plano. JavaScript es utilizado en millones de pginas Web y es soportado por todos los navegadores Web modernos. JavaScript es utilizado para hacer sitios Web ms sensibles y pginas Web ms interactivas. JavaScript lleva a cabo esto ejecutando el cdigo 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, direccin de correo electrnico y nmero de telfono. Un requerimiento comn es desempear validacin de datos para garantizar que los campos introducidos no estn vacos y que la direccin de correo electrnico y el nmero de telfono estn en el formato requerido. Sin JavaScript, necesitara entregar el formato al servidor, el cual desempear la validacin de datos y retornar los resultados al cliente. Esta transmisin de informacin toma tiempo y degrada la experiencia del usuario. Una solucin de JavaScript puede desempear este tipo de validacin de datos dentro del navegador, proporcionando una mejor experiencia al usuario. El cdigo de JavaScript se ejecuta localmente dentro del navegador Web (el cliente), como opuesto al servidor Web. Aunque JavaScript tambin algunas veces es llamado como lenguaje de scripting del lado del cliente y con JavaScript es llamado programacin del lado del cliente. El comportamiento del tiempo de ejecucin de la ejecucin de cdigo del lado del cliente depende del navegador que lo ejecuta. Sin embargo, es independiente de la tecnologa del servidor o la estructura de programacin. Para la ejecucin de JavaScript en un navegador Web, no importa si la pgina Web fue generada por ASP.NET o PHP o si la pgina est siendo servida por un servidor Web de Windows o un servidor Web de Linux. JavaScript y el lenguaje de programacin C# utilizan una sintaxis infuida por el lenguaje de programacin C. sin embargo, JavaScript y C# son muy diferentes en como son ejecutados.

Comprender JavaScript

ER ICA

108

Leccin 4

JavaScript es ejecutado por el navegador Web. El cdigo de JavaScript es interpretado en lugar de ser compilado, como en el caso de C#. Todo el cdigo de JavaScript debe ser ubicado dentro del elemento <script>. El elemento <script> esta generalmente dentro del elemento <head>, aunque no se requiere. Se le permite tener mltiples elementos <script> dentro de una pgina. Para ver el JavaScript en accin, tome los siguientes pasos:

Trabajar con JavaScript

1. Agregar un nuevo proyecto basado en la plantilla de aplicacin web vaca de ASP.NET a la solucin Leccion04. Nombre el proyecto ComprendiendoJavaScript.

2. Seleccione Proyecto, despus Agregar nuevo elemento y seleccione la plantilla de Pagina HTML. Nombre el archivodefault.htm. Remplace el cdigo por defecto en el archivo con el siguiente cdigo: <!DOCTYPE html PUBLIC

<script type=text/javascript language=javascript>

username = prompt(Introduzca su Nombre); message = Hola, + username + . Su nombre tiene ;

CI
</head> <body> </body> </html>

ET

BE
else </script>

nameLen = username.length; if (nameLen > 5) message = message + mas de ; message = message + menos de ; message = message + exactamente ; message = message + 5 caracteres.; alert(message); else if (nameLen < 5)

RO

www.pdftron.com
<html xmlns=http://www.w3.org/1999/xhtml> <head> <title>Comprendiendo JavaScript</title>

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd>

-//W3C//DTD XHTML 1.0 Transitional//EN

ER ICA

PREPRESE. Para comenzar a trabajar con JavaScript, realice las siguientes tareas:

Comprender las Aplicaciones Web

109

3. Seleccione Depurar y despus Inicie la depuracin (o presione F5). La pgina default.htm se abrir en un navegador Web. Note que el cdigo de JavaScript le pide que introduzca su nombre. El siguiente dilogo muestra un mensaje basado en la longitud del nombre introducido, como se muestra en las Figuras 4-4 y 4-5.

Figura 4-4
Peticin al Usuario de JavaScript

Figura 4-5
Cuadro de dilogo de JavaScript

CI
Tome Nota Aunque todos los navegadores modernos soportan el JavaScript, pueden ser congurados para desactivar el JavaScript. Algunos usuarios desactivan el JavaScript. Puede utilizar un elemento <noscript>para mostrar un mensaje especco a los usuarios quienes no estn ejecutando JavaScript.

ET

BE
</script>

RO

www.pdftron.com
Como con los archivos CSS, tambin puede poner su cdigo de JavaScript en un archivo separado y enlazar el archivo de JavaScript con el archivo HTML utilizando el elemento script, como se muestra abajo:
<script src=SampleScript.js>

Aqu el archivoSampleScript.js contiene todo el cdigo 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 cdigo de JavaScript en cada pgina, puede almacenar el cdigo en una pgina central en lugar de repetirlo en todas las pginas. Cuando es hora de modifcar el cdigo de JavaScript, tendr que cambiar el cdigo slo en un lugar. Mejora del rendimiento: Almacenar cdigo en un archivo separado reduce el tamao de la pgina Web. Tambin, 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 cdigo de JavaScript. Incluso los controles ASP.NET, como el control TreeView o los controles de validacin, utiliza JavaScript donde es posible interpretar contenido dinmicamente.

ER ICA

110

Leccin 4

Programacin 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 programacin 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 aplicacin de Formularios de Windows y el cdigo de JavaScript que se ejecuta dentro del navegador Web. Los programas del lado del cliente no consumen recursos del servidor.

EN RESUMEN

ET

CI

ASP.NET es la parte del .NET Framework que le permite desarrollar formularios Web programables y servicios Web. Como con cualquier aplicacin de .NET Framework, puede desarrollar aplicaciones ASP.NET en cualquier lenguaje que sea compatible con el tiempo de ejecucin 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 comunicacin entre el navegador Web y el servidor Web. Estas clases estn organizadas en el espacio de nombres System.Web. Un proceso en tiempo de ejecucin, tambin conocido como el proceso trabajador de ASP.NET (aspnet_wp.exe), que maneja la solicitud Web para recursos de ASP. NET.

BE

Comprender el desarrollo de una aplicacin de ASP . NET

En un nivel alto, una aplicacin Web de ASP.NET es ejecutada a travs de una serie de solicitudes y mensajes de respuesta de HTTP entre los navegadores cliente y los servidores Web. El proceso ocurre como sigue:

RO

www.pdftron.com
ASP.NET le permite crear aplicaciones que se ejecutan completamente en el servidor o aplicaciones Ajax hibridas que proporcionan interfaces rpidas sensible mientras que almacenan la mayora de la informacin en la Web.

Comprende cmo utilizar HTML, JavaScript y CSS para el desarrollo de una pgina Web? USD 4.1

; Listo para la certicacin?

Las aplicaciones hibridas que utilizan tanto programacin del lado del cliente y del lado del servidor se han hecho cada vez ms populares. Puede disear 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 programacin del lado del servidor y cdigo del lado del cliente para crear aplicaciones Web interactivas y altamente sensibles.

ER ICA

Por otro lado, la programacin 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 programacin del lado del servidor. La programacin del lado del servidor utiliza una tecnologa del lado del servidor tal como ASP.NET, PHP, o Ruby on Rails.

Comprender las Aplicaciones Web

111

1. El usuario solicita un recurso del servidor Web tecleando una URL en el navegador Web. El navegador enva 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 pgina Web para el usuario.

Este proceso est representado en la Figura 4-6.

ET

CI

La clase Page proporciona algunos mtodos y propiedades importantes que pueden controlar cmo una solicitud de pgina es procesada. Para la lista completa de mtodos y propiedades, mire http://msdn. microsoft.com/en-us/ library/system.web. ui.page.aspx.

Ciclo de vida y modelo de evento de una pgina ASP.NET

Durante su ejecucin una pgina ASP.NET pasa a travs de muchas etapas diferentes de procesamiento, cada una de estas etapas va a travs de pasos de procesamiento especfcos tales como inicializacin, carga, cdigo manejador de evento en ejecucin e interpretacin. Conforme una pgina se ejecuta, va a travs de varias etapas de procesamiento. La pgina tambin dispara algunos eventos con los cuales puede adjuntar un manejador de evento

BE

RO

www.pdftron.com
Tome Nota 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. 8. Cuando el assembly se ejecuta, toma los servicios de varias clases en la librera de clases del .NET Framework para llevar a cabo su trabajo y genera mensajes para el cliente solicitante. 9. El proceso trabajador de ASP.NET colecta las respuestas generadas por la ejecucin de la pgina Web, crea un paquete de respuesta y lo pasa al proceso aspnet_isapi.dll. 10. Aspnet_isapi.dll reenva el paquete de respuesta a IIS, el cual a su vez pasa la respuesta a la maquina cliente solicitante.

5. Cuando el Servicio de Informacin de Internet (IIS) recibe una solicitud HTTP, utiliza la extensin del nombre del archivo para determinar qu programa de interfaz de programacin de aplicacin (ISAPI) del servidor ejecutar para procesar la solicitud. Cuando la solicitud es para una pgina ASP.NET, pasa la solicitud al ISAPI DLL capaz de manejar las solicitudes para pginas de ASP.NET, el cual es aspnet_isapi.dll.

Antes de la ejecucin, cada pgina ASP.NET es convertida en una clase. Esta clase deriva la mayora de su funcionalidad de la clase System.Web.UI.Page. La clase Page proporciona algunas propiedades importantes tales como Request, Response, Session y Server.

Como desarrollador, estar interesado en conocer lo que sucede tras bambalinas cuando un servidor Web ejecuta una solicitud para una pgina ASP.NET. La siguiente lista describe el proceso:

ER ICA
Solicitud HTTP Respuesta HTTP

112

Leccin 4

para ejecutar su cdigo personalizado en distintas etapas de procesamiento de la pgina. Los desarrolladores de ASP.NET deben tener una buena comprensin del ciclo de vida de una pgina de manera que pueden escribir cdigo que es ejecutado exactamente en la etapa deseada del procesamiento de la pgina. La tabla 4.1 enlista las diferentes etapas del ciclo de vida y sus eventos asociados.
Tabla 4-1
Etapas importantes en el ciclo de vida de una pgina ASP.NET

Etapa Solicitud de pgina

Significado Cuando una solicitud de pgina es recibida, se inicia el ciclo de vida de la pgina. En este punto, ASP.NET decide si la pgina ser fcilmente servida desde la cach o si necesita ser analizada y compilada. En esta etapa, se determina si la solicitud es una devolucin de datos o una nueva solicitud. Algunas propiedades de la pgina tales como Request, Response, IsPostBack y UICulture son establecidas en esta etapa.

Eventos Asociados

Inicio

Tome Nota En un formulario de contacto tpico, introduzca informacin y presione el botn de enviar. Cuando enva esta pgina, la pgina puede procesar los datos enviados para tomar alguna accin tal como el almacenamiento de los datos en una base de datos o enviar un correo electrnico. En muchos casos, la pgina principal es mostrada nuevamente con una conrmacin del envo del formulario. Ocurre una devolucin de datos cuando la informacin es publicada a la misma pgina Web para el procesamiento. Una devolucin de datos es distinta a la carga inicial de la pgina debido a que la pgina recibe informacin adicional como datos de formulario como parte del postback de la pgina.

Inicializacin

RO

www.pdftron.com
Carga

Durante la etapa de inicializacin, todos los controles en la pgina son inicializados y se hacen disponibles. Un manejador de evento para el evento Init es el mejor lugar para el cdigo que desea que se ejecute antes de seguir con el procesamiento de la pgina.

ET

CI

BE
Manejador de evento Postback Pre interpretacin Interpretacin

Si la solicitud es una devolucin de datos, esta etapa es utilizada para restaurar las propiedades de control con informacin desde el estado de vista y el estado de control. Un mtodo que maneja el evento Load es el mejor lugar para almacenar el cdigo de inicializacin para cualquier control especco para esta pgina.

Si la solicitud es una devolucin 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. PreRender

Esta fase seala que la pagina esta por interpretar sus contenidos. Un manejador de evento para el evento PreRender es la ltima oportunidad para modicar la salida de la pgina antes de que sea enviada al cliente. En esta etapa, la pgina llama al mtodo Render para cada control y rellena la respuesta que ser enviada al navegador.

ER ICA
PreInit Init Load

Comprender las Aplicaciones Web

113

Descarga

En esta etapa, la respuesta es enviada al cliente y se desempea la limpieza de la pgina. Como parte de la limpieza, las propiedades tales como Request y Response son descartadas.

Unload

Cuando desea manejar un evento, debe escribir el cdigo que registra al mtodo para manejar el evento (tambin llamado manejador de evento) con el evento. Esto se hace generalmente utilizando el patrn de registro de evento comn a travs 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 mtodo que maneja al evento. Sin embargo, ASP.NET proporciona seis mtodos especiales que son reconocidos como manejadores de evento por defecto y que no necesitan el cdigo de registro. Estos son llamados especialmente mtodos Page_Init, Page_Load, Page_DataBind, Page_PreRender y Page_Unload. Estos mtodos son tratados como manejadores de evento para los eventos correspondientes expuestos por la clase page. Este evento automtico es controlado por el atributo AutoEventWireup de la directiva @Page. Por defecto el valor de este atributo es True, lo cual signifca que estos mtodos llamados especialmente son automticamente enlazados con sus eventos correspondientes.

ET

CI
{

BE
{

RO
using System; namespace PageEvents

www.pdftron.com
Comprender el ciclo de vida de una pgina ASP.NET
PREPRESE. Para ver cuntos eventos diferentes de la clase Page son ejecutados, desempee lo siguiente. 1. Crear un nuevo proyecto basado en la plantilla de aplicacin web vaca de ASP.NET a la solucin Leccion04. Nombre el proyecto como PageEvents. 2. Seleccione Proyecto, Agregar nuevo elemento. Seleccione la plantilla de Formulario Web. Nombre el archivo WebForm1.aspx. 3. En la etiqueta HTML para la pgina (WebForm1.aspx), asegrese que el atributo AutoEventWireup para la directiva @Page est establecida como True: <%@ Page Language=C# AutoEventWireup=true CodeBehind=WebForm1.aspx.cs Inherits=PageEvents.WebForm1 %> 4. Haga clic derecho en la ventana de cdigo y seleccione Ver Cdigo desde el men para cambiar a la vista de cdigo. Remplace el cdigo en el archivo de cdigo subyacente (WebForm1.aspx.cs) con el siguiente cdigo: public partial class WebForm1 : System.Web.UI.Page

ER ICA

114

Leccin 4

protected void Page_Load (object sender, EventArgs e) { Response.Write (Mensaje desde Page_Load. <br/>); } protected void Page_Init {

(object sender, EventArgs e) Response.Write }

(Mensaje desde Page_Init. <br/>);

protected void Page_PreRender {

ET

Los caracteres<% y %>son utilizados para incrustar bloques de cdigo en la etiqueta HTML de una pgina. El cdigo dentro de estos bloques de cdigo incrustado es ejecutado durante la etapa de interpretacin de la pgina. En los bloques de cdigo incrustado, la sintaxis <%=expression>es utilizada para resolver una expresin y retornar su valor en el bloque. Por ejemplo, el siguiente bloque de cdigo:
<i><% = DateTime.Now.ToShortDateString() %></i>

CI
} }

BE
{ }

5. Seleccione Depurar y despus Inicie la depuracin (o presione F5). La pgina default.htm se abrir en un navegador Web. Se mostrar la salida de la pgina en la Figura 4-7.

Cuando se ejecuta, visualizar la fecha actual en formato de itlicas: 12/01/2010

RO
Response.Write

www.pdftron.com
Response.Write (Mensaje desde Page_PreRender. <br/>); } protected void Page_PreInit (object sender, EventArgs e) (Mensaje desde Page_PreInit. <br/>);

(object sender, EventArgs e)

ER ICA

Comprender las Aplicaciones Web

115

La directiva @Page especifca varios atributos que controlan como el ASP.NET interpreta una pgina. Por ejemplo, en este ejercicio, los atributos de la directiva @Page especifcan:


Figura 4-7
Formulario Web visualizando el orden de la ejecucin de evento para una pgina ASP.NET

C# es el lenguaje de programacin para esta pgina Web (Language=C#) Los eventos de la pgina son auto-wired (AutoEventWireup=true) El nombre del archivo de cdigo que contiene la clase asociada con la pagina (CodeBehind=WebForm1.aspx.cs) El nombre de la clase para la pgina a heredar (Inherits=PageEvents. WebForm1)

La administracin de estado es importante para las aplicaciones Web debido a la naturaleza de desconexin de HTTP. Hay tcnicas tanto del lado del cliente y del lado del servidor disponible para la administracin de estado.

ET

CI

Administracin de estado del lado del cliente


Las tcnicas del lado del cliente utilizan cdigo HTML y las capacidades del navegador Web para almacenar informacin de estado en la computadora cliente. Las siguientes tcnicas son utilizadas para almacenar informacin de estado en el lado del cliente: Cadenas de consulta: el estado es administrado poniendo los datos en la URL de la pgina 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 (televisin): http://www.bing.com/search?q=television. Para recuperar el valor en la clave en una pgina ASP.NET, utilice la expresin Request. QueryString[q]. Aqu la QueryString es una propiedad del objeto Request.

BE

RO

www.pdftron.com
Administracin de estado
La administracin de estado es el proceso de administrar el estado para una pgina Web a travs de viajes. Los valores de las variables y controles colectivamente conforman el estado de una pgina Web. ASP.NET proporciona algunas tcnicas para preservar la informacin de estado a travs de devoluciones de datos de la pgina. Estas tcnicas pueden ser ampliamente categorizadas como del lado del cliente o del lado del proveedor, dependiendo de donde son consumidos los recursos.

ER ICA

116

Leccin 4

QueryString obtiene la coleccin de todas las variables de cadena de consulta. Cookies: Las Cookies son pequeos paquetes de informacin que son almacenados por el navegador Web localmente en la computadora del usuario. Las Cookies son utilizadas comnmente para almacenar las preferencias del usuario y contenidos de carritos de compra y para darles una experiencia de navegacin personalizada en visitas subsecuentes a la pgina Web. La clase HttpCookie representa una cookie en su cdigo, el siguiente cdigo le muestra cmo establecer una cookie en una computadora cliente:
HttpCookie cookie =

cookie.Expires = DateTime.Now.AddMinutes(10); Response.Cookies.Add(cookie);

El siguiente cdigo muestra cmo leer una cookie:

if (Request.Cookies[Name] != null) {

CI

ET

BE

RO

www.pdftron.com

name =Request.Cookies[Name].Value;

Campos ocultos: Los campos ocultos contienen informacin que no es visualizada en la pgina pero que son parte del cdigo de la pgina HTML. Los campos ocultos pueden ser creados utilizando el elemento HTML <input type=hidden. El control de servidor HTML ASP.NET HtmlInputHidden tambin mapea a este elemento HTML. Estado de Vista: Es el mecanismo que utiliza el ASP.NET para administrar el estado de los controles a travs de devoluciones de datos de pgina. Para facilitar esto, cuando ASP.NET ejecuta una pgina, rene los valores de todos los controles que no son de devolucin de datos que estn modifcados en el cdigo y los formatea en una sola cadena codifcada. Esta cadena es almacenada en una campo oculto en un control llamado VIEWSTATE. Por defecto, el ViewState est habilitado en una aplicacin ASP.NET. Puede deshabilitar la ViewState en el nivel de un control estableciendo la propiedad EnableViewState del control a false:
<asp:GridView ID=GridView1 runat=server EnableViewState=false />

Puede deshabilitar el estado de vista en el nivel de pgina estableciendo el atributo EnableViewState de la directiva de pgina a false:
<%@ Page EnableViewState=false %>

Puede deshabilitar el estado de vista en el nivel de aplicacin agregando la siguiente lnea en el archivo web.confg:
<pages enableViewState=false />

ER ICA

new HttpCookie(Name, Bob);

Comprender las Aplicaciones Web

117

Administracin de estado del lado del servidor


La administracin de estado del lado del servidor utiliza recursos del servidor para almacenar la informacin de estado. Utilizando tcnicas del lado del servidor se elimina la posibilidad de que un usuario tratara de hackear el cdigo del lado del cliente o de leer los datos de la sesin. Sin embargo, el almacenar y procesar informacin de la sesin en el servidor incrementa la carga del servidor y requiere de recursos del servidor adicionales para servir las pginas Web.
Tome Nota El estado de sesin puede ser congurado para almacenarse en otro servidor o un Servidor SQL. Esto es muy til cuando una solicitud del usuario puede ser procesada por uno de los muchos servidores en una granja Web- Una granja Web es una coleccin de servidores Web utilizados colectivamente para servir un sitio Web. Las granjas Web son necesarias para el soporte de trco en sitios Web populares.

ASP.NET soporta la administracin de estado del lado del servidor en dos niveles:

ET

CI

BE

RO
<title></title>

www.pdftron.com
El siguiente ejercicio muestra cmo utilizar el estado de sesin. Este ejercicio utiliza dos formatos Web. El WebForm1.aspx obtiene un nombre de usuario y lo almacena en el estado de sesin. El formato entonces transfere al usuario al WebForm2.aspx, el cual recupera el nombre del usuario desde la sesin.

Utilizar el Estado de Sesin

PREPRESE. Para utilizar el estado de sesin, haga lo siguiente: 1. Agregue un nuevo proyecto basado en la plantilla de aplicacin web vaca de ASP.NET a la solucin Leccion04. Nombre el proyecto UtilizandoEstadoSesion. 2. Seleccione Proyecto, Agregar nuevo elemento. Seleccione la plantilla de Formulario Web. Nombre el archivo WebForm1.aspx 3. Cambie la etiqueta HTML, del WebForm1.aspx a lo siguiente: <%@ Page Language=C# AutoEventWireup=true CodeBehind=WebForm1.aspx.cs Inherits=UtilizandoEstadoSesion.WebForm1 %> <html xmlns=http://www.w3.org/1999/xhtml> <head runat=server>

ER ICA

Estado de Sesin: Una aplicacin de ASP.NET crea una sesin nica para cada usuario que manda una solicitud para una aplicacin. ASP.NET identifca distintivamente cada una de estas sesiones enviando un SessionId nico a la URL solicitada. Este SessionId es enviado como una cookie o es incrustado en la URL, dependiendo de la confguracin de la aplicacin. La habilidad de nicamente identifcar y relacionar solicitudes puede ser utilizada para almacenar datos especfcos de la sesin que tambin se conoce como estado de sesin de la aplicacin Web. Un ejemplo comn del estado de sesin es para almacenar el contenido de los carritos de compra para usuarios conforme navegan a travs de la tienda basada en Web. Estado de Aplicacin: el estado de aplicacin es utilizado para almacenar datos que son usados a los largo de la aplicacin. El estado de aplicacin puede ser accedido fcilmente a travs de la propiedad Application de la clase Page. Esta propiedad proporciona acceso al objeto HttpApplicationState que almacena el estado de aplicacin como una coleccin de pares de valores clave.

118

Leccin 4

</head> <body> <form id=form1 runat=server> <div> <asp:Label ID=Label1 runat=server

<asp:TextBox ID=TextBox1 runat=server /> <br /><br />

<asp:Button ID=Button1 runat=server

Text=Submit onclick=Button1_Click /> </div> </form> </body> </html>

4. Haga clic derecho en la ventana del cdigo y seleccione Ver Cdigo desde el men contextual para cambiar al archivo de cdigo subyacente (WebForm1.aspx.cs). Remplace el cdigo en este archivo con el siguiente cdigo: using System;

ET

CI
{

BE
{ {

namespace UsingSessionState

RO

www.pdftron.com
public partial class WebForm1 : System.Web.UI.Page protected void Page_Load (object sender, EventArgs e) if (Session[Name] != null) Response.Redirect(WebForm2.aspx);

ER ICA

Text=Introduzca su nombre: /><br />

Comprender las Aplicaciones Web

119

} protected void Button1_Click (object sender, EventArgs e) { Session.Add(Name, TextBox1.Text);

} } }

5. Agregue un nuevo formulario Web al proyecto (WebForm2.aspx). Cambie la etiqueta de la pgina a lo siguiente: <%@ Page Language=C# AutoEventWireup=true CodeBehind=WebForm2.aspx.cs

ET

CI

BE
<body> <div> </div> </form> </body>

RO
<title></title> </head>

www.pdftron.com
Inherits=UsingSessionState.WebForm2 %> <html xmlns=http://www.w3.org/1999/xhtml> <head runat=server> <form id=form1 runat=server> <asp:Label ID=Label1 runat=server /><br /> <asp:Button ID=Button1 runat=server Text=Limpiar Sesin onclick=Button1_Click />

ER ICA

Response.Redirect(WebForm2.aspx);

120

Leccin 4

</html> 6. Cambie el cdigo en el archivo de cdigo subyacente (WebForm2.aspx.cs) en el formulario a lo siguiente: using System; namespace UsingSessionState {

: System.Web.UI.Page {

protected void Page_Load(

object sender, EventArgs e) {

CI
} } }

ET

BE
{

7. Seleccione Depurar y despus Inicie la depuracin (o presione F5). La pginaWebForm1. aspxse abrir en un navegador Web. Vera la pgina Web mostrada en la Figura 4-8.Introduzca un nombre y haga clic en el botn enviar. Esta pgina almacena el nombre introducido en el estado de sesin.

RO
else }

www.pdftron.com
Label1.Text = String.Format( Bienvenido,{0}, Session[Name]); Response.Redirect(WebForm1.aspx); protected void Button1_Click( object sender, EventArgs e) Session.Remove(Name); Response.Redirect(WebForm1.aspx);

if (Session[Name] != null)

ER ICA

public partial class WebForm2

Comprender las Aplicaciones Web

121

8. Ser transferido al WebForm2.aspx mostrado en la Figura 4-9. WebForm2.aspx recupera el nombre de usuario desde el estado de sesin. En la misma ventana del navegador, de forma que est dentro de la misma sesin, intente acceder al WebForm1.aspx. Notar que mientras la sesin contenga una entrada de nombre, usted ser re direccionado al WebForm2.aspx. Presione el botn de Limpiar Sesin. Esto limpia la sesin y usted es transferido al WebForm1. aspx. Figura 4-8
La pgina almacena el nombre introducido al estado de sesin

Figura 4-9
La pgina recupera el nombre visualizado desde el estado de sesin

ET

CI
EN RESUMEN

Comprender el IIS Web Hosting


El Web hosting involucra el confgurar el servidor web con las confguraciones y archivos de cdigo correcto de modo que los usuarios remotos pueden tener acceso satisfactoriamente a la aplicacin Web. Las aplicaciones de ASP.NET deben ser desarrolladas en un servidor Web de Servicios de Informacin de Internet (IIS). IIS es una parte integral de los sistemas operativos de Windows Server y proporciona toda la funcionalidad para hospedar sitios Web. Implementar una aplicacin de ASP.NET no es complicado ya que ASP.NET proporciona la implementacin xcopy. Lo que signifca que todo lo que necesita hacer para implementar un sitio Web de ASP.NET a un servidor Web es copiar archivos a las ubicaciones correctas. Puede copiar archivos utilizando el comando xcopy de Windows o utilizando una aplicacin del Protocolo de Transferencia de Archivos (FTP).

BE

Comprende las bases del desarrollo de una aplicacin Web en Microsoft ASP.NET? USD 4.2

RO

www.pdftron.com
; Listo para la certicacin?

ER ICA

122

Leccin 4

Comprender los Servicios de informacin de Internet


Servicios de Informacin de Internet (IIS) es un servidor Web para hospedar una aplicacin Web en el sistema operativo Windows. Un Servidor Web IIS utiliza conceptos de sitios, aplicaciones y directorios virtuales. Puede utilizar IIS para hospedar mltiples sitios Web y compartir informacin con usuarios a travs del Internet o una intranet. IIS utiliza una relacin jerrquica entre sitios, aplicaciones y directorios virtuales como bloque de construccin bsico para hospedar contenido en lnea.

Figura 4-10
Interfaz del Administrador de Servicios de Informacin de Internet (IIS)

Un Sitio Web es un contenedor de aplicaciones y directorios Virtuales. Un directorio virtual es un pequeo alias que se mapea a un directorio fsico en un servidor Web. Un sitio web es un contenedor de aplicaciones y directorios virtuales y puede ser accedido utilizando una direccin de un sitio Web. Por ejemplo, la URL www.northwind.com podra apuntar a un sitio Web que tenga muchos directorios virtuales tales como rdenes y cuentas, cada uno de los cuales puede ser accedido en combinacin con la direccin del sitio Web tal como www.northwind.com/ordersywww.northwind.com/account. Un servidor Web nunca expone la direccin fsica actual y la ubicacin de los archivos al mundo externo. En lugar de eso, utiliza un sistema de alias que mapea a los directorios fsicos. Estos alias tambin son llamados directorios virtuales. Los directorios virtuales se han convertido en parte de la URL, como se vio en el ejemplo anterior. Cuando IIS recibe una solicitud para una tal URL, mapea el directorio virtual a la ubicacin fsica de los archivos.

ET

CI

Creacin de directorios virtuales y Sitios Web

BE

RO

www.pdftron.com
Algunas aplicaciones Web complejas podran necesitar que implemente archivos DLL al Cache de ensamble global (GAC). En tal situacin, usted podra necesitar crear un paquete instalador de Windows para implementar en lugar de utilizar xcopy o FTP.

Tome Nota

ER ICA

IIS puede ser administrado utilizando el IIS Manager tool, el cual es parte del sistema operativo Windows. El IIS Manager tool, como se muestra en la Figura 4-10, proporciona una interfaz de usuario grafca para confgurar sitios Web, aplicaciones y directorios virtuales. La pantalla en la Figura 4-10 es de una computadora ejecutando Windows 7. La interfaz de usuario del IIS Manager es diferente en Windows XP.

Comprender las Aplicaciones Web

123

Para crear un directorio virtual utilizando el IIS manager, siga los siguientes pasos:
1. Abra el IIS Manager. Para abrir el IIS Manager en Windows 7, teclee IIS en el men inicio y luego haga clic en el acceso directo Administrador de los Servicios de Informacin de Internet (IIS). Para acceder al IIS Manager en Windows XP, vaya a Inicio, Ejecutar, teclee inetmgr y haga clic en el botn Aceptar. 2. Expanda los nodos en el panel izquierdo (referencia en la Figura 4-10) y seleccione el nodo de Default Web Site. 3. Haga clic derecho en el nodo Default Web Site y seleccione la opcin Add Virtual Director y desde el men de accesos directos. En Windows XP, el comando ser New, Virtual Directory. En este punto aparecer un asistente para la creacin del directorio virtual en su pantalla. Le pedir la informacin que necesita en el siguiente paso. 4. En el dialogo Add Virtual Directory, proporcione un Alias y una ruta fsica, como se muestra en la Figura 4-11 y haga clic en OK. Figura 4-11
Cuadro de dilogo Add Virtual Directory

ET
; Listo para la certicacin? Comprende las bases del Web Hosting con el Servidor Web de IIS? USD 4.3

CI

Implementar Aplicaciones Web


Implementacin de un solo sitio Web es llevada a cabo copiando los archivos a la ubicacin correcta. Para instar un sitio Web complejo podra necesitar utilizar un Instalador de Windows. Hay dos mejores manearas en las cuales puede implementar archivos a un sitio Web: Utilizando xcopy o FTP: Muchas aplicaciones Web y servicios Web solo requieren que los archivos sean copiados en el servidor Web. No requieren ninguna accin especial como reiniciar los servicios IIS, registrar los componentes en el Registro de Windows, etc. La implementacin de xcopy o FTP es ideal para tales casos. Utilizar un Instalador de Windows: Un Instalador de Windows puede desempear un nmero de acciones personalizadas durante el proceso de implementacin y por lo tanto, puede ser utilizado para implementar sitios Web muy complejos que requieren la creacin automtica de directorios virtuales, servicios de reinicio, registrar componentes, etc.

BE

RO

www.pdftron.com

ER ICA

124

Leccin 4

Comprender el desarrollo de Servicios Web


EN RESUMEN

Un servicio Web es un componente de software que puede ser accedido a travs de la red utilizando protocolos de red estndar tales como HTTP. Los servicios Web son descritos utilizando el Lenguaje de Descripcin de Servicios Web (WSDL). Los Servicios Web proporcionan una manera para interactuar con objetos de programacin ubicados en computadoras remotas. Lo que hace especial a los servicios Web es que toda la comunicacin entre los servidores de servicio Web y sus clientes es a travs de mensajes de Lenguaje de Etiquetado Extensible (XML) transmitidos a travs del Protocolo de Transferencia de Hipertexto (HTTP). Utilizando estas tecnologas estndar, los objetos remotos pueden ser publicados y consumidos por otros sistemas no compatibles. Por ejemplo, un objeto remoto escrito en C# y publicado como un servicio Web en un servidor Web de Windows puede ser procesado por cdigo Java ejecutndose en una mquina de Linux.

SOAP es el protocolo para el intercambio estructurado de informacin en una comunicacin de servicio Web entre dos computadoras remotas. SOAP es el protocolo que defne como las computadoras remotas intercambian mensajes como parte de una comunicacin de servicio Web. SOAP se basa en XML en su formato de mensaje y uso de HTTP para transmisin de mensajes. El utilizar SOAP para comunicarse tiene dos benefcios mayores. Primero, ya que los mensajes estn formateados como XML, son ms fciles de entender para sistemas no compatibles. Segundo, ya que estos mensajes son transmitidos a travs de HTTP penetrante, pueden alcanzar normalmente cualquier maquina en Internet sin ser bloqueados por algn cortafuegos. Este es un paquete tpico de SOAP enviado desde un cliente a un servicio Web:
<?xml version=1.0 encoding=utf-8?> <soap:Envelope xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/> <soap:Body>

ET

CI

BE

RO

www.pdftron.com

Protocolo Simple de Acceso a Objetos (SOAP) Lenguaje de Descripcin de Servicios Web (WSDL)

SOAP

Antes de entrar en detalles de la creacin y consumo de servicios Web, nos familiarizaremos con dos tecnologas clave que hacen posibles los servicios Web:

ER ICA

Comprender las Aplicaciones Web

125

<ToLower xmlns=http://northwindtraders.com> <inputString>SAMPLE STRING</inputString> </ToLower> </soap:Body> </soap:Envelope>

Puede notar que algunos de los elementos obvios de este paquete SOAP: El paquete consiste de un envelope que contiene un cuerpo, cada uno de ellos es identifcado con una etiqueta XML. El cuerpo consiste del nombre del mtodo que ser invocado. En este paquete SOAP. El nombre del mtodo es ToLower y toma un solo parmetro por el nombre de inputString y un valor dado.

Este es un paquete de respuesta desde el servidor:

<?xml version=1.0 encoding=utf-8?>

ET

CI
WSDL

WSDL es un lenguaje basado en XML para describir servicios Web. WSDL signifca Lenguaje de Descripcin de Servicios Web y proporciona un estndar por el cual un servicio Web puede decirle al cliente qu tipo de mensajes aceptar y qu resultados sern retornados. Un archivo WSDL acta como la interfaz publica de un servicio Web e incluye la siguiente informacin: Los tipos de datos que puede procesar Los mtodos que expone Las URLs a travs de las cuales estos mtodos pueden ser accedidos

BE

RO
<ToLowerResponse </ToLowerResponse> </soap:Body> </soap:Envelope>

www.pdftron.com
xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/> <soap:Body> xmlns=http://northwindtraders.com> <ToLowerResult>sample string</ToLowerResult>

Un servicio Web puede existir sin un archivo WSDL, pero debe saber el mensaje exacto SOAP entrante que el servicio Web espera antes de que lo pueda utilizar.

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

En el paquete de respuesta, el elemento XML de ToLowerResponse es el resultado de la invocacin del mtodo en el servidor.

Tome Nota

<soap:Envelope

ER ICA

126

Leccin 4

Crear Servicios Web


En esta seccin aprender como crear y publicar un servicio Web. En esta seccin, aprender como crear un servicio Web simple llamado TextWebService que expone dos mtodos, ToLower y ToUpper. Estos mtodos respectivamente convierten una cadena dada a letras minsculas y maysculas. Aunque es simple, este cubre todos los aspectos de la creacin de un servicio Web que puede involucrar una lgica de procesamiento ms compleja.

PREPRESE. Para crear un servicio Web, haga lo siguiente:

1. Agregue un nuevo proyecto basado en plantilla de aplicacin web vaca de ASP.NET a la solucin Leccion04. Nombre el proyecto TextWebService como se muestra en la Figura 4-12. Figura 4-12
Seleccione la plantilla de aplicacin web vaca de ASP.NET para Servicios Web

ET

CI
{

BE
[WebMethod]

2. Seleccione Proyecto, Agregar nuevo elemento desde el men. Seleccione la plantilla de Servicio Web como se muestra en la Figura 4-13.Nombre el servicio WebTextWebService.asmx. 3. Cambie el cdigo por defecto para la clase TextWebService en el archivo TextWebService. asmx.cs como se muestra debajo: [WebService(Namespace = http://northwindtraders.com/)] [WebServiceBinding(ConformsTo = WsiProfles.BasicProfle1_1)] public class TextWebService : System.Web.Services.WebService

RO

www.pdftron.com

public string ToUpper(string inputString)

ER ICA

Creando un Servicio Web

Comprender las Aplicaciones Web

127

{ return inputString.ToUpper(); } [WebMethod] public string ToLower(string inputString) Tome Nota Puede utilizar el nombre de dominio de su compaa como parte del espacio de nombre (namespace) para distinguir sus servicios Web publicados de otras compaas. {

} }

4. Seleccione Depurar despus Generar TextWebService para compilar el proyecto y garantizar que no hay errores. El servicio Web ahora est listo para utilizarse.

Figura 4-13

ET

CI

Seleccione la plantilla de Servicio Web para crear un servicio Web

BE

RO

www.pdftron.com
Cada mtodo que es expuesto desde el servicio Web necesita tener un atributo WebMethod. Los mtodos marcados con los atributos WebMethod son tambin conocidos como mtodos Web. Los dos mtodos utilizados en este ejercicio convierten una cadena dada en letras maysculas y minsculas, respectivamente. Para probar un servicio Web simple tal como el TextWebService creado arriba, todo lo que necesita es un navegador Web. Puede seleccionar mtodos para invocar, pasar parmetros y revisar los valores de retorno desde dentro del navegador, como se muestra en el siguiente ejercicio.

En el cdigo de arriba hay algunas cosas importantes para notar. Cada clase es expuesta como un servicio Web XML que necesita tener un atributo WebService. El atributo WebService tiene una propiedad Namespace que establece por defeco ahttps://tempuri. org/. Ya que es correcto tener este valor en el tiempo de desarrollo, el valor de namespace debera ser cambiado antes de que el servicio Web sea publicado. Cada servicio Web debe tener un namespace nico con el fin de que las aplicaciones cliente se distingan de otros servicios Web.

ER ICA

return inputString.ToLower();

128

Leccin 4

Probar un Servicio Web


PREPRESE. Para probar un servicio Web, desempee las siguientes tareas: 1. Abra el proyecto TextWebService que cre en el ejercicio previo. Seleccione Depurar y despus Inicie la depuracin. Un navegador es lanzado mostrando la pgina de prueba del servicio Web, como se muestra en la Figura 4-14. Figura 4-14

Una pgina de prueba de un mtodo Web

ET

CI

BE

Figura 4-15

RO

www.pdftron.com
2. Haga clic en el enlace de Descripcin del servicio en la pgina de prueba. Es capaz de ver el WSDL para este servicio Web. Haga clic en el botn para regresar a la pgina de prueba. 3. Todos los mtodos Web aparecen como un enlace a la pgina de prueba. Para invocar un mtodo Web, haga clic en su enlace. Se mostrar una pgina para probar el mtodo Web seleccionado, como se muestra en la Figura 4-15.

ER ICA

Pgina de prueba de un servicio Web

Comprender las Aplicaciones Web

129

4. La pgina de prueba del mtodo Web muestra el SOAP y otros mensajes que el servicio Web comprende. Tambin contiene un formato que le permite introducir parmetros del mtodo y probar el mtodo Web. Introduzca una cadena de entrada de prueba y haga clic en el botn invocar. Se mostrar el resultado en la siguiente pgina, como se muestra en la Figura 4-16. Figura 4-16
Valor de retorno desde un servicio Web

5. Pruebe invocar ambos mtodos y cierre el navegador Web.

ET

CI

BE

RO

www.pdftron.com
Consumir Servicios Web
En esta seccin, aprender cmo acceder a servicios Web desde una aplicacin cliente. Ya aprendi cmo invocar un servicio Web desde la pgina de prueba de un servicio Web. En esta seccin, aprender cmo llamar un servicio Web por medio de programacin desde dentro de una aplicacin cliente de ASP.NET.

Acceder a un Servicio Web desde una aplicacin cliente

PREPRESE. Para acceder a un servicio Web desde una aplicacin cliente, desempee los siguientes pasos: 1. Agregue un proyecto nuevo a la solucin Leccion04 basado en la plantilla de aplicacin web vaca de ASP.NET. Nombre el proyecto TextWebServiceClient. 2. Haga clic derecho en el nombre del proyecto en la ventana del Explorador de Soluciones y seleccione la opcin Add Web Reference desde el men. En el cuadro de dilogo Add Web Reference, introduzca la URL del servicio creado en el ejercicio previo y presione Enter (puede copiar la URL desde la barra de direcciones del navegador). Esta accin carga la lista de operaciones disponibles en el servicio Web, como se muestra en la Figura 4-17. 3. En el cuadro de dilogo Web Reference, cambie el nombre de la referencia Web a textWebServicey haga clic en el botn Add Reference. Esto agregar una referencia Web al proyecto, como se muestra en la Figura 4-18. 4. Cambie el cdigo en Default.aspx a lo siguiente: <%@ Page Title=Home Page Language=C# AutoEventWireup=true CodeBehind=Default.aspx.cs

Cuando da clic en el botn Invocar, la pgina de prueba construye los paquetes SOAP apropiados para ser procesados por el servicio Web y luego visualice los resultados retornados desde el servicio Web.

ER ICA

130

Leccin 4

<html>

Inherits=TextWebServiceClient._Default %>

<head><title>TextWebService Client </title></head> <body>

<form runat=server> <p>

<h2>Formulario de prueba para TextWebService</h2> <asp:TextBox ID=TextBox1

<br />

Text=Introduzca texto />

<asp:Button ID=Button1 runat=server

Text=Invocar Mtodos de Servicio onclick=Button1_Click /> </p> <p>

<asp:Label ID=toUpperLabel

ET
Tome Nota Cuando invoca un mtodo de servicio Web, tiene la eleccin de utilizar un mtodo sincrnico o asincrnico. Podra desear utilizar el mtodo asincrnico para incrementar la sensibilidad de la aplicacin cliente.

CI
{ }

BE
</p> </form> </body> </html>

5. Abra la Vista de Diseo de Default.aspx y de doble clic en el control Button. Esto agrega cdigo para el manejador de evento Click. Modique el cdigo como se muestra debajo: protected void Button1_Click(

RO
var webService = toLowerLabel.Text = toUpperLabel.Text =

www.pdftron.com
<asp:Label ID=toLowerLabel runat=server <br /> Text=Label ForeColor=Green /> ToUpper method: runat=server Text=Label ForeColor=Green /> object sender, EventArgs e) new textWebService.TextWebService(); webService.ToLower(TextBox1.Text); webService.ToUpper(TextBox1.Text);

ToLower method:

<strong>Results:</strong><br />

ER ICA

runat=server

Comprender las Aplicaciones Web

131

6. Seleccione Depurar y despus Inicie la depuracin para ejecutar la aplicacin Web. Introduzca algn texto de ejemplo y haga clic en el botn Invocar Mtodos de Servicio. Ver los resultados de TextWebService como se muestra en la Figura 4-19. Figura 4-18
Nodo de referencias Web del proyecto

ET
; Listo para la certicacin? Comprende las bases del desarrollo de servicios Web? USD 4.4

CI
En el ejercicio de arriba, cuando agrega una referencia Web, Visual Studio crea un proxy local que representa el servicio remoto. El proxy simplifca la comunicacin con el servicio Web aceptando mensajes, reenvindolos al servicio Web y regresndolos desde el servicio Web. Puede utilizar fcilmente este proxy para crear objetos del servicio Web e invocar mtodos. Como resultado, trabajar con objetos remotos es similar a trabajar con objetos locales. Cuando crea una referencia Web, Visual Studio lee el archivo WSDL apropiado para determinar cules clases y mtodos estn disponibles en el servidor remoto. Cuando llama a un mtodo en un objeto remoto, el .NET Framework traduce su llamado y lo resuelve en mensajes SOAP y los transmite sin intervencin de su parte.

BE

RO

www.pdftron.com
Figura 4-19
Nodo de referencias Web del proyecto

ER ICA

132

Leccin 4

Resumen de Habilidades
En esta leccin aprendi:

ET

CI

Evaluacin de Conocimiento
Completar los espacios en blanco Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios proporcionados. 1. En HTML la fcha de anclaje (<a>), el atributo _________ especifca la URL objetivo. 2. Puede poner cdigo CSS en un archivo separado y enlazarlo a la pgina Web utilizando el elemento HTML _________. 3. El cdigo de JavaScript en una pgina Web es ejecutado en el_________. 4. Puede utilizar un elemento _________ para visualizar un mensaje especfco a los usuarios cuando el navegador no est ejecutando JavaScript.

BE

RO

www.pdftron.com

Una pgina Web es un documento que es servido a travs de la World Wide Web (WWW) y puede ser visualizado por un navegador Web. El lenguaje de Marcado de Hipertexto (HTML) es el lenguaje utilizado por los servidores y navegadores Web para describir una pgina Web. Las hojas de estilo en cascada (CSS) le permiten almacenar y formatear informacin separadamente del cdigo HTML. Esta separacin le facilita actualizar su sitio Web. Visual Studio incluye herramientas para construir y pre visualizar sus hojas de estilo. JavaScript es un lenguaje de scripting del lado del cliente que se ejecuta dentro de un navegador Web para ayudar a crear pginas Web mucho ms interactivas de lo que es posible utilizando solo HTML plano. Tcnicas de administracin de estado del lado del cliente tales como cadenas de consulta, cookies, campos ocultos y estado de vista utilizando HTML y las capacidades del navegador Web para almacenar informacin de estado en la computadora cliente. Tcnicas de administracin de estado del lado del servidor tales como estado de sesin y estado de aplicacin utilizan recursos de servidor para la administracin de estado. Los Servicios de Informacin de Internet (IIS) es un servidor Web para hospedar aplicaciones Web en el sistema operativo Windows. Un servidor Web IIS utiliza los conceptos de sitios, aplicaciones y directorios virtuales. Los servicios Web le proporcionan una manera para invocar objetos remotos utilizando tecnologas estndar tales como XML y HTTP. SOAP es el protocolo que defne como las computadoras remotas intercambian mensajes como parte de la comunicacin del servicio Web. SOAP se basa en XML para su formato de mensaje y utiliza HTTP para la transmisin del mensaje. WSDL proporciona un estndar por el cual un servicio Web puede decirle a su cliente cuales tipos de mensajes aceptar y qu resultados sern retornados.

ER ICA

Comprender los conceptos bsicos de bases de datos

133

5. Puede deshabilitar el estado de vista en el nivel de pgina estableciendo el atributo _________de la directiva Page a false en la pgina ASP.NET. 6. El estado de_________ es utilizado para almacenar informacin que es utilizada globalmente a lo largo de una aplicacin, como opuesto al estado de_________ que almacena informacin para una sesin de usuario. 7. Una aplicacin Web es accedida utilizando un nombre de _________ en lugar de un nombre de carpeta fsica. 8. Debe marcar las clases con el atributo _________ para exponerlos como un servicio Web.

10. SOAP se basa en _________ como su formato de mensaje y utiliza _________ para la transmisin del mensaje. Opcin Mltiple

Encierre en un crculo la letra que corresponda a la mejor respuesta. 1. Escriba el siguiente cdigo en su pgina Web:
<head>

ET

CI
a. b. c. d.

BE
} </style> </head> <body> </body> </html>

RO
div { <div style=

www.pdftron.com
<title>Pagina de Ejemplo</title> <style type=text/css> font-family: Verdana; font-size: 9pt; font-weight: bold; font-size: 12pt;> Texto de Ejemplo</div>

2. Cul sera el estilo para el texto visualizado como parte del elemento<div>? font-family: Verdana; font-weight: bold; font-size: 12pt; font-family: Verdana; font-weight: bold; font-size: 9pt; font-family: Verdana; font-size: 12pt; font-family: Verdana; font-size: 9pt;

<html>

ER ICA

9. Todos los mtodos en una clase de servicio Web, solo los mtodos marcados con los atributos _________ son expuestos como mtodos de servicio Web.

134

Leccin 4

3. Est desarrollando un sitio Web de mapas que permite a los usuarios explorar interactivamente el mapa utilizando acciones tales como panning and zooming. Desea que el sitio Web sea responsivo y accesible en la mayora de los navegadores Web modernos. Sin embargo, desea que los usuarios instalen plug-ins adicionales con el fn de utilizar su sitio Web. Cul de las siguientes tecnologas debera utilizar para visualizar los mapas? a. b. c. d. HTML. Tecnologa de programacin del lado del Servidor tal como ASP.NET. Adobe Flash. JavaScript.

a. b. c. d.

Cadenas de consulta Cookies Estado de Vista Sesin

ET

CI
a. b. c. d.

BE
a. b. c. d.

6. Est desarrollando un formulario Web para visualizar la informacin del clima. Cuando un usuario solicita el formulario Web, el formulario necesita hacer alguna inicializacin para cambiar la apariencia del formulario y asignar valores a algunos controles. Dnde debera poner el cdigo? En el manejador de evento PreInit de la clase Page. En el manejador de evento Init de la clase Page. En el manejador de evento Load de la clase Page. En el manejador de evento PreRender de la clase Page.

7. Desea visualizar valores de las expresiones de C# en una pgina ASP.NET. Cul de los siguientes tipos de bloque de cdigo debera utilizar para encerrar la expresin? <script runat=server></script> <script></script> <%= %> <form></form>

RO

www.pdftron.com
a. b. c. d. Cookies Estado de vista Estado de vista con cifrado Sesin

5. Est desarrollando una aplicacin Web para un banco en lnea. Su aplicacin permite a los usuarios acceder a la informacin de sus cuentas y transacciones desde dentro de un navegador Web. Cuando un usuario inicia sesin en la aplicacin Web, desea que la aplicacin muestre el nombre de usuario y el balance de cuenta en todas las pginas de la aplicacin hasta que el usuario cierra sesin. Tambin desea que la aplicacin sea segura de usuarios maliciosos. Cul de las siguientes tcnicas de administracin de estado debera utilizar?

ER ICA

4. Su pgina ASP.NET contiene una variable de nivel de pgina del tipo Customer. Desea preservar el valor de esta variable a travs de devoluciones de datos de pgina (postbacks), pero no necesita esta variable en ninguna otra pgina en la aplicacin. Cul de las siguientes tcnicas de administracin de estado es la mejor manera de llevar a cabo esto?

Comprender los conceptos bsicos de bases de datos

135

8. Ha desarrollado una aplicacin de timesheet que ser utilizada por todos los trabajadores en su compaa. Ha utilizado ASP.NET para desarrollar esta aplicacin y la ha implementado en el servidor Web de la compaa. Qu deben instalar todos los trabajadores de la compaa en sus computadoras antes de que puedan acceder a la aplicacin de timesheet? a. b. c. d. .NET Framework Redistributable .NET Framework Software Development Kit Visual Studio Navegador Web

a. b. c. d.

Instalar un mejor procesador en el servidor Web. Instalar un mejor procesador en la computadora cliente. Actualizar a una conexin de Internet ms rpida. Utilizar llamados asincrnicos para invocar al servicio Web.

10. Ha creado un servicio Web de ASP.NET que convierte de una moneda a otra. Uno de los mtodos en su servicio Web est defnido con este cdigo:
public double Convert(double amount, string from, string to) {

CI
a. b. c. d.

ET

BE

RO
}

www.pdftron.com
// Cdigo para desarrollar la conversin de moneda

11. Los usuarios del servicio Web reportan que pueden establecer una referencia al servicio Web pero el mtodo Convert no est disponible para ellos. Cul podra ser el problema? a. b. c. d. El archivo .asmx del servicio Web no est disponible en el servidor Web. La clase del servicio Web no est marcada con el atributo WebService. El mtodo Convert no est marcado con el atributo WebMethod. Los servicios Web pueden solo exponer mtodos y retornar valores de texto.

12. Est trabajando en dos proyectos de Visual Studio. El primer proyecto es un servicio Web que retorna un objeto DataSet perteneciente al espacio de nombre System.Data. El segundo proyecto accede al servicio Web creado por el primer proyecto. Cul proyecto en este caso requiere una referencia al espacio de nombre de System.Data? El proyecto del Servicio Web. El proyecto cliente que accede al servicio Web. Tanto el proyecto cliente y el proyecto del servicio Web. Ni el proyecto cliente ni el proyecto del servicio Web.

ER ICA

9. Su aplicacin cliente llama a un servicio Web que desempea clculos complejos que consumen tiempo. El usuario se queja que mientras los resultados estn siendo retornados la interfaz de usuario se congela momentneamente. Qu enfoque debera tomar para resolver este problema?

136

Leccin 4

Evaluacin de Competencia
Proyecto 4-1: Utilizando JavaScript y HTML Est desarrollando una pgina Web que proporciona una interfaz de usuario responsiva. Visualiza una imagen en la pgina. Cuando el usuario mueve el ratn sobre la imagen, la imagen original es remplazada por una nueva imagen. Cuando el ratn sale del rea de la imagen, la imagen original es visualizada nuevamente. Necesita llevar a cabo este requerimiento utilizando cdigo del lado del cliente de JavaScript y HTML. Cmo creara una pgina Web que funcione como se describe arriba? Proyecto 4-2: Utilizando cadenas de consulta

ET

CI

La clase proxy generada por Visual Studio para un servicio Web incluye mtodos para la llamada del servicio Web sincrnicamente as como tambin asincrnicamente. Por defecto, la aplicacin utiliza el mtodo sincrnico. Si lo prefere la invocacin asincrnica, necesita llamar la versin asincrnica del mtodo. Las versiones asincrnicas no esperan al servicio Web que retorne una respuesta y utiliza un mecanismo de callback para obtener la respuesta cuando est lista. La invocacin asincrnica de un servicio Web podra ayudar a que las aplicaciones cliente sean ms responsivas. En este proyecto, llamar al mtodo ToLower del TextWebService creado previamente en una forma asincrnica. Qu cdigo escribira para invocar asincrnicamente un servicio Web?

BE

Proyecto 4-4: Utilizando el estado de sesin Est desarrollando una porcin de un sitio Web que permite a los usuarios introducir su nombre y direccin de correo electrnico a un boletn informativo por correo electrnico. Su solucin consiste de dos pginas Web. La primera pgina colecta el nombre de usuario y direccin de correo electrnico, las agrega al estado de sesin y transfere el control a la segunda pgina. La segunda pgina recupera el nombre y la direccin de correo electrnico desde el estado de sesin y visualiza un mensaje de confrmacin. Necesita escribir cdigo para estas dos pginas. Qu cdigo escribir para llevar a cabo este requerimiento?

RO

www.pdftron.com
Evaluacin de Dominio
Proyecto 4-3: Llamando un Servicio Web asincrnicamente

Est desarrollando una porcin de un sitio Web que permite a usuarios introducir su nombre y direccin de correo electrnico para suscribirse a su boletn informativo por correo electrnico. Su solucin consiste de dos pginas Web. La primera pgina colecta el nombre de usuario y la direccin de correo electrnico y transfere el control a una segunda pgina. La segunda pgina acepta el nombre y la direccin de correo electrnico como parmetros de cadena de consulta y visualiza un mensaje de confrmacin al usuario. Necesita escribir cdigo para estas dos pginas. Qu cdigo escribir para llevar a cabo este requerimiento?

ER ICA

Leccin 5

Comprender las Aplicaciones de Escritorio


Matriz de Dominio de Objetivos
Habilidad Tecnolgica Comprender los Objetos Comprender Valores y Referencias Comprender la Encapsulacin Descripcin de Dominio de Objetivo Comprender las aplicaciones de los Windows Forms Nmero del Dominio del Objetivo 5.1 5.2

Comprender las aplicaciones basadas en consola Comprender los Servicios de Windows

Trminos Clave
Parmetros de la lnea de comando Consola Delegados Eventos Instalador Herencia visual

ET

CI

BE

Es un desarrollador de software para una gran organizacin de negocios. Necesita desarrollar una aplicacin que se integre perfectamente con los escritorios de Windows de los usuarios y que proporcione una interfaz de usuario similar a las aplicaciones de escritorio populares en la plataforma de Windows. La aplicacin necesita ser funcional ya sea que est conectada o desconectada de la red. La aplicacin debe ser capaz de comunicarse con dispositivos tales como escneres e impresoras porttiles.

RO

www.pdftron.com

ER ICA
5.3 Servicio de Windows

138

Leccin 5

Comprender las aplicaciones de los Windows Forms


EN RESUMEN

Las aplicaciones de los Windows Forms son aplicaciones cliente inteligentes que consisten de uno o ms formularios que muestran una interfaz visual al usuario. Estas aplicaciones se integran bien con el sistema operativo, utilizan dispositivos conectados y pueden trabajar ya sea conectado a Internet o no.

Un Windows Form es una superfcie visual que es capaz de visualizar una variedad de controles tales como cuadros de texto, botones y mens. Visual Studio proporciona un diseador de Windows Forms con base en arrastrar elementos que puede utilizar para crear fcilmente sus aplicaciones.

Figura 5-1

Cuadro de Herramientas de Visual Studio

ET
Tome Nota Un control es un elemento de la interfaz de usuario distinto que acepta entradas de un usuario o visualiza una salida al usuario.

CI
Un formulario y sus componentes generalmente responden a las acciones del usuario tales como presionar una tecla o el movimiento del ratn. Estas acciones son llamadas Eventos. La mayora del cdigo que escribe como desarrollador de Formularios de Windows es capturar tales eventos y manejarlos creando una respuesta apropiada para cada evento. En el siguiente ejercicio crear un Formulario de Windows que muestra el valor de la fecha seleccionada por el usuario.

BE

RO

www.pdftron.com
Puede utilizar la funcionalidad proporcionada por el Diseador de Windows Forms del Visual Studio para ubicar y organizar controles rpidamente por sus requerimientos. Visual Studio proporciona acceso sencillo a los controles disponibles va su Cuadro de Herramientas, como se muestra en la Figura 5-1.

Para disear Windows Forms, primero decida que controles le gustara ubicar en el formulario. Los Windows Forms proporcionan una gran coleccin de controles comunes que puede utilizar fcilmente para crear una excelente interfaz de usuario. Si la funcionalidad que est buscando no est disponible como un control comn, tiene la opcin de, ya sea crear un control personalizado por usted mismo o comprar un control de un proveedor externo.

ER ICA

Disear un Windows Form

Comprender las Aplicaciones de Escritorio

139

Crear un Windows Form


PREPRESE. Lance el Microsoft Visual Studio. 1. Cree un nuevo proyecto basado en la plantilla de Aplicacin para Windows Forms como se muestra en la Figura 5-2. Nombre el proyecto como WindowsFormsDesign. Figura 5-2
Dialogo para nuevo proyecto de Visual Studio

Figura 5-3

ET
3. En la vista del Diseador, seleccione el control Label y utilizando la ventana de Propiedades, establezca su propiedad Text a una cadena vaca. 4. En la vista del Diseador, haga doble clic en el control Date Time Picker. Esta accin adjunta el manejador de evento por defecto para el evento Value Changed del control Date Time Picker y cambia la vista de Diseador a Cdigo. Cambie el cdigo por defecto para el manejador de evento como sigue:

CI

Windows Form con un Date Time Picker y un control Label

BE

RO

www.pdftron.com
2. El proyecto de Aplicacin de Windows Form carga con un formulario por defecto (Form1. cs) abierto a la vista del Diseador para ser accedidos desde la ventana del Cuadro de herramientas. Si an no ve la ventana del Cuadro de herramientas seleccione Ver y despus or. La vista del Diseador le permite trabajar visualmente con el formulario. Por ejemplo, puede organizar controles en la supercie del formulario y establecer sus propiedades. Los controles pueden visualizarse en la ventana del Cuadro de herramientas. Desde el Cuadro de herramientas arrastre y suelte un control Date Time Picker y un control Label en la supercie del Diseador y organice los controles como se muestra en la Figura 5-3.

ER ICA

140

Leccin 5

Tome Nota En el ejercicio Crear un Windows Form, utilizamos los nombres de control por defecto. En formularios complejos con ms controles, siempre es buena idea dar nombres ms signicativos a los controles.

private void dateTimePicker1_ValueChanged (object sender, EventArgs e) { label1.Text = dateTimePicker1.Value.ToLongDateString(); } 5. Seleccione Depurar y despus Inicie la depuracin (o presione F5) para ejecutar el proyecto. En la interfaz de usuario, seleccione una nueva fecha y verique que la fecha seleccionada es visualizada en el control Label.

En este ejercicio, note que cuando el formulario es visualizado inicialmente el control Label es establecido con una cadena vaca. Tan pronto como cambia la seleccin de fecha manipulando el control Date Time Picker, el valor de fecha seleccionado es establecido como el texto para el control Label.

Comprender el modelo de evento de un Windows Form

ET
Tome Nota Un delegado se puede enlazar a cualquier mtodo cuya rma coincide con la del manejador de evento.

CI

BE

newSystem.EventHandler( this.dateTimePicker1_ValueChanged);

Aqu el Value Changed es el evento del control Date Time Picker que nos gustara capturar. As que, una nueva instancia del delegado de tipo Event Handler es creado y el mtodo dateTimePicker1_ValueChanged es pasado al manejador de evento. El mtodo dateTimePicker1_ValueChanged es el mtodo en el cual realmente escribir el cdigo del manejador de evento. Este cdigo es generado automticamente por el Diseador de Visual Studio. Encontrar este cdigo en el archivo de cdigo subyacente del diseador (Form1.Designer.cs), dentro de una regin de cdigo titulada cdigo generado de Diseador de Windows Form. Otra cosa para notar es que la sintaxis para agregar un delegado utiliza el operador+=. Esto es debido a que el .NET Framework soporta delegados multicast donde un delegado puede ser enlazado a ms de un mtodo, por lo tanto permite notifcaciones de uno a muchos cuando el evento es disparado.

RO

www.pdftron.com
Cada formulario y control expone un conjunto predefnido de eventos. Cuando ocurre un evento, el cdigo en el manejador de evento asociado es invocado. En el ejercicio previo, cuando hace doble clic en el control Date Time Picker para agregar cdigo al manejador de evento, Visual Studio genera el siguiente cdigo para agregar el manejador de evento al evento:
this.dateTimePicker1.ValueChanged +=

El manejo de evento juega un rol clave en la programacin basada en la interfaz de usuario, a travs del manejo de evento, responde a varios eventos que son disparados como resultado de las acciones del usuario y por lo tanto hacen interactivos a los programas. El modelo de evento de Windows Forms utiliza delegaciones de .NET Framework para enlazar los eventos a sus respectivos manejadores de evento.

ER ICA

Comprender las Aplicaciones de Escritorio

141

Utilizar Herencia Visual


La herencia visual le permite reutilizar la funcionalidad existente y el diseo de Windows Forms. Uno de los principios esenciales de la programacin orientada a objetos es la herencia. Cuando una clase hereda de una clase base, esta deriva su funcionalidad base de la clase base. Puede siempre extender la clase derivada para proporcionar funcionalidad adicional y ser ms til. Un Windows Form, en esencia, slo es otra clase y por lo tanto la herencia se aplica tambin. Sin embargo, cuando la herencia es aplicada a un Windows form, tambin causa la herencia de todas las caractersticas visuales de un formulario, tal como el tamao, color y cualquier control ubicado en el formulario. Tambin puede manipular cualquiera de las propiedades que hereda de la clase base. Por lo tanto, heredar Windows Forms a menudo es llamado herencia visual. En el siguiente ejercicio, creara un Windows Form que utiliza herencia visual para reutilizar un formulario existente.

Crear un Windows Form utilizando herencia visual

ET

CI
Figura 5-4
Plantilla de Formulario heredado

BE

RO
dateTimePicker1;

www.pdftron.com
1. Abra el Form1.designer.cs y cambie los modicadores de acceso del label1 y el control dateTimePicker1 de privado a protegido, como se muestra a continuacin: protectedSystem.Windows.Forms.Label label1; protectedSystem.Windows.Forms.DateTimePicker 2. Seleccione Proyecto, Agregar Windows Forms para agregar un nuevo Windows Form basado en la plantilla de Formulario heredado. Puede buscar rpidamente esta plantilla tecleando su nombre en el cuadro de bsqueda, como se muestra en la Figura 5-4. Nombre el formulario heredado InheritedForm.cs. La plantilla de Formulario Heredado no est disponible en las ediciones de Visual Studio Express. Si est utilizando la edicin express, slo cree un Windows Form regular llamado InheritedForm.cs y proceda al Paso 4.

PREPRESE. Lance el Microsoft Visual Studio y abra el Proyecto de Aplicacin para Windows llamado WindowsFormsDesign.

ER ICA

142

Leccin 5

3. Haga clic en el botn Agregar. En el cuadro de dilogo de Selector de Herencia, seleccione el Form1 del espacio de nombres de Windows Forms Design, como se muestra en la Figura 5-5 y haga clic en el botn Aceptar. Figura 5-5
Cuadro de dialogo de Selector de Herencia

publicInheritedForm() {

ET

CI
{ }

BE
} }

InitializeComponent();

5. En la vista del Diseador del InheritedForm, establezca la propiedad Text a Formulario Heredado. 6. En la vista del Diseador, haga doble clic en InheritedForm. Esta accin agrega un manejador de evento para el evento Load del formulario y cambia la vista de Diseo a Cdigo. Cambie el cdigo por defecto para el manejador de evento como se muestra a continuacin: private void InheritedForm_Load( object sender, EventArgs e) label1.Text = dateTimePicker1.Value.ToLongDateString();

RO

www.pdftron.com
public partial class InheritedForm : WindowsFormsDesign.Form1

4. Seleccione la vista de cdigo para el InheritedForm, ver que la clase InheritedForm hereda del Form1 como se muestra a continuacin. Si no utiliz la plantilla de Formulario heredado en el Paso 2, necesitar modicar manualmente el cdigo para agregar el cdigo para la herencia (mostrado en negritas en el cdigo de abajo):

ER ICA

Comprender las Aplicaciones de Escritorio

143

7. Abra el Program.cs y modique el mtodo Main como se muestra abajo para garantizar que el InheritedForm es lanzado cuando ejecuta la aplicacin: [STAThread] static void Main() { Application.EnableVisualStyles(); Application Application.Run(new InheritedForm()); } .SetCompatibleTextRenderingDefault(false);

8. Seleccione Depurar y despus Inicie la depuracin (o presione F5) para ejecutar el proyecto. Cuando el InheritedForm es cargado, la fecha seleccionada actualmente es mostrada en el control label. A diferencia del Form1 creado previamente donde inicialmente el control label estaba vaco.

Las aplicaciones de interfaz de documentos mltiples son aplicaciones donde mltiples ventanas hijo residen bajo una sola ventana padre. Las aplicaciones MDI permiten a mltiples ventanas compartir un solo men y barra de herramientas de la aplicacin. Las aplicaciones MDI a menudo tienen un men llamado Ventana que permite a los usuarios administrar mltiples ventanas hijo ofreciendo caractersticas tales como cambiar entre ventanas hijo y organizar ventanas hijo. La Figura 5-6muestra al Microsoft Excel 2010 en modo MDI:

ET

CI
Figura 5-6
Microsoft Excel 2010 como una aplicacin MDI

BE

RO

www.pdftron.com
Comprender las aplicaciones de interfaz de documentos mltiples (MDI)

El formulario InheritedForm demuestra que tiene toda la funcionalidad del Form1 simplemente heredando el formulario. Cuando cambia el modifcador de acceso de los controles miembro de Form1, label1 y dateTimePicker1, de privado a protegido, ser capaz de acceder a ellos desde dentro del formulario heredado. Este ejercicio tambin demuestra cmo puede extender la funcionalidad del formulario base en los formularios heredados.

ER ICA

144

Leccin 5

Tome Nota Puede ser complicado implementar soporte para mltiples monitores en aplicaciones MDI ya que la ventana padre necesita extenderse a mltiples monitores.

Las aplicaciones MDI contrastan con aplicaciones de interfaz de documentos simple (SDI) donde cada ventana contiene su propio men y barra de herramientas. Las aplicaciones SDI se basan en el sistema operativo para proporcionar la funcionalidad de administracin de ventana (por ejemplo, en Windows, puede cambian entre mltiples ventanas utilizando la Barra de Tareas de Windows). Hay mucho debate entre los diseadores de interfaz de usuario sobre qu interfaz de aplicacin funciona mejor. Generalmente hablando, SDI es considerado ms adecuado para usuarios novatos mientras que MDI es considerado ms adecuado para usuarios avanzados. Muchas aplicaciones populares tales como Microsoft Word y Microsoft Excel soportan tanto SDI y MDI. Word y Excel se instalan por defecto como aplicaciones SDI pero proporcionan a los usuarios una opcin para cambiar entre SDI y MDI. Por ejemplo, en Word 2010 y Excel 2010, puede cambiar a modo MDI desactivando la opcin Mostrar todas las ventanas en la barra de tareas en el men de opciones.

Crear una aplicacin MDI

PREPRESE. Lance el Microsoft Visual Studio y cree un nuevo proyecto de Aplicacin de Windows Forms llamado MDIApplication. 1. Seleccione la ventana de Propiedades para el Form1 y establezca la propiedad Text a MDI Application y la propiedad IsMdiContainer a True.

Figura 5-7

Agregando opciones de men

ET

CI
{ }

BE
3. Para el control MenuStrip, establezca su propiedad MdiWindowListItem al nombre del men Ventana (windowToolStripMenuItem por defecto). 4. En el Explorador de Soluciones, haga clic derecho en el proyecto y seleccione Agregar, Windows Form. Agregar Windows Form con el nombre ChildForm. 5. Haga doble clic en el formulario hijo y agregue el siguiente cdigo para manejar el evento Load: private void ChildForm_Load( object sender, EventArgs e) Text = DateTime.Now.ToString();

RO

www.pdftron.com
2. Seleccione el control MenuStrip desde el Cuadro de Herramientas y agrguelo al formulario. Agregue un elemento del men del nivel superior &Window, y agregue &New Window y &Arrange en el siguiente nivel. Bajo el men Arrange, agregue tres opciones, &Cascade, &Horizontal y &Vertical, como se muestra en la Figura 5-7.

ER ICA

Comprender las Aplicaciones de Escritorio

145

Tome Nota El signo & antes de un carcter en un texto de men no se muestra sino que hace del carcter un acceso directo al men. Por ejemplo, el men & Window puede ser invocado presionando Alt+W. Las teclas de acceso no sern notorias hasta que el usuario presione la tecla Alt. Una opcin en Windows controla si las teclas de acceso directo son visibles o no.

6. En el formulario padre, haga doble clic en Ventana, el elemento del men de Nueva Ventana y agregue el siguiente manejador de evento para su evento Click: private void newWindowToolStripMenuItem_Click( object sender, EventArgs e) {

ChildForm child = new ChildForm(); child.MdiParent = this; child.Show(); }

object sender, EventArgs e) { }

LayoutMdi(MdiLayout.Cascade);

private void horizontalToolStripMenuItem_Click( { }

ET

CI
Figura 5-8
Una aplicacin MDI con tres ventanas hijo ordenadas horizontalmente

BE

RO
{ }

www.pdftron.com
LayoutMdi(MdiLayout.TileHorizontal); private void verticalToolStripMenuItem_Click( object sender, EventArgs e) LayoutMdi(MdiLayout.TileVertical); 8. Seleccione Depurar y despus Inicie la depuracin (o presione F5) para ejecutar el proyecto. Seleccione Ventana, Nueva Ventana para crear mltiples ventanas hijo nuevas. Cambie entre las ventanas hijo. Note que solo hay una instancia de aplicacin en la barra de tareas de Windows. Ahora utilice las opciones en men Window, Arrange para ordenar las ventanas hijo. Por ejemplo, una aplicacin con tres ventanas hijo podra parecerse a la imagen en la Figura 5-8 cuando las ventanas hijo son ordenadas horizontalmente.

object sender, EventArgs e)

ER ICA

7. En el formulario padre, haga doble clic en Window, Arrange, Cascade, Horizontal y Vertical, respectivamente y agregue manejadores de evento para sus eventos Click: private void cascadeToolStripMenuItem_Click(

146

Leccin 5

Revisemos algunas de las propiedades y mtodos importantes utilizadas en este ejercicio. Primero, para el formulario padre, la propiedad IsMdiContainer est establecida como true. Esta propiedad indica que el formulario es un contenedor para mltiples formularios hijo MDI. Correspondientemente, para cada formulario hijo, establece la propiedad MdiParent para especifcar el formulario contenedor padre. En seguida, la propiedad MdiWindowListItem del MenuStripes utilizado para indicar cul elemento de men ser utilizado para mostrar la lista de ventanas hijo MDI. Cuando esta propiedad est establecida, el elemento de men enlistar todas las ventanas hijo y tambin le permitir cambiar entre ventanas hijo. Como resultado de un cdigo en el mtodo ChildForm_Load, la barra de ttulo para cada formulario muestra la fecha y hora del instante cuando el formulario fue cargado.

Comprende cmo desarrollar aplicaciones de Windows Forms? USD 5.1

Finalmente, el mtodo LayoutMdies utilizado por los elementos de men en el men Ventana para ordenar las ventanas hijo. El mtodo acepta un parmetro de tipo MdiLayout enumeration. El valor determina si la ventana hijo necesita mostrarse de forma horizontal o vertical, en cascada o como cono.

Comprender las aplicaciones basadas en consola


EN RESUMEN

Tome Nota

ET

Trabajar con argumentos de la lnea de comandos


En esta seccin, aprender cmo aceptar parmetros de lnea de comando dentro de una aplicacin de consola. El siguiente ejercicio crea una aplicacin de consola sencilla que acepta el nombre de un archivo de texto como un argumento de lnea de comando y muestra el contenido de ese archivo.

CI

Para habilitar la lectura o escritura a la consola desde una aplicacin de Windows Forms, establezca el tipo de salida del proyecto a Aplicacin de consola en las propiedades del proyecto.

BE

Una aplicacin de consola es ejecutada desde la ventana de consola. La entrada en la aplicacin de consola puede ser proporcionada utilizando parmetros de la lnea de comando o la aplicacin de consola puede leer interactivamente caracteres desde la ventana de consola. Similarmente, la salida de la aplicacin de consola tambin es escrita en la ventana de comandos . Puede habilitar la lectura o escritura a la consola creando una aplicacin y utilizando la plantilla de Aplicacin de Consola en Visual Studio.

Tambin puede utilizar aplicaciones de consola para crear comandos que pueden ser ejecutados desde la lnea de comando. Por ejemplo, puede tomar ventaja de las tuberas y fltros proporcionados por el sistema operativo para pasar la salida de un comando como entrada a otro comando, de este modo creando comandos ms poderosos y combinando comandos simples.

RO

www.pdftron.com
Las aplicaciones de consola no tienen una interfaz de usuario grfca y utilizan una ventana de consola de modo texto para interactuar con el usuario. Las aplicaciones basadas en consola son ms adecuadas para tareas que no requieren de una interfaz de usuario.

ER ICA

; Listo para la certicacin?

Comprender las Aplicaciones de Escritorio

147

Crear una aplicacin de consola


PREPRESE. Lance el Microsoft Visual Studio. 1. Crear un nuevo proyecto basado en la plantilla de Aplicacin de Consola como se muestra en la Figura 5-9. Nombre el proyecto DisplayFile. Figura 5-9
Plantilla de Aplicacin de Consola

ET

CI
}

BE
{ }

RO
if (args.Length< 1) return; using System.IO;

www.pdftron.com
2. En el Program.cs, modique el cdigo dentro del mtodo Main como se muestra abajo: static void Main(string[] args) { string[] lines = File.ReadAllLines(args[0]); foreach (string item in lines) Console.WriteLine(item); 3. Agregue lo siguiente al archivo utilizando la directiva : 4. Seleccione Generar y despus Generar Solucin (o presione F6) para generar el proyecto. 5. Cree un archivo de texto utilizando Visual Studio o el bloc de notas y gurdelo como Sample. txt en la misma carpeta como el archivo ejecutable (el ejecutable es creado por defecto en bin\debug folder bajo la carpeta del proyecto). 6. Abra el smbolo del sistema, navegue a la ruta del archivo EXE del proyecto. Ejecute el siguiente comando: DisplayFile sample.txt 7. Se mostrar el comando que muestra el contenido del archivo de texto en la ventana de comandos.

ER ICA

148

Leccin 5

8. De forma alternativa, tambin puede pasar el argumento de la lnea de comando desde dentro del Visual Studio utilizando la ventana de propiedades de proyecto, como se muestra en la gura 5-10.Para ver la ventana de propiedades del proyecto, seleccione la opcin del men Propiedades del proyecto DisplayFile. Figura 5-10
Estableciendo opciones de inicio en la ventana de propiedades del proyecto

; Listo para la certicacin? Comprende cmo desarrollar aplicaciones basadas en consola? USD 5.2

Tome Nota

Debido a que un servicio de Windows es capaz de ejecutarse en el fondo, no necesita que un usuario inicie sesin con el n de funcionar. Los servicios de Windows ejecutan sus propias sesiones de Windows en el contexto de seguridad especicado. Dependiendo en qu servicios son necesitados, puede especicar una cuenta de usuario bajo el cual ejecutar el servicio.

ET

CI

BE

La naturaleza de los servicios de Windows los hacen ideales para crear programas de larga ejecucin que se ejecutan en el fondo y no proporcionan directamente ninguna interaccin de usuario. Un servicio de Windows puede ser iniciado, pausado y detenido. Un servicio de Windows tambin puede ser confgurado para iniciar automticamente cuando la computadora es iniciada. Algunos ejemplos de un servicio de Windows incluyen un servidor Web que escucha las solicitudes entrantes y enva una respuesta o la cola de impresin de un sistema operativo que proporciona servicios de impresin a los programas de aplicacin.

Los servicios juegan un rol importante en la arquitectura de la aplicacin Enterprise. Por ejemplo, puede tener un servicio que escuche rdenes entrantes e inicie un fujo de trabajo de procesamiento de orden cuando una orden es recibida.

RO

www.pdftron.com
EN RESUMEN

Un Servicio de Windows es una aplicacin que se ejecuta en el fondo y no tiene ninguna interfaz de usuario.

Comprender los Servicios de Windows

ER ICA

Comprender las Aplicaciones de Escritorio

149

Crear un servicio de Windows


Para crear un servicio de Windows en Visual Studio, utilice la plantilla de aplicacin de Servicio de Windows. Un servicio de Windows necesita ser instalado antes de poder ser utilizado. Todos los servicios de Windows deben derivarse de la clase ServiceBase. Esta clase base proporciona la estructura y funcionalidad bsica para crear un servicio de Windows. Puede invalidar los mtodos de clase baseOnStart, OnStop, OnPause y OnContinue, para agregar su lgica personalizada que deseara para ejecutar, en respuesta de los cambios en estados de servicio. El siguiente ejercicio demuestra cmo crear un servicio de Windows simple que escribe mensajes a un Event log de aplicacin. Los EventLogs son parte de Windows que son utilizados por tareas del sistema operativo y aplicaciones ejecutndose en el fondo para registrar errores u otros mensajes informativos. Windows defne tres event logs por defecto: Sistema, Aplicacin y Seguridad. Las aplicaciones generalmente utilizan el event log de Aplicacin para informar su mensaje. La utilidad del Visor de Sucesos puede ser utilizada para ver los mensajes en los event logs.

Tome Nota La edicin de Visual Studio Express no proporciona plantillas para crear proyectos de servicio de Windows. Necesitar Visual Studio para completar los ejercicios que utilizan los proyectos de Servicio de Windows.

Seleccionar la plantilla de proyecto de Servicio de Windows

ET
2. Seleccione la ventana de propiedades para Service1 y establezca las propiedades (Name) y el ServiceName a FirstService. 3. En el Explorador de Soluciones, renombre el archivo Service1.cs a FirstService.cs. Abra Program.cs y verique que las referencias a Service1 han sido cambiadas a FirstService. 4. Seleccione las ventanas de propiedades para el servicio y establezca la propiedad Can Pause And Continue y la propiedad Can Shutdown a True.

CI

BE

RO

www.pdftron.com
PREPRESE. Lance el Microsoft Visual Studio. 1. Cree un nuevo proyecto basado en la plantilla de Servicio de Windows. Nombre el proyecto FirstService, como se muestra en la Figura 5-11. Figura 5-11

Crear un servicio de Windows

ER ICA

150

Leccin 5

5. Abra el diseador para FirstService y agregue un componente EventLog desde el cuadro de herramientas. El componente EventLog le permite conectarse con los eventlogs. 6. Vea el cdigo para FirstService y modique el constructor como se muestra a continuacin. En este cdigo, primero crea una fuente de evento con el nombre FirstService. El EventSource es utilizado para distinguir mensajes generados por una aplicacin especca de todos los mensajes en un event log. Luego, establezca la propiedad Source del componente event log al nombre del eventsource. La propiedad Log del componente event log, eventLog1, es utilizado para especicar el event log utilizado para registrar los mensajes: publicFirstService() InitializeComponent(); { {

if (!EventLog.SourceExists(FirstService)) EventLog.CreateEventSource( }

FirstService, Application); eventLog1.Source = FirstService; }

protected override void OnStart(string[] args) { eventLog1.WriteEntry(

ET

CI
{ } {

BE
}

Iniciando el servicio, EventLogEntryType.Information, 1001); protected override void OnStop() eventLog1.WriteEntry( Deteniendo el Servicio, EventLogEntryType.Information, 1001); protected override void OnPause() eventLog1.WriteEntry( Pausando el servicio, EventLogEntryType.Information, 1001);

RO

www.pdftron.com
7. Agregue el siguiente cdigo a los mtodos de cambio de estado de servicio para denir su comportamiento. El mtodo WriteEntry del componente event log, eventLog1, es utilizado para escribir un mensaje a un event log. Como parte del mtodo puede especicar el tipo de mensaje. Por ejemplo, su mensaje puede ser error, advertencia o solo una pieza de informacin:

eventLog1.Log = Application;

ER ICA

Comprender las Aplicaciones de Escritorio

151

} protected override void OnContinue() { eventLog1.WriteEntry( Continuando el servicio , EventLogEntryType.Information, 1001); } protected override void OnShutdown() eventLog1.WriteEntry(

Apagando el servicio , }

EventLogEntryType.Information, 1001);

8. Seleccione Generar y despus Generar Solucin (o presione F6) para generar el proyecto.

La propiedad StartType de la clase ServiceInstaller indica cmo y cundo un servicio es iniciado. La propiedad StartType puede tener uno de tres valores posibles. El valor Manual, el cual tambin es el valor por defecto, indica que necesita iniciar el servicio manualmente. El valor Automatic indica que el servicio ser iniciado automticamente cuando Windows inicie. El valor Disabled indica que el servicio no puede ser iniciado.

ET

CI

BE

Tome Nota

RO

www.pdftron.com
El mtodo WriteEntry del event log toma el mensaje para escribirlo en el log, el tipo de la entrada del event log (Informacin, Error, advertencia, etc.), y un eventId, el cual es una id para especifcar la aplicacin para identifcar el evento. El servicio de WindowsFirstService ahora est listo pero antes de que pueda utilizarse, debe ser instalado en la base de datos de servicios de Windows. Esto se hace agregando un Instalador de Servicio de Windows al proyecto de Servicio de Windows. El siguiente ejercicio le muestra cmo hacer esto.

Agregar un instalador al servicio de Windows

PREPRESE. Lance el Microsoft Visual Studio. 1. Abra el proyecto FirstService creado en el ejercicio previo. Haga clic derecho en la supercie del Diseador de FirstService.cs y seleccione la opcin Agregar instalador desde el men de contexto.

2. Esta accin agrega un nuevo archivo ProjectInstaller.cs al proyecto. Abra el Diseador para ProjectInstall.cs. se dar cuenta que se agregan dos componentes al Diseador, como se muestra en la Figura 5-12. 3. Acceda a las propiedades para el componente ProcessInstaller1y cambie la propiedad AccountaLocalService. 4. En seguida, accede a las propiedades del componente serviceInstaller1. Cambie la propiedad de DisplayNameaFirstService y la propiedad Description a Una simple prueba de servicio. Note que el valor de la propiedad StartType es establecida por defecto a Manual. 5. Seleccione Generar, Generar Solucin (o presione F6) para generar el proyecto. El servicio de Windows ahora est listo para ser instalado.

El cdigo para FirstServicein valida los mtodos OnStart, OnStop, OnPause, OnContinue y OnShutdown para escribir mensajes al event log. No todos los servicios necesitan invalidar estos mtodos. Si un servicio necesita invalidar estos mtodos depende del valor de las propiedades Can Pause And Continue y Can Shutdown del servicio de Windows.

ER ICA

152

Leccin 5

Figura 5-12
Vista de Diseador para ProjectInstaller.cs

Tome Nota Con el n de minimizar los riesgos a la seguridad, a menos que un servicio de Windows necesite privilegios de seguridad ms altos con el n de funcionar, deber abstenerse de utilizar la cuenta Local System para ejecutar un servicio de Windows.

Instalar un Servicio de Windows

Tome Nota

PREPRESE. Para instalar un servicio de Windows, haga lo siguiente:

ET
Tome Nota Para desinstalar un servicio de Windows, utilice InstallUtil.exe con la opcin -u.

CI

Instalar un servicio de Windows requiere acceso al Registro de Windows. Por lo tanto, necesita asegurarse que ejecuta el installUtil.exe como administrador.

BE

1. Ejecute el smbolo del sistema de Visual Studio como administrador. Para acceder al smbolo del sistema, vaya a Inicio seleccione Todos los Programas, despus Visual Studio, posteriormente VisualStudio Tools y elija Smbolo del sistema de Visual Studio. Para ejecutar un programa como administrador en Windows, haga clic derecho en el acceso directo del programa y seleccione la opcin Ejecutar como administrador desde el men. 2. Cambie el directorio al directorio de salida del proyecto FirstService. Este es el directorio donde se ubican los archivos ejecutables.

3. Ejecute el siguiente comando, ver los resultados como se muestra en la Figura 5-13 (instalar un servicio de Windows requiere acceso al Registro de Windows. Por lo tanto, necesita asegurarse que ejecuta el installUtil.exe como administrador): installutil FirstService.exe 4. El servicio de Windows de FirstService ahora est instalado.

La aplicacin de servicio de Windows ahora esta almacenada en la base de datos de servicios de Windows. Anteriormente, cuando agrego un ServiceInstaller para FirstService, establece una propiedad StartTypedel componente serviceInstaller1 a Manual. Como resultado, necesitar iniciar manualmente el servicio cuando sea necesario. El siguiente ejercicio demuestra cmo iniciar, pausar, continuar y detener un servicio de Windows.

RO

www.pdftron.com
Un archivo ejecutable que tiene el cdigo para las clases del instalador de servicio puede ser instalado utilizando la herramienta de instalador de lnea de comando (installutil.exe). El siguiente ejercicio muestra como instalar una aplicacin de servicio de Windows en la base de datos de servicios de Windows.

La propiedad Account de la clase ServiceProcessInstaller especifca el tipo de cuenta bajo el cual se ejecutan los servicios. La propiedad Account es el tipo de enumeracin de ServiceAccount donde los valores posibles son LocalService, LocalSystem, NetworkService y User. El valor LocalSystem especifca una cuenta con privilegios altos mientras la cuenta LocalService acta como un usuario sin privilegios.

ER ICA

Cuando agrega un instalador a un proyecto de servicio de Windows, las clases ServiceProcessInstaller y ServiceInstaller son agregadas al proyecto. La clase ServiceProcessInstaller desempea tareas de instalacin que son comunes a todos los servicios de Windows en una aplicacin. Estas incluyen la confguracin de la cuenta de inicio de sesin para el servicio de Windows. La clase ServiceInstaller, por otra parte, desempea las tareas de instalacin que son especfcas a un solo servicio de Windows, tales como la confguracin de ServiceNameyStartType.

Comprender las Aplicaciones de Escritorio

153

Figura 5-13
Vista de Diseador para ProjectInstaller.cs

Trabajar con un servicio de Windows

PREPRESE. Lance la ventana de Administracin de Equipos haciendo clic derecho en Mi Pc y seleccionando Administrar desde el men.

ET

CI

BE
2. Seleccione el servicio First Service y haga clic en el hiperenlace Iniciar, como se muestra en la Figura 5-14. Observa un cuadro de dilogo mostrando el progreso, como se muestra en la Figura 5-15. Cuando el servicio es iniciado, el estatus del servicio cambia a Iniciado. 3. Expanda el nodo de Visor de Sucesos y seleccione el log de Windows de Aplicacin. Podr ver un mensaje de First Service diciendo Iniciando el Servicio, como se muestra en la Figura 5-16. 4. Regrese a la lista de Servicios e intente pausar, reanudar o detener el First Service. Revise de nuevo el event log para vericar que los mensajes apropiados estn siendo mostrados.

RO

www.pdftron.com
Figura 5-14
La seccin de servicios le permite trabajar con servicios instalados

En los ltimos ejercicios vio cmo crear, instalar y utilizar un servicio de Windows. Tambin aprendi cmo agregar mensajes por medio de programacin al even log de Aplicacin de Windows.

1. En la ventana de Administracin de Equipos, expanda la seccin de Servicios y Aplicaciones y seleccione Servicios. Se muestra una lista de todos los servicios instalados en la computadora como en la Figura 5-14.

ER ICA

154

Leccin 5

Figura 5-15
Mensaje de control de servicio cuando se est iniciando un servicio

Figura 5-16
Mensaje de control de servicio cuando se inicia un servicio

ET
; Listo para la certicacin? Comprende cmo desarrollar servicios de Windows? USD 5.3

CI

BE

RO

www.pdftron.com

ER ICA

Comprender los conceptos bsicos de bases de datos

155

Resumen de Habilidades
En esta leccin aprendi:

ET

CI

BE

Evaluacin de Conocimiento

RO

www.pdftron.com

Llene los espacios en blanco Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios proporcionados. 1. Utilice la propiedad _________________de la clase ServiceInstaller para especifcar un breve comentario que explica el propsito del servicio. 2. La propiedad _________________ de la clase _________________ indica el tipo de cuenta bajo el cual el servicio de Windows se ejecutar. 3. La propiedad ________________ de la clase EventLog es utilizada para especifcar el nombre de la aplicacin a utilizar cuando se escribe en un event log. 4. _____________________ le permite reutilizar la funcionalidad y diseo existentes para formularios de Windows. 5. Las aplicaciones de _____________________ son aplicaciones donde mltiples ventanas hijo residen bajo una sola ventana padre. 6. Un _________________ es ideal para la creacin de aplicaciones de larda ejecucin que se ejecutan en el fondo y no tienen ninguna interfaz de usuario.

Un Formulario de Windows es una superfcie visual que puede mostrar una variedad de controles tales como cuadros de texto, botones y mens. Visual Studio proporciona un diseador de Windows Forms para arrastrar y soltar que puede utilizar para crear sus aplicaciones. Cada formulario y control expone un conjunto predefnido de eventos. Cuando ocurre un evento, el cdigo en el manejador de evento asociado es invocado. El modelo de eventos de los formularios de Windows utiliza delegados de .NET Framework para enlazar los eventos a sus respectivos manejadores de eventos. La herencia Visual le permite reutilizar la funcionalidad existente y el diseo para formularios de Windows. Las aplicaciones de interfaz de documentos mltiples son aplicaciones donde mltiples ventanas hijo residen bajo una sola ventana padre. Las aplicaciones de consola no tienen una interfaz de usuario grfca y utilizan una ventana de consola de modo texto para interactuar con el usuario. Las aplicaciones basadas en consola son ms adecuadas para tareas que requieren una interfaz mnima o que no requieren de una interfaz de usuario. Los servicios de Windows son ideales para la creacin de aplicaciones de larga ejecucin que se ejecutan en el fondo y no tienen una interfaz de usuario. Puede crear servicios de Windows utilizando la plantilla de Servicio de Windows de Visual Studio. Antes de que un servicio pueda ser utilizado, debe ser instalado en el Registro de Windows. Para hacer esto, agrega el componente Installer a la aplicacin de servicio de Windows. Esto le permitir instalar el servicio de Windows utilizando una herramienta de instalacin tal como InstallUtil.exe.

ER ICA

156

Leccin 5

7. Las _________________ no tienen interfaz de usuario grfca y utilizan una ventana de consola de modo texto para interactuar con el usuario. 8. Las aplicaciones _______________ proporcionan su propia funcionalidad de administracin de ventana, mientras que las aplicaciones_______________ se basan en el sistema operativo para la administracin de ventana. 9. Un delegado puede ser enlazado a cualquier mtodo del cual coincide la frma con la de la_______________________. 10. Los _______________________ pueden ser enlazados a ms de un mtodo, permitiendo notifcaciones de uno a muchos cuando un evento es disparado.

Opcin Mltiple

Encierre en un crculo la letra que corresponda a la mejor respuesta.

1. Necesita disear un servicio de Windows que no puede ser pausado. Cul de las siguientes opciones le ayudara a llevar a cabo esto?

2. Ha desarrollado un servicio de Windows. Necesita instalar este servicio de Windows con el fn de instalar su funcionalidad. Cul de las siguientes opciones debe elegir para llevar a cabo esto? a. b. c. d. Utilizar el Explorador de Servidores de Visual Studio. Utilizar el nodo de Servicios en la ventana de Administracin de Equipos. Utilizar InstallUtil.exe. Utilizar gacutil.exe.

ET

CI
a. b. c. d.

BE

3. Ha desarrollado un servicio de Windows. Este servicio necesita ejecutarse como un usuario sin privilegios con el fn de minimizar cualquier riesgo de seguridad. Cul de las siguientes cuentas debe utilizar para ejecutar este servicio de Windows? LocalSystem NetworkService LocalService User (donde la propiedad UserName est establecida a un miembro del rol de administrador).

4. Est diseando una aplicacin de servicio de Windows que contiene slo un servicio de Windows. Le gustara que este servicio se inicie automticamente cuando la computadora es reiniciada. Cul de las siguientes clases debe utilizar para especifcar esta confguracin?

RO

www.pdftron.com

a. Establecer la propiedad Can Pause And Continue del servicio de Windows a False. b. Establecer la propiedad del servicio de Windows a True. c. Establecer la propiedad del servicio de Windows a True, pero establecer la propiedad de Can Shutdown a False. d. No anular los mtodos On Pause y On Continue en el servicio de Windows.

ER ICA

Comprender los conceptos bsicos de bases de datos

157

a. b. c. d.

ServiceBase ServiceInstaller ServiceProcessInstaller ServiceController

5. Necesita cambiar la visualizacin y comportamiento de un formulario de Windows de forma que pueda contener mltiples ventanas hijo. Qu debe hacer a. b. c. d. Establecer la propiedad IsMdiContainer del formulario a true. Establecer la propiedad de MdiParent para todas las ventanas hijo. Establecer la propiedad MdiChilddel formulario. Establecer la propiedad IsMdiChild del formulario.

6. Est desarrollando un formulario de Windows que responde a los eventos del ratn. Cuando el ratn se mueve, necesita invocar al mtodo Form1_HandleMouse. Cualquier cdigo que escriba no debera afectar ningn cdigo de manejador de evento existente. Qu sentencia debe utilizar para agregar el manejador de evento al evento? a. this.MouseDown = new MouseEventHandler b. this.MouseMove = new MouseEventHandler
(Form1_HandleMouse); (Form1_HandleMouse); (Form1_HandleMouse); (Form1_HandleMouse);

CI
a. b. c. d.

ET

BE
a. b. c. d.

RO
Console.Read File.Read Console.Write File.Write

www.pdftron.com
c. this.MouseDown+= new MouseEventHandler d. this.MouseMove+= new MouseEventHandler 7. Est desarrollando un formulario de Windows con una interfaz de documentos mltiples (MDI). Necesita escribir cdigo que ordene las ventanas hijo verticalmente dentro de la regin del cliente con el formulario MDI padre. Cul de las siguientes sentencias debe utilizar?
LayoutMdi(MdiLayout.TileVertical); LayoutMdi(MdiLayout.Cascade); MdiLayout(LayoutMdi.Cascade); MdiLayout(LayoutMdi.TileVertical);

8. Est desarrollando una aplicacin para que sea ejecutada desde la lnea de comando. Cul de los siguientes mtodos debe utilizar para la salida de la lnea de comando?

ER ICA

158

Leccin 5

9. Est desarrollando una aplicacin que muestra una superfcie visual capaz de mostrar una variedad de controles tales como cuadros de texto, botones y mens. La aplicacin debera tambin permitir mltiples ventanas hijo que residan bajo una sola ventana padre. Cul de los siguientes tipos de aplicacin debe desarrollar? a. b. c. d.
Aplicacin basada en consola. Aplicacin de Servicio de Windows.

Aplicacin de interfaz de documentos simple (SDI).

Aplicacin de interfaz de documentos mltiples (MDI).

a. b. c. d.

Herencia Visual

Encapsulacin Visual Abstraccin Visual Polimorfsmo Visual

Proyecto 5-2: Manejar el Evento Mouse Down

Evaluacin de Competencia
Proyecto 5-3: Trabajar con Entradas de Consola Est desarrollando un programa que manipula texto. Necesita escribir una aplicacin de consola que acepte texto del usuario y lo convierta a texto en letras maysculas. Qu cdigo necesita escribir para cumplir este requerimiento? Proyecto 5-4: Utilizar la utilidad Net (net.exe) La utilidad de lnea de comando net.exe viene instalada con Windows. Esta utilidad le permite desempear varios comandos de red, incluyendo el control de los servicios de Windows. En este ejercicio, utilizar el net.exe para trabajar con el servicio de Windows creado previamente de First Service. Qu pasos toma con el fn de pausar, detener e iniciar un servicio de Windows utilizando la utilidad Net?

ET

CI

BE

Est desarrollando un juego que permite a los usuarios golpear un rea objetivo en un formulario de Windows con el ratn. Necesita desarrollar un formulario experimental que muestre las coordenadas X y Y de la ubicacin cliqueada por el usuario en la barra de ttulo del formulario. Cmo debe llevar a cabo esto?

RO

www.pdftron.com
Proyecto 5-1: Utilizar Herencia Visual Necesita crear un Formulario de Windows similar a uno que cre en el ejercicio VisualInheritance. Sin embargo, esta vez el requerimiento es que el color del fondo debe coincidir con el color seleccionado actualmente del escritorio del usuario. Cmo desarrollara tal formulario?

Evaluacin de Competencia

ER ICA

10. Est extendiendo una aplicacin de Windows existente. Le gustara crear un nuevo formulario que deriva sus caractersticas visuales tales como tamao, color y algunos controles desde un formulario creado previamente. Qu tcnica debe utilizar para crear el nuevo formulario?

Leccin 6

Comprender las Bases de Datos


Matriz de Dominio de Objetivos
Habilidad Tecnolgica Comprender los Objetos Comprender los Valores y Referencias Comprender el encapsulamiento Descripcin de Dominio de Objetivo Comprender los sistemas de administracin de bases de datos relacionales Comprender los mtodos de consulta de bases de datos Nmero del Dominio del Objetivo 6.1 6.2 6.3

Comprender los mtodos de conexin de bases de datos

Trminos Clave
Diagrama de entidad - relacin Primera forma normal Archivos planos Normalizacin

M
Procedimiento almacenado parametrizado Segunda forma normal Procedimiento almacenado

ET

CI

BE

Es un desarrollador de software para la Northwind Corporation. Como parte de su trabajo, interacta y procesa datos acerca de clientes, productos, proveedores y rdenes. Su trabajo involucra interactuar con bases de datos relaciones tales como Microsoft SQL Server. Sin embargo, tambin trabaja con informacin almacenada en otros formatos tales como archivos planos, archivos XML y datos en memoria. Para ser efectivo en su trabajo, necesita saber cmo conectarse a varias fuentes de datos y cmo recuperar y actualizar efectivamente datos en varios tipos de fuentes de datos.

RO

www.pdftron.com

ER ICA

Lenguaje de consulta estructurado Tercera forma normal XML

160

Leccin 6

Comprender los conceptos de bases de datos relacionales


EN RESUMEN

Una base de datos relacional es una coleccin de datos interrelacionados que est basado en el modelo relacional desarrollado por E.F. Codd. El modelo relacin defne entidades de datos distintas, sus atributos y relaciones entre entidades.

Comprender las bases de datos

Una base de datos es una coleccin organizada de datos interrelacionados que es administrada como una sola unidad.

Comprender los conceptos de bases de datos relacionales


Una base de datos relacional organiza datos en tablas bidimensionales que consisten de flas y columnas. Una base de datos relacional organiza informacin en tablas. Una tabla es una lista de flas y columnas que es conceptualmente similar a una hoja de trabajo de Microsoft Excel. Una fla tambin es llamada registro o tuple. A una columna tambin se le conoce como campo. La columna o campo especifca el tipo de datos que sern almacenados en cada registro de la tabla. Por ejemplo, las rdenes personalizadas pueden ser almacenadas en una tabla Orders donde cada fla representa una orden nica. Las columnas tales como Order Date especifcan si un valor valido es del tipo correcto de dato. Un ejemplo de la tabla Order aparece en la Figura 6-1.

ET

CI

BE

Otros sistemas de administracin de bases de datos estn basados en modelos diferentes. Por ejemplo, el Object DBMS (ODBMS) est basado en el modelo de objeto donde los datos son almacenados como una coleccin de objetos. En esta leccin. Nos enfocaremos solamente a las bases de datos relacionales ms populares.

Los DBMS relacionales utilizan el lenguaje de consulta estructurado (SQL) para recuperar y manipular datos. Los sistemas de administracin de bases de datos relacionales ms populares proporcionan soporte para la versin estandarizada de SQL, permitindole utilizar sus habilidades a travs de distintos sistemas de bases de datos relacionales.

RO

www.pdftron.com
Los sistemas de administracin de bases de datos pueden ser implementados basados en diferentes modelos. El modelo relacional es el modelo de base de datos ms popular. En el modelo relacional, los datos estn organizados en tablas donde cada tabla puede tener mltiples flas. Los DBMS basados en modelos relaciones son llamados DBMS relacionales. SQL Server, Access, Oracle y MySql son todos RDBMSs.

Una base de datos le permite almacenar, administrar y recuperar informacin de negocios importante. Si una base de datos es diseada apropiadamente, puede ser utilizada por mltiples aplicaciones y por mltiples usuarios. Un sistema de administracin de base de datos (DBMS), por otro lado, es un software que organiza bases de datos y proporciona facilidades tales como almacenamiento, acceso de datos, seguridad, respaldo, etc. Los ejemplos de DBMS populares incluyen el Microsoft SQL Server, Microsoft Access, Oracle y MySql.

ER ICA

Comprender las Bases de Datos

161

Figura 6-1
Una tabla de base de datos

Comprender el diseo de bases de datos relacionales

Disear una base de datos relacional es un proceso que determina la estructura de base de datos relacional apropiada que satisfaga los requerimientos del negocio. La informacin de una organizacin probablemente es el activo ms importante. Cuando disea una base de datos, unos de los principios rectores es garantizar la integridad de la base de datos. Integridad signifca que los datos en la base de datos son siempre precisos y consistentes . El proceso de diseo de base de datos consiste de los siguientes pasos:

ET

CI

BE

RO

www.pdftron.com
1. Desarrollar un enunciado de misin para la base de datos. Esto identifcar el propsito de la base de datos, cmo ser utilizada y quin la utilizar. Este paso establece el tono para el resto del proceso de diseo. 2. Determinar la informacin que necesita sea almacenada. En este paso, identifca los tipos de datos que necesitan ser almacenados en la base de datos. Generalmente la informacin es reunida como parte de los requerimientos de la tarea de anlisis por medio de diagramas entidad - relacin. 3. Dividir los datos en tablas y columnas. En este paso identifca las tablas y la informacin que desea almacenar en esas tablas. 4. Elegir claves principales. Una clave principal es una columna o conjunto de columnas que identifcan nicamente a cada fla de datos en una tabla. 5. Identifcar relaciones. En este paso identifca cmo los datos en una tabla estn relacionados a los datos en otra tabla. Por ejemplo, para cada cliente en la tabla Customers, puede tener muchas rdenes en la tabla Orders, esta relacin es llamada relacin de uno a muchos. 6. Aplicar el proceso de normalizacin. En este paso fnal, aplica reglas de normalizacin para garantizar que cualquier problema que pudiera afectar la integridad de los datos est resuelto. Ms adelante aprender acerca del proceso de normalizacin . Despus de que ha establecido el propsito de la base de datos, el siguiente conjunto de pasos (Paso 2 al Paso 5) pueden ser completados como parte del modelado entidad relacin. El paso fnal de normalizacin puede ser entonces aplicado a la salida desde el modelado entidad - relacin.

ER ICA

162

Leccin 6

Comprender los diagramas Entidad - Relacin


Los diagramas Entidad Relacin se utilizan para modelar las entidades, sus atributos y las relaciones entre las entidades. Los diagramas Entidad - Relacin pueden ayudarle a determinar los datos que necesitan ser almacenados en la base de datos. El modelado Entidad Relacin es un proceso de modelado para crear el modelo de datos conceptual de un sistema. Los diagramas Entidad Relacin (ERD) son la herramienta de modelado grfco para llevar a cabo el modelado Entidad Relacin. Los bloques de construccin bsicos para un ERD son Entidad, Atributos y Relacin.

En un diagrama ER:

ET

CI

BE

La Figura 6-2 muestra un ejemplo de diagrama ER. En este diagrama ER, los dos conjuntos de entidades son Customer y Order. Los atributos asociados con Customer son ID, Name y City. Los atributos asociados con Order son Order ID, Order Date y Ship Date. Los atributos que forman una clave principal estn subrayados. La relacin entre Customer y Order es Places.

Una relacin puede ser clasifcada como relacin uno a uno, relacin uno a muchos o relacin muchos a muchos. En la Figura 6-2, la lnea que conecta la relacin Places con Customer esta etiquetada 1, mientras que la lnea entre Places y Order esta etiquetada N. Este es un ejemplo de relacin uno a muchos. Por lo tanto, en esta relacin un cliente puede colocar muchas rdenes, pero una orden solo puede tener un cliente asociado con ella.

RO

www.pdftron.com
Los diagramas ER no muestran entidades simples o relaciones simples. Por ejemplo, puede haber miles de entidades Order y cientos de entidades Customer. En lugar de eso, ellos muestran conjuntos de entidades y conjuntos de relaciones. Por ejemplo, todas las miles de entidades Order conforman un conjunto de entidades. Cuando una Order o Customer aparecen en el diagrama ER, regularmente se refere a un conjunto de entidades en lugar de una entidad individual. Un rectngulo representa un conjunto de entidades. Una elipse representa un atributo. Un diamante representa un conjunto de relaciones. Las lneas slidas enlazan conjuntos de entidades a relaciones y conjuntos de entidades a atributos.

ER ICA

Entidad: Una entidad es la construccin de un objeto fsico o un concepto. Los ejemplos incluyen una orden, un cliente, un empleado, etc. Una entidad generalmente es llamada por el nombre que representa. Atributo: Los atributos son las distintas propiedades de una entidad. Por ejemplo, para una entidad Order, algunos atributos tiles podran ser Order Number, Order Date, Ship Date, Ship Via, etc. Para una entidad Employee, algunos atributos tiles podran ser EmployeeId,LastName, FirstName, Title, HireDate, etc. Cada entidad debe tener un conjunto de atributos de identifcacin nica que es la clave principal de la entidad. Por ejemplo, un OrderNumber es un atributo que identifca como nica a una orden y por lo tanto es una clave principal para la entidad Order. Relacin: Una relacin es una asociacin entre entidades. Por ejemplo, Takes es una relacin entre la entidad Employee y una entidad Order (EmployeeTakesOrder).

Comprender las Bases de Datos

163

Figura 6-2
Un diagrama Entidad Relacin

Mapear diagramas ER a una base de datos relacional

Con el fn de convertir un diagrama ER a una base de datos relacional, haga lo siguiente:


1. Mapee las entidades: Cree una tabla para cada conjunto de entidades en el diagrama. Los atributos sern columnas. Establezca el atributo de clave principal a las columnas de clave principal de la tabla.

BE
ID

RO
Clientes
Name 1001 1002 1003

www.pdftron.com
El diagrama ER en la Figura 6-2, cuando se mapea a una base de datos relacin, se generan las siguientes tablas:
City Berlin Tokyo Sydney Jane Doe John Doe Howard Steel

ET

CI
Ordenes

M
OrderID 101 102 103 CustomerId 1001 1002 1001

2. Mapee la Relacin: Puede mapear la relacin uno a muchos asegurndose que la tabla en el lado N de la relacin contiene la columna clave de la tabla en el lado 1 de la relacin. Para la Figura6-2, esto puede ser llevado a cabo agregando una columna Customer ID en la tabla Order que mapea a la columna ID a la tabla Customer. En el contexto de la tabla Order, es posible responder preguntas tales como Cules son todas las rdenes colocadas por un cliente especco? y Quin es el cliente para una orden especca?

ER ICA
OrderDate 10/1/2010 10/5/2010 10/4/2010 ShipDate 10/7/2010 10/10/2010 10/10/2010

164

Leccin 6

Comprender la normalizacin
El proceso de normalizacin de datos garantiza que el diseo de la base de datos est libre de cualquier problema que podra llevar a la prdida de la integridad de datos. El anlisis Entidad Relacin le ayuda a garantizar que ha identifcado los elementos de informacin correctos para su base de datos. En la normalizacin, aplica un conjunto de reglas de normalizacin para garantizar que tiene el diseo correcto de base de datos. Esto es, las columnas pertenecen a las tablas correctas con el fn de garantizar que su base de datos est libre de cualquier problema indeseado. Por ejemplo, como parte del anlisis de entidad relacin, puede tener una tabla Book que tiene las siguientes columnas: Books
BookId 1 2 3 4 BookName Cocina ligera Profeca Cambio La Confesin

M
1002

Tome Nota

La normalizacin puede ayudarle a garantizar un diseo de base de datos correcto, pero no puede garantizarle que tiene los elementos de informacin correctos para empezar.

ET

Primera Forma Normal


Con el fn de que una tabla est en la primera forma normal (1NF), ninguna de las columnas deber tener mltiples valores en la misma fla de datos. Por ejemplo, si una tabla Customers almacena datos como se muestra abajo, entonces la tabla Customers no est en la 1NF debido a que la columna PhoneNumber est almacenando ms de un valor.

CI

BE

Cada uno de estos problemas puede ser reparado siguiendo el proceso de normalizacin. Hay cinco formas normales, estas formas son utilizadas como parte del proceso de normalizacin. Esta leccin solo discute las primeras tres, ya que son las requeridas en la mayora de los casos.

RO

www.pdftron.com
Pero este diseo sufre de los siguientes tres problemas:

Anomala de Insert: La anomala de Insert es una situacin donde no puede insertar nueva informacin en la base de datos debido a una dependencia no relacionada. Por ejemplo, si desea que su base de datos tenga una nueva CategoryId y un CategoryName para libros de historia, el diseo actual no lo permitir a menos que primero tenga un libro de historia para ubicarlo en esa categora. Anomala de Delete: La anomala delete es una situacin donde la eliminacin de datos le causa prdida no intencionada de otra informacin. Por ejemplo, si fuera a eliminar el BookId 3 de la tabla Books, el hecho de que ha tenido un CategoryName de Negocios ser prdida. Anomala de Update: La anomala update es una situacin donde actualizar un solo dato requiere que mltiples flas sean actualizadas. Por ejemplo, digamos que ha decidido cambiar el nombre de categora de Misterio y Suspenso a solamente Misterio. Con el diseo de tabla actual, tendr que cambiar el nombre de la categora para cada libro en esa categora. Tambin hay el riesgo de que si actualiza el nombre de la categora en una tabla pero no en otra, terminar teniendo datos inconsistentes en la base de datos.

ER ICA
CategoryId CategoryName 1001 Cocina 1002 Misterio y Suspenso 1003 Negocios Misterio y Suspenso

Comprender las Bases de Datos

165

Customer
Id 1 Tome Nota Una prctica general consiste en subrayar el nombre de la columna(s) de una tabla que son parte de la clave principal. 2 3 FirstName Jane John Howard LastName Doe Doe Steel PhoneNumber (503) 555-6874 (509) 555-7969, (509) 555-7970 (604) 555-3392, (604) 555-3393

Customer
Id 1 2 3

ET

CI
Segunda Forma Normal

BE

Crear columnas repetidas tales como PhoneNumber1 y PhoneNumber2 para normalizar la tabla Customer no es una solucin aceptable debido a que la 1NF no permite repetir columnas.

RO
2 3 3

www.pdftron.com
Id 1 2 PhoneNumber (503) 555-6874 (509) 555-7969 Tome Nota (509) 555-7970 (604) 555-3392 (604) 555-3393

CustomerPhones

Aqu, la tabla Customer y la tabla CustomerPhones estn ambas en la 1NF. Ambas tablas tienen una clave principal (Id en la primer tabla y la combinacin de Id y PhoneNumber en la segunda tabla) que establece una relacin entre ellas. Dando cualquier Id para un cliente, puede encontrar todos los nmeros telefnicos para ese cliente sin ninguna confusin. Por otra parte, LastName no es una clave principal debido a que el apellido tendr entradas duplicadas.

Para que una tabla est en la segunda forma normal (2NF), primero debe cumplir los requerimientos para 1NF. Adems, la 2NF requiere que todas las columnas que no son clave sean funcionalmente dependientes de toda la clave principal. Con el fn de comprender la 2NF, primero debe comprender la dependencia funcional. Tomemos el ejemplo de la tabla Customers de arriba. En la tabla Customers, la columna Id es la clave principal, ya que identifca de forma nica a cada fla. Las columnas FirstName y LastName no son columnas clave debido a que no son parte de la clave principal. Tanto FirstName y LastName son funcionalmente dependientes de Id debido a que, dando un valor de Id, siempre puede encontrar un valor para el FirstName y LastName correspondiente sin ninguna ambigedad. No hay una columna que no sea clave en la

ER ICA
FirstName Jane John LastName Doe Doe Howard Steel

Para que esta tabla este en la 1NF, necesita dividir la tabla en dos:

166

Leccin 6

Tome Nota La 2NF solo aplica a tablas que tengan claves principales compuestas (mltiples columnas juntas forman una clave principal). Los valores combinados de todos los cambios en una clave principal compuesta deben ser nicos. Si una tabla satisface la 1NF y tiene una sola columna en la clave principal, entonces la tabla tambin se ajusta a 2NF.

tabla Customers que no sea funcionalmente dependiente de la clave principal. Las tablas Customer y CustomerPhones ya estn en la 2NF. Sin embargo, tome el ejemplo de la siguiente tabla: Ordenes
OrderId 101 102 103 CustomerId 1 2 1 OrderDate 10/1/2010 10/5/2010 10/4/2010 CustomerName Jane Doe John Doe Jane Doe

Aqu, las columnas OrderId y CustomerId juntas identifcan una fla nica y por lo tanto hacen una clave principal compuesta. Sin embargo, la columna OrderDate es funcionalmente dependiente solo en OrderId, y CustomerNamees dependiente solo en CustomerId. Esto viola la 2NF debido a que las columnas que no son clave son funcionalmente dependientes en parte de la clave principal. Una manera posible en la que puede modifcar la tabla Orders para que se ajuste a la 2NF es sacar a CustomerName fuera de la tabla y tener solo tres columnas OrderId, CustomerId y OrderDate, donde solo OrderId es la clave principal. En esta solucin, tanto CustomerId y OrderDate son funcionalmente dependientes en OrderId y en consecuencia se ajusta a la 2NF.

BE
101 102 103

Items

RO
ItemId 100 11 525 ItemId 101 102 103

www.pdftron.com
Tercera Forma Normal
La tercera forma normal (3NF) requiere que 2NF debe cumplirse y que no haya dependencia funcional entre los atributos que no son clave. En otras palabras, cada atributo que no es clave debe ser dependiente solo de la clave principal y nada ms. Por ejemplo, considere la siguiente tabla:
SupplierId ReorderFax (514) 555-2955 (514) 555-9022 (313) 555-5735

ET

CI
Items

Aqu ItemId es la clave principal. El ReorderFaxes un nmero de fax para el proveedor y por lo tanto es funcionalmente dependiente en el SupplierId. Para satisfacer el requerimiento de 3NF, esta tabla debe ser descompuesta en dos tablas: Items (ItemId, SupplierId) y Supplier (SupplierId, ReorderFax).

M
SupplierId 100 11 525

ER ICA

Comprender las Bases de Datos

167

; Listo para la certicacin? Comprende las bases de los sistemas de administracin de bases de datos relacionales? USD 6.1

Supplier
SupplierId 100 11 525 ReorderFax (514) 555-2955 (514) 555-9022 (313) 555-5735

EN RESUMEN

Los datos son esenciales para muchas aplicaciones de negocios y como desarrollador le gusta pasar mucho tiempo trabajando en tareas relacionadas con informacin. En esta seccin aprender cmo utilizar el lenguaje de consulta estructurado (SQL) y los procedimientos almacenados de SQL Server para seleccionar, insertar, actualizar y eliminar informacin. SQL es el lenguaje utilizado por la mayora de los sistemas de bases de datos para administrar datos en la base de datos. comandos de SQL pueden permitirle recuperar y actualizar datos. Los comandos de SQL tambin le permiten crear y administrar objetos de bases de datos tales como tablas. SQL puede ser considerado como un lenguaje de programacin para bases de datos relacionales. Sin embargo, SQL es declarativo por naturaleza, como opuesto a la naturaleza imperativa de los lenguajes de programacin ms comunes.

ET

CI

Trabajar con consultas de SQL

Las sentencias SELECT, INSERT, UPDATE y DELETE son los cuatro tipos principales de sentencias SQL utilizadas para manipular datos en SQL Server. Utilizando consultas ad-hoc SQL es una manera fexible para trabajar con una base de datos de SQL Server. En esta leccin, aprender acerca de lo esencial de los cuatro tipos principales de sentencias de SQL que le ayudan a manipular los datos de SQL Server:

BE

RO

www.pdftron.com
En SQL, le dice a la base de datos lo que necesita hacer y es trabajo de la base de datos averiguar cmo hacerlo. Por ejemplo, puede decir: seleccionar las primeras 10 flas de una tabla. Compare esto con un lenguaje de programacin imperativo tal como C#, donde necesita especifcar en detalle cmo debe ser desempeado el trabajo: por ejemplo, crear un ciclo que se ejecute diez veces, establezca e inicialice variables, mover el registro de punteros, etc. SQL es un estndar ANSI (Instituto Nacional Americano de Estndares), pero diferentes proveedores de bases de datos han implementado sus propias extensiones al estndar SQL. La implementacin de Microsoft SQL Server de SQL es llamado Transact-SQL (T-SQL). Hay dos maneras principales para entregar T-SQL a SQL Server. Puede, ya sea utilizar sentencias ad-hoc que son ejecutadas directamente o utilizar procedimientos almacenados. Los procedimientos almacenados con una coleccin de sentencias SQL y de programacin lgica que es almacenada en el servidor de base de datos como objetos nombrados.

ER ICA

Comprender los mtodos de consulta de bases de datos

168

Leccin 6

Las sentencias SELECT le permiten recuperar informacin almacenada en la base de datos. Las declaraciones INSERT le permiten agregar nueva informacin a la base de datos. Las sentencias UPDATE le permiten modifcar informacin existente en la base de datos. Las sentencias DELETE le permiten eliminar informacin de la base de datos.

Conectarse a una base de datos de SQL server

Tome Nota En la edicin del Visual Studio Express, la ventana del Explorador de Servidores se llama Explorador de Bases de Datos y puede abrirse seleccionando Ver, Otras Ventanas, Explorador de Bases de Datos.

En esta leccin, aprender como trabajar con una base de datos de Microsoft SQL Server. Si no tiene acceso a una versin reciente de SQL Server, puede descargar el SQL Server 2008 Express gratis desde microsoft.com/express/database. Esta leccin utilice la base de datos de ejemplo de SQL Server de Northwind. Esta base de datos no est instalada por defecto con SQL Server pero puede descargar el archivo de la base de datos siguiendo las instrucciones en msdn.com/en-us/library/ms143221.aspx.

2. En el cuadro de dilogo de Agregar Conexin, navegue al archivo de base de datos de la base de datos de Northwind (northwnd.mdf), como se muestra en la Figura 6-3.

Figura 6-3

Conectndose a una base de datos

ET

CI

BE

RO

www.pdftron.com
Conectarse a la base de datos de Northwind
PREPRESE. Antes de empezar estos pasos, asegrese de lanzar el Microsoft Visual Studio. 1. Abra la ventana de Explorador de Servidores. Seleccione el nodo Conexiones de Datos y haga clic en el botn Conectar con Base de Datos en la barra de herramientas del Explorador de Servidores.

El siguiente ejercicio muestra como conectarse y utilizar la base de datos de Northwind con Visual Studio.

ER ICA

Necesita conectarse a una base de datos de SQL Server antes de que pueda manipular informacin.

Comprender las Bases de Datos

169

3. Utilice la Autenticacin de Windows como modo de autenticacin y presiones el botn Probar Conexin para asegurarse que puede conectarse a la base de datos. Finalmente, haga clic en el botn Aceptar para agregar la conexin a la base de datos. 4. Una vez que la conexin a la base de datas es establecida, la base de datos est disponible como conexin bajo el nodo de Conexiones de Datos en el Explorador de Servidores. Expanda la base de datos para ver tablas, procedimientos almacenados y otros objetos de la base de datos, como se muestra en la Figura 6-4. Figura 6-4
Accediendo a una base de datos a travs del Explorador de Servidores

Figura 6-5

ET
PAUSA. Acceder a los datos desde la base de datos de Northwind en el siguiente ejercicio.

CI

Propiedades de la base de datos

BE

RO

www.pdftron.com
5. Haga clic derecho en el nodo NORTHWND.MDF y seleccione propiedades. Se mostrar la ventana de propiedades en la Figura 6-5. Note la propiedad de Cadena de Conexin. Se mostrar el valor de esta propiedad para conectarse a esta base de datos desde una aplicacin de C#.

ER ICA

170

Leccin 6

Ejecutar Consultas SQL


Hay muchas maneras disponibles para comunicarse con un SQL Server con el fn de ejecutar sus consultas. Hay muchas maneras por las cuales puede enviar consultas a un SQL Server. Por ejemplo, puede utilizar:

Las utilidades de SQL Query Analyzer y osqlcommand-prompt son herramientas instaladas con SQL Server.

Ejecutar consultas desde Visual Studio

PREPRESE. Para utilizar las aplicaciones de Visual Studio IDE y C# para ejecutar consultas, desempee lo siguiente:

SELECT * FROM Customers

Figura 6-6

ET

CI

Diseador de Consultas de Visual Studio

BE

3. Desde el men de Visual Studio, seleccione Diseador de Consultas, la opcin Ejecutar SQL o haga clic en el botn de Ejecutar SQL en la barra de Herramientas. La sentencia SQL es enviada al servidor SQL para la ejecucin y sus resultados son mostrados como se muestra en la Figura 6-6.

RO

www.pdftron.com
2. En el panel SQL del diseador de consulta (el cual es el rea que muestra el texto de la consulta), modique la sentencia SQL a lo siguiente:

1. Seleccione la base de datos de Northwind en el Explorador de Servidores. Haga clic derecho y seleccione Nueva Consulta, esta accin abre un Diseador de Consultas y muestra un cuadro de dilogo de Agregar Tabla. Seleccione la tabla Customers y haga clic en Agregar. Haga clic en Cerrar en el cuadro de dilogo de Agregar Tabla.

ER ICA

Entorno de Desarrollo Integrado de Visual Studio (IDE) Aplicacin C# SQL QueryAnalyzer Utilidad osqlcommandprompt

Comprender las Bases de Datos

171

El Diseador de Consultas en Visual Studio muestra cuatro paneles. Desde arriba para abajo, los paneles estn como sigue:

El Panel de Diagrama, el cual muestra las tablas involucradas en la consulta y la relacin entre estas tablas, as como tambin todas las columnas que contiene la tabla. El Panel de Criterios, el cual muestra las columnas que han sido seleccionadas como parte de la consulta, as como tambin informacin para ordenar y fltrar. El panel SQL, el cual muestra la sentencia SQL actual que ser ejecutada. El panel de Resultados, el cual muestra los resultados (si hay) despus de que la consulta ha sido ejecutada.

La barra de herramientas del Diseador de Consultas incluye botones que puede utilizar para esconder o mostrar cualquiera de estos cuatro paneles. Para esta leccin, necesita solo el panel SQL y el panel de Resultados.

Ejecutar Consultas desde una Aplicacin de C#

PREPRESE. Para ejecutar consultas desde aplicaciones de C#, haga lo siguiente: 1. Cree un nuevo proyecto de Aplicacin para Windows llamado Query CS.

ET

CI

BE
} }

RO
{

www.pdftron.com
3. Haga doble clic en el control Button para generar un manejador de evento para su evento Click. Modique el manejador de evento como se muestra abajo: private void button1_Click( object sender, EventArgs e) { if (textBox1.TextLength > 0) SelectData(textBox1.Text); 4. Agregue el siguiente mtodo a la clase. Asegrese de cambiar la cadena de conexin 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 conexin // 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);

2. En el Formulario para Windows, agregue un control TextBox, un control Button y un control DataGridView. Establezca la propiedad MultiLine del TextBoxaTrue. Establezca la propiedad Text del control Button para Ejecutar SQL.

ER ICA

172

Leccin 6

} catch (Exception ex) { MessageBox.Show(ex.Message); }

DataTable table = new DataTable(); dataAdapter.Fill(table); dataGridView1.DataSource = table;

5. Agregue la siguiente directiva using al cdigo: usingSystem.Data; usingSystem.Data.SqlClient;

6. Seleccione Depurar y despus Iniciar Depuracin 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
Ejecutando consultas desde una aplicacin de C#

ET

Seleccionar Datos
La sentencia SELECT es utilizada para recuperar datos desde una o ms tablas de la base de datos. La sentencia SELECT generalmente es de la siguiente forma:
SELECT lista_de_campos FROM lista_de_tablas

CI

BE

El cdigo en este ejercicio implementa un mtodo 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 acta como una tubera entre SQL Server y el DataTable para recuperar datos. El mtodo 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.

RO

www.pdftron.com

ER ICA

Comprender las Bases de Datos

173

WHERE clausula_where GROUP BY agrupado_por_clausula HAVING clausula_teniendo ORDER BY clausula_ordenar_por

Cada una de estas lneas de cdigo en la sentencia SELECT es llamada clusula. 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, tambin puede utilizar el siguiente atajo en lugar de enlistar explcitamente todos los campos:
SELECT * FROM Orders

ET

CI

BE

RO

www.pdftron.com
Select OrderId, Customers.CustomerId, ContactName From Orders, Customers

Tambin puede seleccionar informacin desde mltiples tablas, por ejemplo:

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 cul desea referirse.

Si ejecuta esta consulta, obtendr mucho ms registros de los que podra haber esperado. Esto sucede debido a que aunque le dice a SQL Server cuales tablas incluir, no incluy ninguna informacin para cmo 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 unin es llamado cross join y no es muy til en este caso.

Una consulta ms til, por supuesto, coincidira 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.

ER ICA

174

Leccin 6

Pero y si desea ver solo algunas de las flas en la tabla? Puede utilizar una clausula WHERE. La clusula WHERE evala a cada fla para una condicin y decide si incluirla o no en los resultados. Por ejemplo:
SELECT * FROM Orders WHERE ShipCountry = Canada Tome Nota El delimitador estndar para texto y fechas en SQL es una comilla simple.

Tambin puede combinar mltiples condiciones en una sola clusula WHERE. Por ejemplo:
SELECT * FROM Orders

ET

CI
SELECT *

BE
SELECT * FROM Orders ORDER BY OrderDate FROM Orders

Por defecto, SQL no garantiza que los resultados estn en un orden particular, sin embargo, puede utilizar la clusula ORDER BY para garantizar que los datos son regresados en un orden particular. Por ejemplo, para enlistar las rdenes basadas en la fecha de orden puede utilizar la siguiente consulta:

WHERE (ShipCountry = Canada) AND (OrderDate>= 01/01/97) AND (OrderDate<= 01/31/97)

Puede modifcar el tipo de orden utilizando ya sea la palabra clave ASC (para orden ascendente) o DESC (para orden descendiente). El tipo de orden por defecto es ascendente. La siguiente consulta enlista las rdenes ms recientes en la parte superior:

RO

www.pdftron.com
AND (OrderDate>= 01/01/97) AND (OrderDate<= 01/31/97)

Aqu las condiciones WHERE fltran las rdenes donde ShipCountry es Canad y la fecha de orden es en Enero de 1997.

WHERE (ShipCountry = Canada)

ER ICA

Aqu la clusula 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.

Comprender las Bases de Datos

175

WHERE (ShipCountry = Canada) AND (OrderDate>= 01/01/97) AND (OrderDate<= 01/31/97) ORDER BY OrderDate DESC

Es muy comn para las aplicaciones de negocios el solicitar informacin agregada o resumida. Tales requerimientos pueden ser direccionados utilizando la clusula GROUP BY y las funciones agregadas. Por ejemplo, puede utilizar la siguiente consulta para encontrar a cules pases est embarcando ms en sus rdenes:
SELECT ShipCountry, COUNT (ShipCountry) AS OrderCount FROM Orders GROUP BY ShipCountry

Figura 6-8

Resumiendo informacin utilizando la clusula GROUP BY

ET

CI

BE

RO

www.pdftron.com
Esto mostrar el nombre del pas seguido por el nmero total de rdenes que embarca a ese pas. La clusula ORDER BY ordena los resultados y ubica los pases con ms rdenes en la parte superior de la lista. Puede pensar en la clusula GROUP BY como creador de buckets, en este caso uno para cada pas. Conforme cada motor de base de datos examina cada registro, lo coloca en el bucket apropiado. Despus de que este proceso es llevado a cabo, el motor de base de datos cuenta el nmero de registros que terminaron en cada bucket y genera una fla para cada uno. La Figura 6-8 muestra el inicio de los resultados de esta consulta.

ORDER BY OrderCount DESC

ER ICA

176

Leccin 6

En la sentencia SQL previa, Count es una funcin agregada, una funcin que retorna un resultado basado en un grupo de flas. T-SQL soporta un nmero de funciones agregadas. Aqu hay algunos de los ms comunes: Count: Retorna el nmero de registros. Sum: Valor total en una columna dada. Avg: Valor promedio en una columna dada. Min: Valor ms pequeo en una columna dada. Max: Valor ms grande en una columna dada.

Actualizar datos

Otra sentencia SQL muy til es la sentencia UPDATE. El propsito de una sentencia UPDATE es actualizar o modifcar datos. Por ejemplo, puede actualizar un campo en un registro en la tabla Customers utilizando esta consulta:
UPDATE Customers

SET ContactName = Maria Anderson Tome Nota WHERE CustomerId = ALFKI

No est limitado a actualizar un solo registro. Si la clusula WHERE selecciona mltiples registros, todos los registros sern actualizados:
UPDATE Customers

ET
Tome Nota Es altamente recomendado que revise la clusula WHERE para cada sentencia UPDATE. Si no es cuidadoso, podra actualizar datos de ms las de las que desea.

CI

BE
UPDATE Customers CITY = Tokyo

SET Country = United States WHERE Country = USA

Tambin puede actualizar ms de un campo a la vez con la sentencia UPDATE:

SET ContactName = Maria Anderson,

WHERE CustomerId = ALFKI

RO

www.pdftron.com
En una sentencia UPDATE la clusula SET es requerida y puede ser especicada solo una vez.

En esta consulta, la palabra clave SET le dice a SQL Server cuales columnas actualizar y la palabra clave WHERE le dice cuales flas actualizar. En la tabla Customers, el CustomerId es una clave principal y nicamente identifca a una sola fla. De manera que esta sentencia update puede actualizar a lo mucho una fla.

ER ICA

La sentencia UPDATE es utilizada para actualizar datos en las tablas de la base de datos.

Comprender las Bases de Datos

177

Insertar Datos
La sentencia INSERT es utilizada para agregar una o ms flas a la tabla de la base de datos. La sentencia INSERT enlista los campos para una tabla objetivo seguido por un conjunto de valores para insertar en esos campos. Por ejemplo, la siguiente sentencia INSERT inserta una fla en la tabla OrderDetails:
INSERT INTO [Order Details]

VALUES (10248, 2, 19.00, 2, 0)

Se requieren corchetes cuando el nombre de las tablas o campos contienen espacios. Aqu, el primer conjunto de parntesis tienen una lista de columna y el Segundo conjunto mantiene el valor a insertar. Si un campo tiene un valor por defecto, puede ser nulo o es un campo de entidad, puede dejarlo fuera de la lista de campos, como en el siguiente ejemplo:
INSERT INTO [Order Details]

ET

CI

BE

RO
INSERT INTO Products FROM Suppliers

www.pdftron.com
VALUES (10249, 2, 19.00, 2)

Esto funciona, aunque no fue especifcado, un valor para el campo Discount. Tambin, puede reordenar esta lista de campos mientras que reordene la lista de valores para que coincidan:
INSERT INTO [Order Details]

(ProductId, OrderId, UnitPrice, Quantity) VALUES (2, 10250, 19.00, 2)

La sentencia INSERT no est limitada a insertar un solo registro. Hay un segundo formato que inserta los resultados de una sentencia SELECT en una determinada tabla. Por ejemplo, esa consulta inserta un producto para cada proveedor en la tabla Products:

(SupplierId, ProductName, CategoryId) SELECT SupplierId, Almond, 7

Esto funciona construyendo los resultados de la sentencia SELECT y luego poniendo cada fla retornada por la sentencia SELECT en una tabla determinada. Por supuesto, las columnas aun necesitan coincidir apropiadamente.

(OrderId, ProductId, UnitPrice, Quantity)

ER ICA

(OrderId, ProductId, UnitPrice, Quantity, Discount)

178

Leccin 6

Eliminar datos
La sentencia DELETE es utilizada para mover datos desde tablas de bases de datos. La sentencia DELETE remueve datos de una tabla. Con el fn de practicar y evitar eliminar alguna informacin de la misma base de datos, puede copiar una tabla utilizando una sentencia SELECT tal como:
SELECT * INTO CustomersCopy

Esta sentencia selecciona todos los registros de la tabla Customers y los copia en una nueva tabla llamada Customers Copy. Para eliminar una sola fla de datos de la tabla CustomersCopy, puede utilizar la siguiente sentencia DELETE:
DELETE FROM CustomersCopy WHERE CustomerId = ALFKI

Un procedimiento almacenado es un conjunto de sentencias SQL que es almacenado en la base de datos. Los procedimientos almacenados son nombrados y pueden ser utilizados por mltiples aplicaciones.

ET

Crear y Ejecutar un procedimiento almacenado


El comando CREATE PROCEDURE puede ser utilizado para crear un nuevo procedimiento almacenado. Puede utilizar la palabra clave CREATE PROCEDURE de T-SQL para crear un procedimiento almacenado. Puede ejecutar la sentencia CREATEPROCEDURE desde cualquier interfaz que le permita introducir y ejecutar T-SQL.

CI

BE

En contraste con las consultas ad-hoc, los procedimientos almacenados son consultas almacenadas permanentemente en el SQL Server. En muchas maneras, puede pensar en un procedimiento almacenado como un SQL equivalente a un mtodo C#.

Los procedimientos almacenados tienen dos benefcios principales, primero, los puede utilizar para guardar sentencias SQL complejas para ejecuciones futuras. Segundo, SQL Server compila los procedimientos almacenados de forma que se ejecutan ms rpido que las consultas ad-hoc. En esta seccin, aprender cmo crear y ejecutar procedimientos almacenados.

RO

www.pdftron.com
DELETE FROM CustomersCopy

Sea cuidadoso: si omite la clusula WHERE, eliminara toda la informacin de la tabla:

Trabajar con procedimientos almacenados

ER ICA

FROM Customers

Comprender las Bases de Datos

179

Crear un procedimiento almacenado desde visual studio


PREPRESE. Para crear un procedimiento almacenado desde Visual Studio, haga lo siguiente: 1. Abra el Explorador de Servidores y seleccione la base de datos de Northwind. Haga clic derecho en el nodo de Procedimientos Almacenados y seleccione la opcin Agregar Nuevo Procedimiento Almacenado. 2. En el diseador de procedimiento almacenado, remplace el texto repetitivo con el siguiente cdigo:

AS

SELECT * FROM Customers

Where Country = France RETURN

Los procedimientos almacenados parametrizados le permiten pasar argumentos de tiempo de ejecucin a SQL Server. La habilidad de pasar parmetros incrementa signifcativamente el poder de los procedimientos almacenados. El valor del parmetro puede ser proporcionado en tiempo de ejecucin para los procedimientos almacenados. Considere que desea encontrar las ventas totales para cierto cliente en la base de datos de Northwind. Debera ser capaz de especifcar el CustomerId en tiempo de ejecucin.

ET

CI

BE

Trabajar con procedimientos almacenados parametrizados

RO

www.pdftron.com
Tome Nota Puede utilizar la sentencia ALTER PROCEDURE para modicar la denicin de un procedimiento almacenado existente. 5. Tambin puede ejecutar este procedimiento almacenado desde el proyecto QueryCS que cre antes. En lugar de una sentencia SQL, solo teclee el nombre del procedimiento almacenado y presione el botn Ejecutar SQL. El resultado del procedimiento almacenado es visualizado en el Formulario de Windows.

4. Para ejecutar un procedimiento almacenado, haga clic en el procedimiento almacenado en el Explorador de Servidores y seleccione Ejecutar. El resultado del procedimiento almacenado es visualizado en la ventana de salida.

Crear un procedimiento almacenado parametrizado


PREPRESE. Para crear un procedimiento almacenado parametrizado, haga lo siguiente: 1. Abra el Explorador de Servidores y seleccione la base de datos de Northwind. Haga clic derecho en el nodo de Procedimientos Almacenados y seleccione la opcin Agregar Nuevo Procedimiento Almacenado. 2. En el diseador de procedimiento almacenado, remplace el texto repetitivo con el siguiente cdigo:

3. Guarde el procedimiento almacenado. El procedimiento almacenado ahora es agregado a la base de datos.

ER ICA

CREATE PROCEDURE GetCustomersFromFrance

180

Leccin 6

CREATE PROCEDURE dbo.GetCustomerSales ( @CustomerIdchar(5), @TotalSales money OUTPUT )

SELECT @TotalSales = SUM(Quantity * UnitPrice) FROM (Customers INNER JOIN Orders

ON Customers.CustomerId = Orders.CustomerId) INNER JOIN [Order Details]

ON Orders.OrderId = [Order Details].OrderId WHERE Customers.CustomerId = @CustomerId

Figura 6-9

El cuadro de dilogo Ejecutar procedimiento almacenado aparece para los valores del parmetro

ET

CI

BE

En este procedimiento almacenado, tanto @CustomerId y @TotalSales son parmetros. @ CustomerId es un parmetro de entrada, debe proporcionar este parmetro cuando ejecuta el procedimiento almacenado. @TotalSales es un parmetro de salida, retorna un valor del procedimiento almacenado. Cuando ejecuta este procedimiento almacenado desde Visual Studio, obtiene un cuadro de dilogo que le pide que introduzca el valor para todos los parmetros, como se muestra en la Figura 6-9.

RO

www.pdftron.com
RETURN 3. Guarde el procedimiento almacenado. El procedimiento almacenado ahora es agregado a la base de dados.

ER ICA

AS

Comprender las Bases de Datos

181

Para ejecutar este procedimiento almacenado, introduzca ALFKI como el valor para @ CustomerId e introduzca NULL como el valor para @TotalSales. Cuando presiona el botn OK, el valor calculado del parmetro de salida, @TotalSales, es visualizado en la ventana de Salida. No puede, sin embargo, ejecutar un procedimiento almacenado desde el proyecto QueryCS, ya que el cdigo no puede aceptar parmetros.

Ejecutar procedimientos almacenados parametrizados desde C#

1. Cree un nuevo proyecto de Aplicacin para Windows llamado ParameterizedSP.

2. Ubique dos controles Label (label1 y TotalSalesLabel), un TextBox (CustomerIdTextBox) y un Button (GetTotalSalesButton) y ordene los controles como se muestra en la Figura 6-10. 3. Haga doble clic en el control Button para generar un manejador de evento para su evento Click. Modique el manejador de evento como se muestra abajo: private void GetTotalSalesButton_Click( { object sender, EventArgs e)

CI

ET

BE
{ try {

RO
}

www.pdftron.com
TotalSalesLabel.Text = String.Format( Total Sales: {0}, GetTotalSales(CustomerIdTextBox.Text)); 4. Agregue el siguiente mtodo a la clase. Asegrese de cambiar la cadena de conexin para que coincida con la ruta local del archivo de la base de datos en su computadora: private double GetTotalSales(string customerId) doubletotalSales = -1; // Cambia el string de conexin // para coincidir con su sistema. @Data Source=.\SQLEXPRESS; + @AttachDbFilename= + @c:\SqlSampleDB\NORTHWND.MDF; + @Integrated Security=True; + @Connect Timeout=30;User Instance=True; SqlConnection connection = newSqlConnection(connectionString); stringconnectionString =

ER ICA

PREPRESE. Para ejecutar procedimientos almacenados parametrizados desde C#, desempee las siguientes tareas:

182

Leccin 6

SqlCommand command = connection.CreateCommand(); command.CommandType = Tome Nota Si agrega una nueva la a la tabla con una columna de identidad, puede utilizar la variable de SQL Server @@IDENTITY para recuperar el valor de la columna de identidad para la la recin creada. CommandType.StoredProcedure; command.CommandText = GetCustomerSales; command.Parameters.AddWithValue( @CustomerId, customerId); @TotalSales, null); = DbType.Currency; command.Parameters.AddWithValue(

command.Parameters[@TotalSales].DbType

command.Parameters[@TotalSales].Direction = ParameterDirection.Output; connection.Open(); command.ExecuteNonQuery(); totalSales = Double.Parse( .Value.ToString()); connection.Close(); } { }

catch (Exception ex)

ET
Figura 6-10
Ejecutando procedimientos almacenados parametrizados desde una aplicacin de C#

CI

BE
}

MessageBox.Show(ex.Message); returntotalSales;

5. Agregue la siguiente directiva using al cdigo: usingSystem.Data; using System.Data.SqlClient;

6. Seleccione Depurar, Iniciar Depuracin para ejecutar el proyecto. Introduzca un CustomerId vlido. Podr ver la salida como se muestra en la Figura 6-10.

RO

www.pdftron.com
command.Parameters[@TotalSales]

ER ICA

Comprender las Bases de Datos

183

En el cdigo, los parmetros son representados por objetos SqlParameter. El cdigo funciona estableciendo el valor para el parmetro @CustomerId, ejecutando el objeto SqlCommand correspondiente al procedimiento almacenado y luego recuperando la propiedad Value del parmetroTotalSales.
Tome Nota El objeto utilizado con la sentencia using debe implementar la interfaz de IDisposable.

El cdigo previo tiene las siguientes lneas:


connection.Open(); command.ExecuteNonQuery(); totalSales = Double.Parse( .Value.ToString()); connection.Close(); command.Parameters[@TotalSales]

Aqu, primero abre la conexin a la base de datos, haga lo que necesite hacer con la conexin y entonces fnalmente cierre la conexin. El objeto que mantiene las referencias de la conexin a la base de datos utiliza muchos recursos de sistema y es un recurso costoso. De forma que, se recomienda que cierre este objeto tan pronto como acabe de utilizarlo. Si no cierra la conexin est creando una falta de memoria en el programa que podra impactar su desempeo. C# tambin le da una sentencia using que ayuda a garantizar que los objetos costosos tales como las conexiones a bases de datos son automticamente cerradas cuando recin acaba de trabajar con ellas. Esta es una versin alternativa al cdigo de arriba que hace uso de la sentencia using para cerrar automticamente la conexin a la base de datos.
// deshechar objetos con la sentencia using using (connection) { connection.Open(); command.ExecuteNonQuery(); totalSales = Double.Parse( command.Parameters[@TotalSales] .Value.ToString()); }

ET
; Listo para la certicacin?

CI
; Listo para la certicacin? Comprende los distintos mtodos de consulta de bases de datos? USD 6.2 Comprende los mtodos de conexin a bases de datos? USD 6.3

BE

RO

www.pdftron.com
La sentencia using defne un alcance para el objeto de la conexin, cuando el cdigo alcanza el fn del alcance, el objeto de la conexin es cerrado automticamente y todos los recursos son liberados.

ER ICA

184

Leccin 6

Comprender los mtodos de conexin a bases de datos


EN RESUMEN

Las aplicaciones de negocios pueden necesitar trabajar con datos en varios formatos. Tambin puede necesitar trabajar con datos almacenados dentro de archivos planos, archivos XML y objetos en memoria. El .NET Framework proporciona clases que son optimizadas para trabajar con archivos planos, archivos XML y objetos en memoria. La informacin almacenada dentro de archivos planos puede ser manejada utilizando las clases en el espacio de nombre de System.IO. Para trabajar con datos XML, las clases en el espacio de nombres de System.Xml pueden ser utilizadas. Finalmente, para trabajar con objetos tales como un DataSet, se utilizan clases del espacio de nombres de System.Data. Aprender ms acerca de cmo trabajar con cada uno de estos formatos en las siguientes secciones.

Trabajar con Archivos Planos

ET

CI

BE

Histricamente, antes de la llegada de las bases de datos modernas, los archivos planos eran muy populares para almacenar y organizar informacin. Los archivos planos an son tiles pero slo en casos limitados en lugar de bases de datos con propsitos generales. Algunos de los lugares donde se utilizan los archivos planos son en un sistema operativo o archivos de confguracin de aplicacin, cuando se transfere informacin a sistemas remotos y cuando se migran datos entre sistemas no compatibles. La entrada y salida con base en archivos en el .NET Framework gira en torno al concepto de streams y backingstore. Un stream es un fujo de datos en bruto. Un almacn de respaldo es la fuente o destino de un stream. Un almacn de respaldo podra ser cualquier cosa tal como un archivo de disco, memoria, conexin de red, etc. Puede encontrar clases para trabajar con streams y almacenes de respaldo en el espacio de nombres de System.IO.

Los archivos planos pueden ser datos ya sea en formato de texto plano o en formato binario. Los archivos de texto a menudo son organizados como lneas de texto separadas por caracteres de fn de lnea. Las clases StreamReader y StreamWriter le proporcionan una manera sencilla de manipular tales archivos de texto. Los archivos binarios almacenan su contenido como una secuencia de bytes. Aunque los archivos binarios no son legibles por el humano como los archivos de texto, son capaces de almacenar diferente variedad de datos tales como imgenes, sonidos, video, etc. Siempre necesitar un programa de computadora para interpretar el contenido de un archivo

RO

www.pdftron.com
Un archivo plano generalmente contiene una fla de datos por lnea y las columnas son separadas por delimitadores tales como comas o tiene una longitud fja. Los datos en el archivo plano pueden ser texto plano o binario. Estos archivos son llamados archivos planos para distinguirlos de formularios ms estructurados de almacenamiento tales como bases de datos relacionales y archivos XML.

Un archivo plano es como una tabla de una base de datos que esta almacenada dentro de un archivo de disco standalone.

ER ICA

Comprender las Bases de Datos

185

binario. Las BinaryReader y BinaryWriter le proporcionan una manera sencilla para manipular los archivos binarios. En el siguiente ejercicio seleccione las columnas de la tabla Customers y las escribe en un archivo de texto. Despus abre el archivo de texto y visualiza su contenido en la ventana de Consola.

Leer de y escribir a un archivo de texto


PREPRESE. Para leer de y escribir un archivo de texto, haga lo siguiente: 1. Cree un nuevo proyecto de Aplicacin de Consola llamado WorkingWithTextFiles.

2. Agregue el siguiente cdigo a la clase Program. Necesitar corregir la ruta de su base de datos de Northwind en el cdigo: static void Main(string[] args) { stringmyDocumentsPath =

Environment.GetFolderPath(

CI

ET

BE
try {

RO
} stringfleName) { SqlCommand command =

www.pdftron.com
+ @\CustomerList.txt); + @\CustomerList.txt); DisplayTextFile(myDocumentsPath static private void CopyDataToTextFile( // Cambia elstring de conexin // para coincidir con su sustema. @Data Source=.\SQLEXPRESS; + @AttachDbFilename= + @c:\SqlSampleDB\NORTHWND.MDF; + @Integrated Security=True; + @Connect Timeout=30;User Instance=True; SqlConnection connection = newSqlConnection(connectionString); connection.CreateCommand(); stringconnectionString =

CopyDataToTextFile(myDocumentsPath

Environment.SpecialFolder.MyDocuments);

ER ICA

186

Leccin 6

command.CommandText = SELECT CustomerId, CompanyName, + ContactName, Phone FROM Customers; using (connection) { connection.Open(); SqlDataReader reader = command.ExecuteReader(); using (StreamWritersw = { while (reader.Read()) { stringcustomerRow = reader.GetValue(0), reader.GetValue(1), reader.GetValue(2),

newStreamWriter(fleName))

sw.WriteLine(customerRow); } }

ET

CI
} } { try {

BE
} } { { string line;

catch (Exception ex) Console.WriteLine(ex.Message);

static void DisplayTextFile(string fleName)

using (StreamReadersr = newStreamReader(fleName))

RO

www.pdftron.com
reader.GetValue(3));

String.Format({0}, {1}, {2}, {3},

ER ICA

Comprender las Bases de Datos

187

while ((line = sr.ReadLine()) != null) { Console.WriteLine(line); } } } catch (Exception ex) Console.WriteLine(ex.Message); } } {

3. Agregue la siguiente directiva using a su cdigo: usingSystem.Data.SqlClient; using System.IO;

Trabajar con XML

XML (Lenguaje de Etiquetado Extensible) es un formato basado en texto para la representacin de datos estructurados. En XML, puede almacenar tanto datos y metadatos (informacin acerca de los datos almacenados). Por ejemplo, este es un poco de XML que representa datos para dos clientes:
<?xml version=1.0 encoding=utf-8?> <!--Customer List--> <Customers> <Customer Id=ALFKI> <CompanyName>AlfredsFutterkiste</CompanyName> <Phone>030-0074321</Phone> </Customer> <Customer Id=EASTC> <CompanyName>Eastern Connection</CompanyName> <Phone>(171) 555-0297</Phone>

ET

CI

BE

RO

www.pdftron.com
El cdigo en este ejercicio primero abre una nuevo objeto StreamWriter y llama a su mtodo WriteLine varias veces para escribir el texto al archivo de texto. Luego crea un objeto StreamReader para leer el texto desde el archivo que ha sido creado utilizando el mtodo ReadLine. Cuando ya no hay datos por leer, el objeto ReadLine retornar un valor nulo. El cdigo utiliza este hecho para determinar cundo terminar de leer desde el archivo de texto.

4. Genere y ejecute el programa, Verique la carpeta Mis Documentos por el archivoCustomerList.txt y verique que los datos del cliente han sido escritos. Tambin verique la salida en la ventana de Consola contra el contenido del archivo.

ER ICA

188

Leccin 6

</Customer> </Customers>

Aun sin saber nada acerca de XML, puede comprender el contenido de este archivo solo mirndolo. XML consiste de etiquetas (contenidas dentro de parntesis) y datos. Las etiquetas siempre aparecen en pares, con una de apertura y una de cierre. Por ejemplo, <Customers> es una etiqueta de apertura y </Customers> es una de cierre. La primera lnea de un documento XML es la declaracin XML:
<?xmlversion=1.0 encoding=utf-8?>

Las etiquetas XML que empiezan con los caracteres <? Son llamados instrucciones de procesamiento. Esta instruccin de procesamiento no dice que el documento es un documento XML, que se ajusta a las especifcaciones de XML versin 1.0 y utiliza el conjunto de caracteres UTF-8 para sus elementos de datos. Las etiquetas de apertura y de cierre con su contenido se conocen cada una como elemento. Por ejemplo, este es un elemento XML simple del documento de arriba:
<Phone>030-0074321</Phone>

</Customer>

</Customers>

ET

CI

BE

Los documentos XML son jerrquicos por naturaleza. Cada documento XML contiene un solo elemento raz que contiene todo los otros nodos. Un documento XML puede ser visualizado como un rbol de nodos. Los elementos pueden contener atributos. Un atributo es una pieza de informacin que adems describe un elemento:
<Customer Id=ALFKI>

Aqu el elemento Customer incluye un atributo cuyo nombre es Id y cuyo valor es ALFKI.

Finalmente, un documento XML puede contener comentarios. Los comentarios inician con los caracteres <!y terminan con los caracteres-->. XML puede ser ms complejo de lo discutido en esta seccin. Pero estas bases son sufcientes para que comprenda la mayora 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 informacin XML. Las clases para trabajar con informacin XML estn organizadas en el espacio de nombres de System. Xml. Esta leccin se enfoca en las siguientes clases utilizadas comnmente:

RO

www.pdftron.com
<Customer Id=EASTC> <CompanyName>Eastern Connection<Phone> </Phone>(171) 555-0297</CompanyName>

Esto defne un elemento con el nombre Phone cuyo valor es 030-0074321. Los elementos pueden ser anidados y no se pueden sobreponer. Por ejemplo, el siguiente XML es invlido debido a la superposicin entre los elementos CompanyName y Phone:

ER ICA

Comprender las Bases de Datos

189

XmlReaderyXmlWriter: Estas clases proporcionan una manera rpida, sin entrar a cache y solo hacia adelante para leer o escribir datos XML. XmlDocument: Esta clase es una representacin en memoria de datos XML y permite la navegacin y edicin 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

1. Cree un nuevo proyecto de Aplicacin de Consola llamado WorkingWithXmlReader. 2. Agregue el siguiente cdigo al mtodo Main de la clase Program: using (XmlReader reader = { { XmlReader.Create(Customers.xml)) while (reader.Read())

BE CI
} break; break; } }

ET

RO
case CompanyName: if (reader.Read()) Console.Write( reader.Value); } { case Phone: if (reader.Read()) { Console.WriteLine( }

www.pdftron.com
{ switch (reader.Name) { Company Name: {0}, , Phone: {0}, reader.Value);

if (reader.IsStartElement())

ER ICA

PREPRESE. Para leer desde un archivo XML, haga lo siguiente:

190

Leccin 6

} 3. Necesitar agregar la siguiente directiva using al programa: usingSystem.Xml; 4. Agregue un nuevo archivo XML llamado Customers.xml al proyecto. Asegrese que el archivo XML contiene la siguiente informacin: <?xmlversion=1.0 encoding=utf-8?> <!--CustomerList--> <Customers> <CompanyName>AlfredsFutterkiste</CompanyName> <Phone>030-0074321</Phone> </Customer> <Customer Id=EASTC>

<CompanyName>Eastern Connection</CompanyName> <Phone>(171) 555-0297</Phone> </Customer> </Customers>

El cdigo en este ejercicio primero crea una nueva instancia de XmlReader utilizando el mtodo XmlReader.Create. Esto lanzara una excepcin si el archivo no es encontrado. Este programa se terminar cuando el mtodo 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 representacin de datos estructurados. Un DataSet es una representacin 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 fornea. Un DataSet es generalmente creado recuperando informacin desde una fuente de datos tal como una base de datos. Una vez que ha creado un DataSet, puede trabajar con toda la informacin 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 conexin 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 creacin de aplicaciones desconectadas. Las aplicaciones desconectadas son aplicaciones que pueden continuar funcionando sin una conexin 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

BE

RO

www.pdftron.com
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 compaas y sus nmeros telefnicos.

ER ICA

<Customer Id=ALFKI>

Comprender las Bases de Datos

191

coleccin de objetos DataTable. Un DataTable es justo como una tabla de una base de datos relacional. Un objeto DataTable tiene una coleccin de objetos DataColumn que representan las columnas en la tabla. Las flas en el DataTable son representadas por la coleccin DataRow. El DataAdapter acta como un Puente entre la fuente de datos y el DataSet. El DataAdapter almacena la conexin de datos y los comandos de datos necesarios para conectarse a la fuente de datos. El DataAdapter tambin proporciona comandos para la recuperacin de datos desde la fuente de datos y comandos para la actualizacin de la fuente de datos con cualquier cambio.

Tome Nota Tambin 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.

ET

CI

BE

RO

www.pdftron.com
En una aplicacin tpica que crea y actualiza un DataSet, tendr los siguientes pasos: 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. 3. Invocar el mtodo AcceptChanges en el DataSet. Este mtodo 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 mtodo 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 nmero de rdenes para cada cliente.

Leer un objeto DataSet en memoria


PREPRESE. Para leer desde un objeto DataSet en memoria, haga lo siguiente: 1. Cree un nuevo proyecto de Aplicacin de Consola llamado WorkingWithDataSet. 2. Remplace el cdigo en la clase Program con el siguiente cdigo. Asegrese de cambiar la cadena de conexin para que coincida con la ruta local del archivo de la base de datos en su computadora: static void Main(string[] args) {

dbcAdapteryOleDbAdapter. Sin embargo, la clase SQLDataAdapteres optimizada para SQL Server. Por lo tanto, cuando se trabaja con SQL Server, es preferible utilizar la claseSQLDataAdapter.

ER ICA

El .NET Framework proporciona tres tipos de clases DataAdapter para trabajar con distintos tipos de Fuentes de datos:

192

Leccin 6

WorkingWithDataSet();

static void WorkingWithDataSet() { string cString = @Data Source=.\SQLEXPRESS; + @AttachDbFilename=B:\SqlSampleDB\NORTHWND.MDF; + Integrated Security=True; + Connect Timeout=30;User Instance=True; SqlConnection northwindConnection = new SqlConnection(cString);

string customerCommandText = SELECT * FROM Customers; SqlDataAdapter customerAdapter = new SqlDataAdapter( customerCommandText, northwindConnection); string ordersCommandText =

customerOrders, Customers); ordersAdapter.Fill( customerOrders, Orders);

ET

CI

BE

orderRow[OrderID]); } Console.WriteLine( Press any key to continue...); Console.ReadKey(); }

RO

www.pdftron.com
DataSet customerOrders = new DataSet(); customerAdapter.Fill( 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 +

SELECT * FROM Orders; SqlDataAdapter ordersAdapter = new SqlDataAdapter( ordersCommandText, northwindConnection);

ER ICA

Comprender las Bases de Datos

193

Tome Nota Un DataSet puede leer y escribir datos como documentos XML. Para escribir datos como XML, utilice el mtodo WriteXmlde la clase DataSet. Para leer un documento de datos XML, puede utilizar el mtodo ReadXml de la clase DataSet.

3. Necesitar agregar la siguiente directiva using al programa: usingSystem.Data; usingSystem.Data.SqlClient; 4. Seleccione Proyecto, posteriormente congure como Startup Project para hacer que el proyecto sea el inicial para esta solucin. 5. Seleccione Depurar y despus Iniciar Depuracin (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.

; Listo para la certicacin? Comprende los distintos mtodos de conexin a bases de datos? USD 6.3

ET

CI

BE

RO

www.pdftron.com

ER ICA

El cdigo en este ejercicio primero crea un DataSet con dos objetos DataTable, Customers y Orders. El DataSet tambin crea un objeto DataRelation que establece la relacin entre la tabla Customers y la tabla Orders en la columna CustomerID. Esta relacin le permite llamar al mtodo GetChildRow en una fla de cliente para recuperar las flas de las rdenes correspondientes a cada cliente.

194

Leccin 6

Resumen de Habilidades
En esta leccin aprendi:

Evaluacin de Conocimientos
Llene los espacios en blanco

2. La _______________requiere que todas las columnas que no son clave sean funcionalmente dependientes de toda la clave principal. 3. La _______________requiere que no haya dependencia funcional entre los atributos que no son clave.

ET

CI

BE

4. Los bloques de construccin bsicos para un diagrama entidad - relacin son _______________, _______________ y_______________. 5. La clusula _______________en una sentencia SELECT evala cada fla para una condicin 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 diseo de base de datos ayuda con la integridad de datos y es fcil 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 representacin de datos jerrquica.

RO

www.pdftron.com
Complete los siguientes enunciados escribiendo la palabra o palabras correctas en los espacios proporcionados. 1. Con el fn de que una tabla est en la _________________, ninguna de las columnas debe tener valores mltiples en la misma fla de datos.

ER ICA

Las caractersticas y capacidades de un sistema de administracin de base de datos. El proceso del diseo de una base de datos, cmo crear diagramas entidad relacin y las reglas de normalizacin. Las bases de SQL (lenguaje de consulta estructurado). Aprendi cmo crear consultas SELECT, INSERT, UPDATE y DELETE. Tambin aprendi cmo crear procedimientos almacenados y cmo acceder a consultas SQL y procedimientos almacenados desde un programa de C#. Cmo conectarse a archivos planos y a archivos XML para acceder y manipular datos en algunas Fuentes de datos no relacionales. Cmo trabajar con objetos de datos en memoria utilizando las clases DataSet y DataAdapter.

Comprender los conceptos bsicos de bases de datos

195

Opcin Mltiple Encierre en un crculo la letra que corresponda a la mejor respuesta. 1. Su aplicacin necesita almacenar la imagen del producto hacia un archivo en disco. Le gustara minimizar el tamao del archivo de disco. Cul de los objetos debe utilizar para escribir el archivo? a. b. c. d. FileStream StreamWriter BinaryWriter XmlWriter

2. Su programa de C# necesita retornar el nmero total de clientes en una base de datos. El programa ser utilizado varias veces al da. Cul es la manera ms rpida de retornar esta informacin desde su programa? a. Escribir una consulta SQL y utilizar el mtodo SqlCommand.ExecuteScalar para ejecutar la consulta SQL. b. Crear un procedimiento almacenado que retorne el nmero total de clientes. Utilizar el mtodo SqlCommand.ExecuteScalar para ejecutar el procedimiento almacenado. c. Escribir una consulta SQL y utilizar el mtodo SqlDataAdapter.Fill para ejecutar la consulta SQL. d. Crear un procedimiento almacenado para retornar el nmero total de cliente. Utilizar el mtodo SqlDataAdapter.Fill para ejecutar el procedimiento almacenado.

ET

CI
a. b. c. d.

BE
4. Necesita actualizar los campos de Regin para los clientes de Japn. Escribe la siguiente sentencia SQL UPDATE:
UPDATE Customers SET Region = EastAsia

RO
a. b. c. d. INSERT SELECT UPDATE DELETE

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. Cul de las siguientes sentencias SQL debe utilizar? 5. Prueba la consulta en una base de datos de prueba y encuentra que se afectan ms registros de lo esperado. Necesita corregir la sentencia SQL. Qu debe hacer? 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.

ER ICA

196

Leccin 6

6. Est desarrollando una aplicacin que necesita recuperar una lista de clientes desde una base de datos de SQL Server. La aplicacin debera moverse a travs de la lista secuencialmente una vez, procesar cada registro de cliente. Cul de las siguientes clases debe utilizar para mantener la lista de clientes con el fn de lograr un desempeo mximo? a. b. c. d. DataSet DataTable DataView SqlDataReader

7. La aplicacin que est desarrollando necesita leer datos desde un archivo plano que incluye tems tales como una clave entera de 5 dgitos, seguido por un nombre de cliente de 20 caracteres, seguido por dos campos de fecha y hora. Cul de las siguientes clases debe utilizar? a. b. c. d. FileStream StreamReader BinaryReader DataReader

ET

CI

BE
a. b. c. d.

9. Est desarrollando una aplicacin que administra clientes y sus rdenes. Cul de las siguientes situaciones no es un buen candidato para la implantacin con procedimientos almacenados en su aplicacin? 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

10. Su aplicacin 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)

RO

www.pdftron.com
a. b. c. d. Fill InsertCommand SelectCommand Update

8. Est desarrollando una aplicacin que necesitar copiar datos desde una vista de SQL Server a un DataSet. Nombra al objeto DataSet como dsData. Cul de los siguientes mtodos debe utilizar para copiar los datos?

ER ICA

Comprender los conceptos bsicos 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. Cul sentencia debe utilizar? a. DELETE FROM Employees
WHERE EmployeeType LIKE [CT]

b. DELETE FROM Employees c. DELETE FROM Employees


WHERE EmployeeType LIKE [C-T]

d. DELETE * FROM Employees

WHERE EmployeeType IN (C, T)

12. Su aplicacin incluye un objeto SqlDataAdapter llamado SqlDataAdapter que se conecta a la tabla Employees. Basado en este SQLDataAdapter, su aplicacin tambin incluye un objeto DataSet, dsEmployees. Cul lnea de cdigo debe utilizar para cargar toda la informacin desde la base de datos en el objeto DataSet?

ET

CI

BE

RO

www.pdftron.com
sqlDataAdapter.Fill(dsEmployees); sqlDataAdapter.Fill(dsEmployees, Employees);

a. b. c. d.

dsEmployees = sqlDataAdapter.Fill(Employees);

sqlDataAdapter.Fill(dsEmployees, Employees);

ER ICA

WHERE EmployeeType LIKE C OR T

198

Leccin 6

Evaluacin de Competencia
Proyecto 6-1: Crear un Diagrama Entidad - relacin Una compaa tiene un nmero de empleados. Cada empleado puede ser asignado a uno o ms proyectos. Un proyecto puede tener uno o ms empleados trabajando en l. Dibuje un diagrama entidad - relacin para esta situacin. Proyecto 6-2: Crear un Procedimiento Almacenado A menudo necesita una lista de clientes para cierto pas. Necesita crear un procedimiento almacenado que acepte el nombre del pas como parmetro y retorne todos los clientes de ese pas. Cmo hara eso?

Evaluacin de Competencia

Proyecto 6-3: Normalizar Tablas

RO
Profeca Cambio La Confesin

www.pdftron.com
Books
BookId BookName CategoryId CategoryName 1 Cocinando Sano 1001 Cocina 1002 Misterio y Suspenso 3 1003 Negocios 4 1002 Misterio y Suspenso

ET

CI

BE

Necesita aplicar las reglas de normalizacin para garantizar la integridad de datos. Cmo garantizara que la tabla Books est en la tercera forma normal? Proyecto 6-4: Crear y Manejar Eventos Est trabajando en una aplicacin que requiere que guarde informacin 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 integracin de datos. Necesita garantizar que el nodo raz del XML es llamado Customers. El nodo raz entonces tendr un nodo Customer para cada cliente en la tabla Customers. Cmo debe llevar a cabo esta tarea?

Est convirtiendo un diagrama entidad - relacin en tablas. Obtiene la siguiente tabla:

ER ICA

S-ar putea să vă placă și