Você está na página 1de 124

< > Programacin

< > Programacin

Somos una empresa 100% mexicana, con ms de 20 aos de experiencia siendo el Centro lder de Capacitacin en informtica. Hoy en da, tener las mejores herramientas es slo una parte del todo lo que signi-

fica que conviene siempre estar en permanente capacitacin. Grupo Eduit ha establecido un programa integrado capaz de identificar y perso-

nalizar las necesidades de los diferentes niveles educativos del pas mantenindose en cada paso como asesor y colaborador, generando un programa conforme a sus necesidades.

Misin
Satisfacer las necesidades de capacitacin en tecnologas de informtica a travs de programas de entrenamiento de calidad, siendo siempre una empresa a la vanguardia.

Visin
Ser lder de soluciones de capacitacin a nivel internacional.

< > Programacin

1 Algoritmos
1.1 Lgica computacional

9
9
9

1.1.1 Sintaxis de la lgica de predicados

1.2 Algoritmos
1.2.1 Prueba de escritorio

10
11

1.3

Clasificacin de Algoritmos

13
13 13

1.3.1 Transcripcin 1.3.2 Compilacin y errores

1.4 Variables
1.4.1 Asignacin de valores

14
14

1.5 Operadores
1.5.1 Operadores aritmticos y su prioridad

15
15

1.6

Estructuras Bsicas

16
16 17 19

1.6.1 Primera estructura: Secuencia de acciones 1.6.2 Segunda estructura: Decisin de accin 1.6.3 Tercera Estructura: Ciclos de acciones

1.7

Tcnicas para representar algoritmos

20
20

1.7.1 Diagramas de flujo

< > Programacin

2 Pseudocdigo
2.1 Introduccin 2.2 Diagramas de Nassi Scheiderman (N-S)

28
28 28
28

2.2.1 Diagrama N-S de estructuras de decisin

2.3 Normas 2.4 Ciclos


2.4.1 Ciclo Mientras (While) 2.4.2 Ciclo Para (For) 2.4.3 Ciclo Hacer-Mientras (Repeat While) 2.4.4 Ciclo Hacer-Hasta (Repeat Until) 2.4.5 Ciclos Anidados

30 35
35 36 38 40 41

Almacenamiento persistente de datos


3.1 Diseo conceptual

43
43
44 45 46

3.1.1 Entidades 3.1.2 Relaciones 3.1.3 Modelo Entidad-Relacin

3.2

Diseo lgico

50

< > Programacin

3.2.1 Tipos de Datos 

50

3.3

Lenguaje de consulta

50
50 51

3.3.1 Sintaxis bsica del lenguaje de consulta estructurado (SQL) 3.3.2 Sentencias de seleccin, insercin, actualizacin y borrado de datos

4 .NET
4.1 .NET Framework 

56
56
56 57 58 58

4.1.1 Entorno de ejecucin  4.1.2 Biblioteca de Clase Base (BCL) 4.1.3 Sistema de tipo comn (CTS)  4.1.4 Especificacin del lenguaje comn (CLS)

4.2

Entorno de Programacin 

58
59 59 59

4.2.1 Entorno de Desarrollo (IDE)  4.2.2 Descarga e Instalacin  4.2.3 Interfaz de usuario

4.3

Introduccin a la programacin en C#

64
64 65 67

4.3.1 Estructura de un programa  4.3.2 Palabras reservadas 4.3.3 Literales 

< > Programacin

4.3.4 Variables  4.3.5 Tipos de Datos 4.3.6 Operadores  4.3.7 Constantes y enumeraciones

67 68 70 75

4.4

Sentencias de Control 

78
78 81 86

4.4.1 Condicionales  4.4.2 Ciclos  4.4.3 Uso de Break y Contine

4.5

Mtodos, Arreglos y Colecciones 

88
88 93 94 95 96 100 100 103 104

4.5.1 Mtodos  4.5.2 Parmetros  4.5.3 Namespace  4.5.4 Arreglos 4.5.5 Declaracin  4.5.6 Colecciones  4.5.7 Listas  4.5.8 Pilas  4.5.9 Colas

< > Programacin

Programacin orientada a objetos


5.1 Clases y Objetos 

108
108
109 110

5.1.1 Definicin de clases  5.1.2 Accesibilidad

5.2

Interfaces de Usuario 

111

5.2.1 Barra de herramientas y controles de usuario para formularios Windows 111 5.2.2 Controles de usuario y sus eventos asociados 112

5.3

Excepciones 

116
117 120

5.3.1 Excepciones del sistema 5.3.2 Excepciones personalizadas

5.4 Archivos
5.4.1 Streams

121
122

Comprender cules son las secuencias lgicas que se utilizan en programacin as como su finalidad. Identificar el proceso para la construc cin de algoritmos. Clasificar a los algoritmos partiendo de los errores en las secuencias. Estimar el valor de una variable. Evaluar el valor de las variables en diferentes operaciones. Manejar las estructuras bsicas de los algoritmos. Conocer las tcnicas para representar algoritmos.

< > Programacin

1 Algoritmos
1.1 Lgica computacional
La lgica es muy importante ya que ayuda a determinar la forma en que se puede dar solucin a un problema. Sin ella no es posible organizar los pasos que generen lo que esperamos obtener. La computadora trabaja con una lgica especial, exacta y matemtica.

Todas las actividades que realizas en la computadora estn basadas en una lgica en forma de procedimientos o secuencias de pasos que hay que realizar para lograr lo que se quiere. 1.1.1 Sintaxis de la lgica de predicados La lgica de predicados se basa en la idea de que las sentencias expresan relaciones entre objetos, as como cualidades y atributos de estos objetos. Los objetos pueden ser personas, objetos fsicos, o conceptos y se conocen como argumentos o trminos del predicado. Y las cualidades, relaciones o atributos, se denominan predicados.

Por defecto se considera que los predicados son verdaderos, y el hecho de que sean verdaderos depende de sus trminos. Esto significa que un predicado puede ser verdadero para un conjunto de trminos, pero falso para otro. Por ejemplo, el siguiente predicado: color (pasto, verde) es verdadero

pero si al mismo predicado, le cambiamos los argumentos, este ya no ser verdadero: color (pasto, azul) o color (cielo, verde)

Otro ejemplo sera: y textura (algodn, suave) es verdadero

textura (piedra , suave) textura (algodn, aspero) son falsos

Cuando los argumentos representan a un objeto especfico estos argumentos se llaman constantes. Pero tambin existen argumentos que en determinado momento pueden ser desconocidos, estos argumentos son tambin llamados variables.

< > Programacin


En el ejemplo: color (pasto, X) la variable X puede ser el color verde, haciendo que el predicado sea verdadero; o puede ser el color azul, resultando un predicado falso.

1.2 Algoritmos
Un algoritmo es un conjunto de actividades o procesos formados por una serie de instrucciones o tareas organizadas de forma lgica, que nos permiten alcanzar un resultado o resolver un problema. Un algoritmo es un conjunto de instrucciones para resolver un problema. Debe cumplir con dos reglas generales: 1. El nmero de pasos debe ser finito. De esta manera el algoritmo debe terminar en un tiempo finito con la solucin del problema, 2. El algoritmo debe ser capaz de determinar la solucin del problema.

Las caractersticas principales de un algoritmo son las siguientes: a) Precisin. Los pasos a seguir deben ser claros y correctos. b) Determinismo. El algoritmo, dado un conjunto de datos de entrada idnticos, debe arrojar siempre los mismos resultados. c) Finitud. El algoritmo, independiente de la complejidad del mismo, siempre debe ser de longitud finita.

Vistas de otra forma podemos definir lo siguiente 1. Entrada: definir lo que necesita el algoritmo 2. Salida: definir lo que produce. 3. No ambiguo: explcito, siempre sabe qu comando ejecutar. 4. Finito: El algoritmo termina en un nmero finito de pasos. 5. Correcto: Hace lo que se supone que debe hacer. La solucin es correcta 6. Efectividad: Cada instruccin se completa en tiempo finito. Cada instruccin debe ser lo suficientemente bsica como para que en principio pueda ser ejecutada por cualquier persona usando papel y lpiz. 7. General: Debe ser lo suficientemente general como para contemplar todos los casos de entrada.

10

< > Programacin

Ejemplo Un cliente solicita un crdito a una empresa. La empresa busca en su base de datos la ficha del cliente; si el cliente es solvente entonces la empresa otorga el crdito; en caso contrario, rechaza el crdito. Los pasos del algoritmo son: 1. Inicio. 2. Aceptar solicitud de crdito. 3. Examinar la ficha del cliente. 4. Si el cliente es solvente, otorgar crdito; en caso contrario, rechazar el crdito. 5. Fin.

1.2.1 Prueba de escritorio Es la comprobacin de forma lgica, de un algoritmo. Para llevar a cabo una prueba de escritorio, se utilizar el siguiente procedimiento: 1. Con los datos de prueba, se seguirn cada uno de los pasos propuestos en el algoritmo de resolucin. 2. Si la prueba de escritorio genera resultados ptimos, quiere decir que el algoritmo posee una lgica adecuada, en caso contrario el algoritmo tendr que ser corregido. Ejemplo: suma: entero entrada: entero menor: entero

leer entrada menor = entrada suma = 0 mientras (entrada != 0)haga si (entrada < menor) entonces

11

< > Programacin


menor =entrada fin_si suma = suma + entrada leer entrada fin_mientras escribir valor Menor: escribir menor escribir Suma: escribir suma Instruccin leer entrada menor=entrada suma = 0 suma=suma + entrada leer entrada menor=entrada suma=suma + entrada leer entrada suma=suma + entrada leer entrada Escribir valor menor Escribir menor Escribir Suma Escribir suma 10 10 0 10 7 7 17 9 26 0 Valor Menor 7 Suma: 26 Entrada Menor Suma Pantalla

La prueba de escritorio nos permite saber: Si el programa hace lo que debera hacer Si no hace lo que debera hacer, nos permitir detectar errores como : o Si algn paso o instruccin no est en el orden correcto o Si falta algo o Si algo esta de ms

12

< > Programacin


o Si los pasos o instrucciones que se repiten lo hacen ms o menos veces de lo debido o Si las instrucciones estn en un orden apropiado o Otros errores que pueden presentarse Elegir los datos apropiados para la prueba La prueba de escritorio es realizar un proceso de simulacin con el algoritmo desarrollado (observar qu procesos realizara una computadora). Este trabajo se realiza en base a una tabla cuyos encabezados son las variables que se usan en el algoritmo y debajo de cada una de ellas se van colocando los valores que van tomando, paso a paso y siguiendo el flujo indicado por el algoritmo, hasta llegar al final.

1.3 Clasificacin de Algoritmos


Algoritmo determinista: en cada paso del algoritmo se determina de forma nica el siguiente paso. Algoritmo no determinista: deben decidir en cada paso de la ejecucin entre varias alternativas y agotarlas todas antes de encontrar la solucin.

1.3.1 Transcripcin Es el proceso a travs del cual convertimos un algoritmo en un listado de instrucciones entendibles para la computadora. Estas instrucciones deben ajustarse a las reglas sintcticas de un lenguaje de programacin. Las reglas sintcticas de un lenguaje de programacin son las restricciones tcnicas sobre las cuales est construido el lenguaje. Podramos decir que es la traduccin de un algoritmo con la ortografa de un Lenguaje de Programacin.

1.3.2 Compilacin y errores La compilacin es el proceso mediante el cual la computadora revisa que el programa que haz escrito cumpla con las reglas sintcticas del lenguaje de programacin que ests utilizando. El compilador es el encargado de hacer esta revisin y te ayuda a detectar los errores de sintaxis y de precaucin. Cada lenguaje de programacin tiene su sintaxis propia por lo tanto existe un compilador especfico para cada uno. Si el programa fuente est escrito de manera correcto, el compilador generar el cdigo objeto, en caso contrario mostrar una lista con los errores encontrados, no generndose ningn programa objeto, para que podamos depurarlo.

13

< > Programacin

1.3.2.1 Errores de compilacin Tambin conocidos como errores del compilador, son errores que impiden que el programa se ejecute. La mayora se deben a errores cometidos al escribir el cdigo. Por ejemplo, puedes escribir mal una palabra clave u omitir alguna puntuacin necesaria.

1.4 Variables
Una variable es un tipo de caja de almacenamiento que se utiliza para recordar valores, de forma que stos puedan utilizarse o modificarse ms adelante en el programa. Tambin podemos decir que una variable es un elemento que se emplea para almacenar y hacer referencia a otro valor.

1.4.1 Asignacin de valores Si no existieran variables, un programa que suma dos nmeros podra escribirse como: resultado = 3 + 1 El programa anterior es tan poco til que slo sirve para el caso en el que el primer nmero de la suma sea el 3 y el segundo nmero sea el 1. En cualquier otro caso, el programa obtiene un resultado incorrecto. Sin embargo, el programa se puede rehacer de la siguiente manera utilizando variables para almacenar y referirse a cada nmero: numero_1 = 3 numero_2 = 1 resultado = numero_1 + numero_2 Los elementos numero_1 y numero_2 son variables que almacenan los valores que utiliza el programa. El resultado se calcula siempre en funcin del valor almacenado por las variables, por lo que este programa funciona correctamente para cualquier par de nmeros indicado. Si se modifica el valor de las variables numero_1 y numero_2, el programa sigue funcionando correctamente. Las variables se pueden caracterizar por: Nombre: por el cul la referenciamos dentro del algoritmo Direccin: donde se almacena. Tipo: la clase de valores que puede almacenar, implica un tamao de memoria y conjunto de operaciones sobre los valores.

14

< > Programacin

Valor: Es el contenido en un momento dado. Pueden variar su valor (contenido) a lo largo de la ejecucin del programa. El valor de una variable puede cambiar a medida que el programa realiza su secuencia de operaciones, pero el nombre es fijo. El programador tiene la libertad de elegir los nombres, y recomendamos escoger aquellos que sean significativos y fciles de recordar o identificar.

1.5 Operadores
En el cdigo fuente de un programa un operador es un carcter o una secuencia de caracteres. Por ejemplo: + o * Los operadores definen las operaciones que van a realizarse con los datos u operandos. Existen distintos tipos de operadores por ejemplo operadores aritmticos, de cadenas de caracteres, de relacin, lgicos o booleanos, de bit y de conjuntos etc.

1.5.1 Operadores aritmticos y su prioridad En el siguiente ejemplo: area = longitud * ancho; 1. El carcter * hace que se multipliquen los valores almacenados en longitud y ancho 2. El smbolo igual = hace que el resultado de la multiplicacin se asigne a (se almacene en) rea. A continuacin se muestran los operadores aritmticos, que son similares a los botones de cualquier calculadora. Operador * / % + Observa que se han dividido los operadores en grupos para indicar su precedencia, es decir, el orden en el que se realizan sus operaciones. Por lo tanto, la multiplicacin, divisin y mdulo (*, / y %) se llevan a cabo antes que la suma y la resta (+ y ). Tambin podemos usar parntesis para agrupar los clculos y forzarlos a llevarse a cabo en un orden especfico. Si un clculo incluye operadores de la misma precedencia, las operaciones se realizarn de izquierda a derecha. Significado multiplicacin divisin mdulo suma resta

15

< > Programacin

1.6 Estructuras Bsicas


Una estructura se define como un esquema que nos permite representar de manera simplificada alguna idea y que bajo condiciones normales es constante.

1.6.1 Primera estructura: Secuencia de acciones Cuando tienes que pensar que debes ir hasta la parada del autobs a tomar el transporte lo que vas organizando en tu mente es una secuencia de acciones que te permitan: acercarte a la parada, esperar el autobs correcto y tomarlo para ir a tu casa. Pues bien esa es la primera estructura sobre la cual se mueve el pensamiento humano y es la estructura de: Secuencia de Acciones. Para escribir una secuencia de acciones todo lo que tienes que hacer es colocar una nueva orden o una nueva accin despus de la ltima que hayas colocado. De esta manera se entiende la secuencialidad y el orden en la ejecucin de esas acciones. Vamos a desarrollar un algoritmo que nos permita asomarnos a la ventana, pero vamos a asumir que la ventana a donde nos queremos asomar ya est abierta y que no estamos muy distantes de la ventana. Entonces diramos: Algoritmo para asomarnos a la ventana Inicio Ubicar la ventana por la que nos queremos asomar Levantarnos del lugar en donde estemos sentados Avanzar hacia la ventana Llegar hasta tener la ventana muy muy cerquita Asomarnos por la ventana Fin

En el ejemplo dado se puede notar que cada accin est antes de una y despus de otra (excepto por supuesto la primera y la ltima). La estructura de secuencia a veces parece ser tan obvia ya que todo lo que tenemos que hacer es ir colocando una accin tras otra y, por supuesto, ser muy racionales en el orden de dichas acciones porque en cuestin de algoritmos el orden de los factores si altera el resultado.

16

< > Programacin

1.6.2 Segunda estructura: Decisin de accin Has llegado a la parada del autobs, ves cmo pasan y pasan autobuses pero ninguno tiene la ruta que necesitas. Por cada autobs que pasa miras la ruta y al ver que no es, esperas el siguiente y as sucesivamente hasta que ves llegar al que necesitas. Precisamente est es la segunda estructura sobre la cual se basa el pensamiento (o razonamiento) humano. sta es la estructura de Decisin de accin. Gracias a la cual puedes escoger la mejor alternativa de entre varias, siempre que tenemos que tomar una decisin o, ms bien, siempre que tengamos que utilizar la estructura de Decisiones vamos a depender de una condicin. La condicin es la que nos permite que podamos decidir cul es el camino lgico correcto a tomar. Vamos a desarrollar el mismo algoritmo de asomarnos a la ventana pero esta vez no le vamos a colocar las condiciones de que estamos cerca de la ventana y de que sta est abierta. Para ello vamos a incorporar una lneas de decisin que nos permitan tener un algoritmo ms genrico y que nos permita lograr mejor el objetivo, as :

Algoritmo para asomarnos a la ventana

Inicio
Ubicar la ventana por la que nos queremos asomar

Si estamos sentados
Levantarnos del lugar en donde estemos sentados Orientarnos hacia la ventana

De lo contrario
Orientarnos hacia la ventana Avanzar hacia la ventana Llegar hasta tener la ventana muy muy cerquita Si esta cerrada Abrirla Asomarnos por la ventana

Fin
El algoritmo ha cambiado un poco y por lo tanto ahora tiene unas condiciones que le permiten ser una secuencia de acciones ms racional. En estas condiciones el algoritmo se convierte en algo ms depurado y mucho ms aproximado a la realidad. Observa los siguientes puntos en este algoritmo

17

< > Programacin

1. Las palabras Si que aparecen son exclusivamente condicionales y no afirmativas como pudiera pensarse en algunos casos 2. Despus de cada Si condicional va una condicin que es la que permite que se haga una cosa u otra. La condicin regula las acciones que vienen despus y que dependen del Si condicional inicial. En la decisin:

Si estamos sentados
Levantarnos del lugar en donde estemos sentados Orientarnos hacia la ventana

De lo contrario
Orientarnos hacia la ventana Notamos que estar sentados es la condicin de la cual depende si hacemos las dos acciones: Levantarnos del lugar en donde estemos sentados Orientarnos hacia la ventana O si slo hacemos la accin Orientarnos hacia la ventana

3. Nota que una decisin completa involucra: Una pregunta que evala una condicin Un conjunto de acciones a realizar en caso de que la condicin sea verdadera Un conjunto de acciones a realizar en caso de que la condicin sea falsa Esta ltima parte, dentro de enunciado 3, es razn de ser de la existencia de la accin De lo contrario.

4. No siempre que exista un condicional Si debe existir un De los contrario asociado a l. Siempre que exista un De lo contrario es porque est asociado a un Si condicional determinado. Tal es el caso de la Decisin

Si est cerrada
Abrirla En donde si la ventana est abierta pues no hay que hacer ms que asomarse por ella pero si est cerrada debemos primero abrirla para poder asomarnos por ella.

18

< > Programacin

1.6.3 Tercera Estructura: Ciclos de acciones Acostumbras todos los das ir a la escuela a la misma hora y a esperar el autobs en la misma parada, Sencillamente vives practicando la tercera estructura llamada Ciclos de acciones. Que no es ms que la estructura que nos permite repetir una o varias acciones una cantidad definida de veces. Todos los das desayunas en tu casa por lo cual estars en el ciclo de ir a desayunar a tu casa siempre pero en pleno desayuno el hecho de que lleves muchas veces la cuchara del plato a tu boca representa que estars haciendo lo mismo mientras en el plato exista todava algo ms para comer. Vamos a suponer que eres un supervisor de una fbrica y que cada media hora, a lo largo de todo el da, debes estar vigilando determinada accin a travs de una ventana.. En palabras sencillas tendrs que asomarte por una ventana mientras no termine el da cada media hora y durante el tiempo que no ests asomado lo que tienes que hacer es seguir en tu puesto de trabajo. De esta forma podrs estructurar un algoritmo ms o menos de la siguiente manera:

Algoritmo para Vigilar desde una ventana

Inicio
Llegar puntual a la hora de inicio de la jornada laboral Ubicarnos en nuestro escritorio

Mientras no sea el fin del da


Ubicar la ventana por la que nos queremos asomar

Si estamos sentados
Levantarnos del lugar en donde estemos sentados Orientarnos hacia la ventana

De los contrario
Orientarnos hacia la ventana Avanzar hacia la ventana Llegar hasta tener la ventana muy muy cerquita

Si esta cerrada
Abrirla

19

< > Programacin

Asomarnos por la ventana Regresar a nuestro escritorio

Mientras no haya pasado Media Hora


Permanecer en nuestro escritorio

Fin_Mientras Fin_Mientras Fin

Varios factores nuevos entran en este algoritmo 1. La palabra Mientras establece en relacin con una condicin el inicio de un conjunto de acciones que se repiten precisamente Mientras esa condicin lo permita 2. Todo Mientras (por efectos de clarificacin del algoritmo) debe tener un finalizador que indique hasta donde llega el bloque de acciones que debemos repetir. 3. La indentacin o lo que corrientemente se conoce como el Sangrado del texto es decir el hecho de que algunas acciones estn ms adentro de la hoja que otras, representa que existen bloques de acciones que tienen una caracterstica. Las acciones contenidas entre el Inicio y el Fin indican que son las acciones que conforman el algoritmo en mencin. Las acciones comprendidas entre Mientras no sea Fin del da y su correspondiente Fin_Mientras son el conjunto o bloque que se debe repetir (o iterar) precisamente mientras la condicin sea Verdadera o sea Mientras no sea fin del da. La accin comprendida entre Mientras no haya pasado Media Hora y su correspondiente Fin_Mientras es la accin que se deber realizar hasta cuando se complete media hora. 4. Cada ciclo de acciones que se inicie con Mientras deber tener un Fin_Mientras asociado y a su vez cada Fin_Mientras deber finalizar uno y solo un ciclo iniciado con Mientras.

1.7 Tcnicas para representar algoritmos


1.7.1 Diagramas de flujo Los Diagramas de Flujo parten de unos smbolos que nos permiten decir lo mismo que los algoritmos pero de una manera grfica y ms entendible.

20

< > Programacin

Los siguientes son algunos de los smbolos y el significado de ellos que se han acordado utilizar dentro de los Diagramas de Flujo o Flujogramas: Smbolo Significado Representa un proceso que no es ms que una accin o una orden a ejecutarse de manera clara y concreta. Por ejemplo la asignacin de un valor a una variable. Permite representar una Decisin. En su interior podemos escribir la condicin de la cual depende la decisin y por sus extremos derecho (o izquierdo) e inferior se pueden colocar las salidas para los casos en que la condicin sea Falsa o sea Verdadera. Permite expresar un proceso de entrada o salida, teniendo en cuenta que una entrada en un algoritmo se concibe como el proceso a travs del cual se recibe informacin y una salida es el proceso a travs del cual se entrega informacin. Permite representar la escritura de un resultado o lo que tcnicamente se conoce como una salida. Representa el Inicio el Fin de un Algoritmo. Todo lo que se tiene que hacer es escribir la palabra Inicio o Fin Permite que coloquemos en l los parmetros de inicio de un ciclo cuando se ajusta a una de las formas establecidas por las normas de programacin. Representa una entrada de datos utilizando el teclado del computador. Todo lo que tenemos que escribir en su interior es el nombre de la variable (o las variables) en donde queremos que se almacene el dato que entra por el teclado. Estos smbolos se conocen como conectores lgicos. Nos permiten representar la continuacin de un Diagrama de Flujo cuando ste es tan largo que no cabe en una sola hoja. Permite representar una lectura de datos.

21

< > Programacin

Este smbolo genera una salida de datos. representa sencillamente una salida o una escritura de datos. Representa una salida de datos pero escrita en la pantalla del computador.

Las flechas son los smbolos que nos van a permitir representar la forma de conexin entre los dems smbolos determinando igualmente el Flujo de ejecucin o realizacin de acciones.

Estos smbolos fueron utilizados por mucho tiempo para representar grficamente una idea o un algoritmo. Cmo se utiliza entonces esta simbologa? Tomemos el caso de los dos algoritmos que construimos mientras conocamos las estructuras bsicas. El enunciado final buscaba desarrollar un algoritmo que nos permitiera Vigilar una empresa desde una ventana asomndonos cada media hora por ella. El Algoritmo lo habamos planteado como sigue a continuacin:

Algoritmo para Vigilar desde una ventana

Inicio
Llegar puntual a la hora de inicio de la jornada laboral Ubicarnos en nuestro escritorio

Mientras no sea el fin del da


Ubicar la ventana por la que nos queremos asomar

Si estamos sentados
Levantarnos del lugar en donde estemos sentados Orientarnos hacia la ventana

De lo contrario
Orientarnos hacia la ventana

22

< > Programacin

Avanzar hacia la ventana Llegar hasta tener la ventana muy muy cerquita

Si esta cerrada
Abrirla Asomarnos por la ventana Regresar a nuestro escritorio

Mientras no haya pasado Media Hora


Permanecer en nuestro escritorio

Fin_Mientras Fin_Mientras Fin

Si queremos llevarlo a la simbologa de Diagramas de Flujo su equivalente sera el siguiente:

Diagrama De Flujo Para Vigilar Desde Una Ventana

23

< > Programacin

24

< > Programacin

Cabe destacar algunos detalles significativos en este Diagrama de Flujo: 1. Toda decisin, como es obvio, tiene dos caminos: Un camino nos lleva a la accin o las acciones a realizar en el caso de que la respuesta a la pregunta sea Verdadera y el otro camino es el que nos dice que debemos hacer en caso de que la respuesta a la pregunta sea Falsa.

2. Lo que en el algoritmo eran unos ciclos, en el diagrama se cambiaron por unas decisiones en donde uno de los caminos se devuelve (instrucciones atrs obviamente). Al realizar un seguimiento de este Diagrama de Flujo notars que se podr devolver tantas veces como lo permita la condicin de la Decisin que queda al final y que solo se va a salir de eses ciclo cuando la condicin sea Verdadera o sea que el ciclo se mantiene mientras la condicin sea Falsa lo cual concuerda con la teora de los ciclos.

25

< > Programacin

3. En la ltima decisin, el camino Falso nos lleva a una burbuja que tiene un nmero 1 adentro. Nmero que tambin est al principio del diagrama pero con la flecha en el otro sentido (es decir, no saliendo del diagrama sino entrando a l). Se utiliza esta notacin solo para simplificar un poco el Diagrama de Flujo.

4. Con el Diagrama de Flujo usted puede ver un grfico de la solucin y con ello hacerse una idea clara de la secuencia de pasos que necesitara para alcanzar el objetivo.

5. Siempre que vaya a desarrollar un Diagrama de Flujo trate de ser muy organizado y muy esttico, pues no se olvide que si vamos a representar un algoritmo computacional (en donde se busca que el computador logre un objetivo por nosotros) al momento de la transcripcin ser muy importante el orden que usted haya tenido en la utilizacin de esta tcnica.

6. Cuando disee un ciclo, no se olvide verificar que, lgicamente, la decisin por la cual reemplace el ciclo al momento de disear su diagrama de flujo tenga el mismo comportamiento es decir permitan que bajo las mismas condiciones una accin o un conjunto de acciones se repitan una cantidad finita de veces.

7. Si el algoritmo que usted tiene para lograr este mismo objetivo es diferente, tenga presenta que el Diagrama de Flujo tambin va a ser diferente ya que ste es un reflejo grfico de aquel.

8. Es muy importante que sepa que el solo hecho de cambiar la llegada de una determinada flecha, cambia completamente el algoritmo. Puede usted notar que la utilizacin de los smbolos resulta ser una tarea muy simplificada, pero lo que si es delicado es la colocacin de las flechas ya que ellas son las que representan el sentido con que se va a mover el flujo de nuestro lgica.

26

Reconocer pseudocdigos. Identificar el Diagrama (N-S) y su aplicacin en los algoritmos. Trabajar con algoritmos identificando decisiones simples, en secuencia o

anidadas.

Elegir el tipo de ciclo adecuado en la creacin de algoritmos. Resolver problemas utilizando recorridos secuenciales.

< > Programacin

2 Pseudocdigo
2.1 Introduccin
Pseudocdigo es la representacin textual de un algoritmo de manera que dicho texto se encuentre enmarcado en algunas normas tcnicas que faciliten su posterior transcripcin a un lenguaje de Programacin.

2.2 Diagramas de Nassi Scheiderman (N-S)


La tcnica de Diagramas Rectangulares Estructurados o de Nassi Scheiderman permite tener unas herramientas grficas para representar la solucin a un problema con la ventaja de que no brinda la posibilidad de que seamos desordenados en nuestra concepcin. Se basa en representar grficamente todo el algoritmo dentro del marco de un rectngulo y a diferencia de la tcnica anterior, se mueve bsicamente con la utilizacin de tres smbolos que corresponden a cada una de las estructuras bsicas de la lgica de programacin.

2.2.1 Diagrama N-S de estructuras de decisin Para representar una decisin se utiliza la figura 2.1 en donde por el lado izquierdo podemos colocar las acciones o Instrucciones que correspondera ejecutar en el caso de que la condicin fuera Verdadera y por el lado derecho colocaramos las acciones o instrucciones a ejecutar cuando la condicin fuera Falsa.

Figura 2.1

28

< > Programacin


Pero definitivamente la utilizacin efectiva de esta tcnica de representacin se ve con un ejemplo en la Figura 2.2.

Figura 2.2 Es importante hacer algunas precisiones acerca de este diagrama: a. Nota que la correspondencia entre nuestra idea y su representacin (bajo esta tcnica) es mucho ms exacta que en el caso del Diagrama de Flujo en donde tuvimos que hacer algunos pequeos

29

< > Programacin


cambios lgicos para que el diagrama correspondiera a la solucin planteada. b. La tcnica de diagramacin rectangular estructurada obliga a ser mucho ms ordenado y no da ningn espacio para que nuestro algoritmo sea inentendible dado que las estructuras son relativamente rgidas. c. Para la utilizacin de esta tcnica slo tenemos que conocer tres smbolos y con ellos representamos todo lo que queramos dado que nuestra lgica se basa en estas tres estructuras. d. Enmarcar nuestra idea en un rectngulo nos brinda una concepcin ms concreta de la solucin planteada. e. Realizar una prueba de escritorio con un diagrama basado en esta tcnica se reduce a seguir la secuencia de instrucciones y (al igual que con los diagramas de flujo) a realizar una a una y tal como estn all las instrucciones o acciones, las decisiones y la revisin de las condiciones de los ciclos.

2.3 Normas
Para escribir un algoritmo bajo la forma de pseudocdigo algunas de las normas son las siguientes: se lea. Es conveniente acostumbrarse a que dicho nombre no supere los ocho caracteres y preferiblemente que sea altamente mnemnico o sea que su nombre haga una referencia aproximada a lo que contiene.

Primera Norma.- Siempre se le ha de colocar un nombre al algoritmo de manera que sea lo primero que

las variables con las cuales vamos a trabajar durante el programa. Todas las variables que vayan a ser utilizadas deben ser declaradas. Declararlas significa escribir el tipo de dato que van a almacenar y el nombre que dichas variables van a llevar.

Segunda Norma.- Luego de colocado el nombre del pseudocdigo debemos a continuacin que declarar

Tercera Norma.- Todo el cuerpo del algoritmo deber ir encerrado entre las palabras Inicio y Fin indicando en donde comienza y en donde termina el pseudocdigo.

Cuarta Norma.a. Cuando quieras que salga un ttulo en la pantalla todo lo que tiene que hacer es utilizar la orden Escriba y a continuacin colocar entre comillas dobles lo que quieras que salga en pantalla. Por ejemplo

Escriba Esta es una demostracin

Generar en pantalla el ttulo Esta es una demostracin

30

< > Programacin

b. Si quieres que lo que salga en pantalla sea el contenido de una variable todo lo que tienes que hacer es utilizar la orden Escriba y a continuacin y sin comillas dobles el nombre de la variable que quieres escribir. Por ejemplo:

N = 5 Escriba N
Mostrar en pantalla el valor 5

c. Si quieres que en pantalla salga un ttulo y a continuacin salga el contenido de la variable todo lo que tienes que hacer es colocar el ttulo entre comillas dobles y, luego de haberlas cerrado, colocar el nombre de la variable que quieras escribir al lado del ttulo. Por ejemplo:

N=8 Escriba El valor es N


Generar en pantalla El valor es 8

Si quieres mostrar en pantalla el contenido de varias variables entonces simplemente a continuacin de la orden Escriba y separadas por comas puedes escribir los nombres de las variables que quieres escribir. Por ejemplo:

N=8 M=4 Escriba Los valores son N, M


Escribir en pantalla Los valores son 8 4

Quinta Norma.a. Cuando vayas a leer un dato para que sea almacenado en una variable determinada utiliza la orden Lea. Para no tener que escribir (por ejemplo) Lea un dato entero y gurdelo en la variable N que tambin es entera Slo tienes que escribir

Lea N

31

< > Programacin

y la computadora lo entender correctamente.

b. Cuando necesites leer ms de un dato para ser almacenado en diferentes variables todo lo que tienes que hacer es utilizar la orden Lea y escribir las variables separadas por comas. Por ejemplo

Lea a, b
Suponiendo que tanto a como b son variables de tipo entero, esta orden le indicar a la computadora que lea un dato entero y lo almacene en la variable a y luego que lea otro dato entero y lo almacene en la variable b.

c. No necesariamente cuando se lean dos o mas variables utilizando una sola orden Lea, stas deben ser del mismo tipo. Por ejemplo:

Lea var_e, var_r, var_c


Asumiendo que var_e es una variable de tipo entero, var_r es una variable de tipo real y var_c es una variable de tipo carcter, esta orden le indicar a la computadora que lea un valor entero y lo almacene en la variable var_e, luego que lea un valor real y lo almacene en la variable var_r y luego que lea un carcter y lo almacene en la variable var_c.

Sexta Norma.- Cuando necesites tomar una decisin debers utilizar la orden Si, a continuacin escribir la

condicin correspondiente y luego las instrucciones que se han de realizar en caso de que la condicin sea Verdadera. En caso de que la condicin sea Falsa y tenga instrucciones a realizarse cuando as sea entonces deber existir una alternativa De los contrario. Al finalizar toda la decisin deber existir un indicador Fin_Si. La estructura entonces ser la siguiente:

Si Condicin
. . Instrucciones a ejecutar si la condicin es Verdadera . .

De lo contrario

32

< > Programacin

. . Instrucciones a ejecutar si la condicin es Falsa . .

Fin_Si

Las condiciones pueden ser expresadas utilizando los siguientes Operadores Relacionales que son los smbolos que nos van a permitir obtener una respuesta Verdadera o Falsa:

> Mayor que < Menor que >= Mayor o igual a <= Menor o igual a = Igual a (tambin llamado igual de comparacin) < > Diferente de

Es importante resaltar que el signo igual ( = ) utilizado como operador relacional tiene una funcin diferente que el signo igual ( = ) utilizado para asignarle un valor a una variable. En el primer caso sera utilizado para preguntar, por ejemplo, si el contenido de la variable a es igual al valor 5 y en el segundo caso estaramos asignando a la variable a el valor 5. Son dos usos realmente diferentes.

Algunos lenguajes diferencian sintcticamente el igual de comparacin (==) del igual de asignacin precisamente para que el compilador no tenga la opcin de realizar interpretaciones ambiguas. Tambin podemos conectar expresiones relacionales (tales como a<b) a travs de los Operadores Booleanos que no son ms que unos signos que nos van a permitir expresar dichas relaciones.

Cuando ramos nios y nos decan, al mandarnos a la tienda, trae un refresco y un pan de $10 tenamos

33

< > Programacin

varias opciones. a. De lo contrario traamos ninguna de las dos cosas entonces no habamos cumplido la orden. b. De lo contrario no traamos el refresco pero s traamos el pan de $10 tampoco habamos cumplido la orden c. Si traamos el refresco pero no traamos el pan de $10 tampoco habamos cumplido la orden d. Si traamos el refresco y tambin traamos el pan de $10 entonces s habamos cumplido la orden completamente.

Para este ejemplo asumimos que cumplir la orden es hacer el mandado completo. Igualmente vamos a asumir la frase Hemos cumplido la orden como un Verdadero ( V ) y la frase No hemos cumplido la orden como un Falso ( F ). De esta forma podramos organizar la siguiente tabla de verdad:

Condicin 1 Trae un refresco F F

Condicin 2 Trae un pan de $10 F

Cond1 Y Cond2

Explicacin textual

No cumplimos completamente la

orden No cumplimos completamente la

orden No cumplimos completamente la

orden Cumplimos completamente la orden

34

< > Programacin

2.4 Ciclos
Un ciclo puede definirse como una estructura que nos permite repetir o iterar un conjunto de instrucciones y que tiene las siguientes caractersticas:

a) El conjunto de instrucciones debe ser finito b) La cantidad de veces que se repita dicho conjunto de instrucciones tambin debe ser finita. c) Deben estar claramente demarcados el inicio y el fin del ciclo. En los casos en los cuales slo exista una instruccin a iterar, no sern necesarios dichas marcas. d) Dentro de un ciclo podr ir cualquiera de las otras estructuras que se han estudiado incluyendo otros ciclos.

2.4.1 Ciclo Mientras (While) Es el esquema general de trabajo para todos los ciclos. Es til que sepas que este ciclo tambin es llamado el Ciclo Mientras Que. Su estructura general es la siguiente

Mientras Condicin
. . Cuerpo del Ciclo . .

Fin_Mientras

Su forma de ejecucin es muy sencilla: Mientras se cumpla que la condicin sea Verdadera entonces se ejecutar el Cuerpo del Ciclo. De manera que tambin podramos decir que el Cuerpo del Ciclo se repetir tantas veces como lo permita la condicin o mientras dicha condicin sea Verdadera.

35

< > Programacin

Ejemplo Escribir los nmeros impares comprendidos entre 1 y 20. Programa Ejem_Ciclo_Mientras

Variables Entero :Num Inicio Num = 1

Mientras Num < = 20


Escriba Num Num = Num + 2

Fin_Mientras
Fin

2.4.2 Ciclo Para (For) Permite ejecutar una o varias instrucciones mientras los valores de una progresin aritmtica de razn creciente o decreciente se vayan asignando a una variable llamada variable de control del ciclo para. El control del ciclo se hace en forma automtica, con base en parmetros que establece el programador. La diferencia con el ciclo Mientras es que en el ciclo PARA, la variable controladora se inicializa, se incrementa y se compara automticamente. Representacin o forma general

PARA VC = LI, LF, INC HACER


Accion1 Accion2 Accion_ n

FIN_PARA

36

< > Programacin

Dnde:

VC.- Variable de control del ciclo LI.- Lmite inicial LF.- Lmite final INC.- Incremento

En este ciclo la variable de control toma el valor inicial del ciclo y el ciclo se repite hasta que la variable de control llegue al lmite final.

Funcionamiento:

a. Si INC es positivo: (LI < LF) Cuando se activa la estructura, automticamente se asigna el valor de LI a VC y se compara VC con LF. Si VC>LF, no se ejecuta la secuencia de instrucciones o acciones. Si

VC<=LF, se ejecuta la secuencia una vez y automticamente regresa al principio del ciclo a incrementar la variable controladora en el valor de INC (VC=VC+INC) y se compara nuevamente el valor de VC con LF. Si nuevamente VC<=LF, se vuelve a ejecutar la secuencia y se regresa al principio del ciclo a repetir lo mismo. Si ahora, VC>LF, se termina el ciclo automticamente.

b. Si INC es negativo: Se hace lo mismo pero se ejecuta la secuencia siempre y cuando VC>=LF y no se ejecuta si VC<LF. En ese caso LI>LF

37

< > Programacin

Ejemplo: Hacer un algoritmo que imprima las tablas de multiplicar de 1 a 5. Definicin de variables:

I: multiplicando J: Multiplicador P: Producto

Algoritmo: INICIO

PARA I=1, 5, 1 HACER


PARA J=1, 5, 1 HACER

P=I*J
Imprimir I, *, J, =, P

FIN_PARA

FIN_PARA

FIN_INICIO

2.4.3 Ciclo Hacer-Mientras (Repeat While) Repite un proceso una o varias veces, a diferencia del Mientras, el cual lo repite cero o ms veces, esto debido a que el REPETIR evala la condicin al final del proceso, mientras que en el Mientras puede ser que nunca llegue a entrar si la condicin no se cumple desde un principio.

La forma de esta estructura es la siguiente:

REPETIR
Accin 1

38

< > Programacin

Accin 2 . . Accin N

MIENTRAS <condicin>

Funcionamiento: Al entrar a la estructura se ejecuta la secuencia de acciones o instrucciones una vez y se evala la condicin. Si sta es falsa, se sale del ciclo y se contina con la siguiente instruccin; si es verdadera, se ejecuta nuevamente la secuencia y se vuelve a evaluar la condicin. El proceso se repite mientras la condicin sea verdadera.

Ejemplo: Hacer un algoritmo que encuentre la suma de los primeros N nmeros naturales. Algoritmo: INICIO SUMA=0 NUM=1 Leer N

REPETIR
SUMA=SUMA+NUM NUM=NUM+1

MIENTRAS NUM<=N
Imprimir La suma de los primeros , N, nmeros naturales es: , SUMA FIN_INICIO

39

< > Programacin

2.4.4 Ciclo Hacer-Hasta (Repeat Until) Esta es otra de las formas que traen algunos de los lenguajes de programacin para expresar un ciclo. Su estructura general es la siguiente

Haga
. . . Cuerpo del Ciclo . . .

Hasta Condicin

En este ciclo el Cuerpo del mismo se va a ejecutar hasta cuando se cumpla una condicin esto quiere decir que el conjunto de instrucciones que conforman el cuerpo del ciclo se va a repetir mientras la evaluacin de la condicin sea Falsa. Es un ciclo muy parecido al Ciclo Mientras con la diferencia de que en ste la instrucciones se repiten Mientras la condicin sea Falsa y no verdadera como sera en el Ciclo Mientras.

40

< > Programacin

2.4.5 Ciclos Anidados Se define como ciclos anidados la estructura en la cual un ciclo est dentro de otro (completamente). Esto significa que si se tratara de una estructura mientras anidada su esquema sera el siguiente:

Mientras Condicin1
. .

Mientras Condicin2
. . Cuerpo del ciclo mas interno . .

Fin_Mientras Interno
. .

Fin_Mientras Externo

Su forma de ejecucin es muy sencilla: Mientras sea Verdadera la condicin1 el ciclo externo va a ejecutar el cuerpo del ciclo dentro del cual se encuentra un ciclo interno que est regido por la condicin2 de tal manera que se ejecutar completamente el ciclo interno mientras la condicin2 sea Verdadera. Cuando sta condicin2 sea Falsa se ejecutarn el resto de instrucciones del ciclo externo y se volver a la condicin1 a evaluar si an es verdadera para volver a entrar en el cuerpo de dicho ciclo.

41

Comprender la importancia de elaborar un diseo conceptual previo al diseo lgico. Implementar el diseo de la base de datos utilizando un SMBD a partir del diseo conceptual. Conocer un lenguaje que permita realizar consultas estructuradas.

< > Programacin

3 Almacenamiento persistente de datos


Una base de datos es una herramienta para recopilar y organizar informacin. En las bases de datos, se puede almacenar informacin sobre personas, productos, pedidos, o cualquier otra cosa. Las bases de datos son creadas mediante un sistema de administracin de bases de datos o DBMS.

3.1 Diseo conceptual


Por ejemplo, una base de datos muy sencilla podra ser una agenda de direcciones en la que anotemos datos de nuestros amigos. Tendramos una ficha para cada uno de estos amigos. En cada ficha, a su vez, existir una serie de apartados, como el nombre, la direccin, el telfono, etc. Esto nos permite introducir dos primeros conceptos que utilizaremos: cada una de estas fichas recibe el nombre de registro, y cada uno de los apartados que componen las fichas se llama campo.

Una base de datos es un contenedor de objetos. Una base de datos puede contener ms de una tabla. Por ejemplo, un sistema de seguimiento de inventario que utiliza tres tablas no es un conjunto de tres bases de datos, sino una sola base de datos que contiene tres tablas. El conjunto de las fichas (registros) forma un bloque de informacin, que llamaremos tabla, y que se suele representar escribiendo cada ficha (registro) en una fila y cada apartado (campo) en una columna, as: Nombre Jos Jess Juan Direccin C/ Rana 1 C/ Sapo 2 C/ Boa 3 Ciudad Alicante Madrid Barcelona Telfono 111-11-11 222-22-22 333-33-33

Cada uno de estos bloques de datos ser una tabla, y estas tablas estarn relacionadas entre s (por ejemplo: un artculo ser suministrado por un cierto proveedor, y ese artculo aparecer en ciertas facturas, cada una de las cuales corresponder a un cierto cliente). Todo este conjunto de informacin que forman las tablas y las relaciones entre ellas (y alguna cosa ms que ya veremos) ser nuestra base de datos. En concreto, se tratar de lo que se conoce como una base de datos relacional.

43

< > Programacin

Etapas de diseo El primer paso antes de crear una base de datos es pararse a pensar. Ni ms ni menos. Si en la programacin es muy peligroso eso de empezar a teclear segn aparece una idea (a pesar de que hay bastante gente que lo hace, y alguno lo hace incluso bien... si el programa es corto), en la creacin de bases de datos es muy raro que salga bien. El segundo paso recomendable es ir anotando las ideas segn surgen. Cuando creemos que ya est todo, deberamos volver a leer todas las notas que habamos tomado, porque eso nos ayudar a tener una visin de conjunto y a notar si falta algo que no hayamos previsto inicialmente. El tercer paso ser empezar a dibujar garabatos que representen esa informacin. Para ello veremos por encima un modelo llamado Entidad-Relacin. El dibujo nos ayudar a tener una nueva versin de conjunto, mucho ms fcil de seguir y ms completa que las anotaciones. Aqu se vern todava mejor las carencias y las incongruencias que puedan existir. El cuarto paso ser convertir este dibujo en las tablas. Este paso puede ser casi totalmente mecnico. Por ejemplo, la conversin del modelo Entidad-Relacin (el que veremos) a una base de datos relacional (las que normalmente manejaremos) es casi inmediato. Se acab el diseo. Podramos aadir un quinto paso que sera la introduccin de los datos y la creacin de una serie de estructuras auxiliares, como formularios, consultas o informes.

3.1.1 Entidades Una entidad es la representacin de un objeto o concepto del mundo real que se describe en una base de datos. Una entidad se describe en la estructura de la base de datos empleando un modelo de datos. Por ejemplo, nombres de entidades pueden ser: Alumno, Empleado, Artculo, etc. Cada entidad est constituida por uno o ms atributos. Por ejemplo, la entidad Alumno podra tener los atributos: nombre, apellido, ao de nacimiento, etc. En el modelo de entidad-relacin se emplean dos tipos de entidades: entidad fuerte y entidad dbil. Las entidades fuertes tienen atributos claves, en tanto las entidades dbiles no tienen atributos claves propios.

44

< > Programacin

3.1.2 Relaciones En bases de datos, una relacin o vnculo entre dos o ms entidades describe algna interaccin entre las mismas. Por ejemplo, una relacin entre una entidad Empleado y una entidad Sector podra ser trabaja_en, porque el empleado trabaja en un sector determinado.

Las relaciones se describen en la estructura de la base de datos empleando un modelo de datos. Las relaciones son muy empleadas en los modelos de bases de datos relacional y afines.

En SQL las relaciones son llamadas tablas.

Vamos ver un primer ejemplo, que nos ayudar a llevar a la prctica todo esto y a introducir el modelo Entidad-Relacin. Imaginemos que nos proponen el siguiente problema: Se desea automatizar un centro de estudios de pequeo tamao. Interesa controlar exclusivamente los asuntos acadmicos: qu alumnos tenemos, qu cursos/asignaturas han realizado, qu profesores tenemos en plantilla, quin ha impartido cada uno de los cursos, etc. Estas seran las indicaciones que nos dara el cliente (o que nosotros pensaramos, si lo realizamos para nosotros). Ahora tendramos que pensar si vemos que falta algo (y preguntar al cliente, si procede, cosas como si desea guardar la direccin y dems datos postales de los alumnos y de los profesores, o si quiere saber la nota que cada alumno obtuvo en cada curso) o incluso si sobra algo (porque resulte demasiado difcil de llevar a cabo -difcil, para nosotros?... lo dudo-). Pasamos a desglosar en bloques de informacin. De momento todava no hablaremos de tablas, sino de entidades (un nombre ms ambiguo pero ms adecuado) y de relaciones entre estas entidades. En nuestro caso, las cosas (entidades) que tenemos son bsicamente stas: Alumnos. Cursos. Profesores.

Y las relaciones que hay entre estas entidades son: Los profesores IMPARTEN cursos. Los alumnos ASISTEN a cursos.

45

< > Programacin

Indirectamente, los alumnos y los profesores tambin estn relacionados: un alumno ha asistido a un curso que ha impartido un cierto profesor; esta relacin ya queda reflejada a partir de las otras dos, as que no es necesario detallarla.

Aun comentaremos algo ms sobre las relaciones. Una caracterstica importante de las relaciones es su cardinalidad: por ejemplo, en la relacin de que los alumnos asisten a los cursos, es importante si a cada curso slo puede asistir un alumno o varios, y si un alumno puede asistir a un solo curso o a varios. Tendremos cuatro posibilidades: Que cada alumno asista a uno y slo uno de los cursos (se expresa como 1:1 -uno a uno-) Que cada alumno pueda asistir a muchos cursos, pero en cada curso slo puede haber un alumno (1:M -uno a muchos-) Que cada alumno pueda asistir a un nico curso, pero pueda haber varios alumnos en un curso (M:1 -muchos a uno-). Que cada alumno pueda asistir a varios cursos, y en cada curso pueda haber varios alumnos (M:M -muchos a muchos-) En nuestro caso, la relacin asistir es una relacin de muchos a muchos (M:M). Podramos preguntarnos la cardinalidad de la otra relacin (los profesores imparten cursos). En este caso, cada profesor puede impartir varios cursos, y supondremos que cada curso es impartido por un nico profesor (estoy dando por supuesto que se considera distinto un curso de Bases de Datos impartido en una fecha y otro de la misma temtica pero impartido en fecha distinta). Se tratara de una relacin de uno a muchos 1:M. Una observacin: en las relaciones es importante el sentido en el que se leen. Por ejemplo, la relacin los profesores imparten cursos es una relacin 1:M (uno a muchos), mientras que la relacin opuesta los cursos son impartidos por profesores es una relacin M:1 (muchos a uno). Estas relaciones que hemos comentado son relaciones binarias (entre dos entidades). 3.1.3 Modelo Entidad-Relacin Este es un modelo que nos permitir dibujar las entidades y las relaciones que existen entre ellas. Nosotros usaremos el modelo Entidad-Relacin Extendido (EER). Existen varias notaciones ligeramente distintas. Voy a utilizar la que considero ms sencilla. En esta notacin se representan las entidades como un rectngulo y las relaciones binarias como un rombo partido por la mitad. Si la relacin es 1:M, una de las mitades (la que corresponde al muchos) deber estar sombreada, y si es M:M, todo el rombo estar sombreado, lo antes mencionado puede observarse en la Figura 3.1.

46

< > Programacin

Figura 3.1 Vamos a ver cmo quedara el diagrama Entidad-Relacin de nuestro ejemplo en la figura 3.2:

Figura 3.2 As de sencillo: tenemos 3 entidades (profesores, cursos, alumnos) y dos relaciones (impartir, entre profesores y alumnos, 1:M, y asistir, entre alumnos y cursos, M:M). Realmente, ya a este nivel se suele indicar los apartados que hay en cada entidad (lo que sern los campos de nuestras tablas). A estos apartados les llamaremos atributos, y se representan como pequeas elipses que salen de las entidades. Vamos a pensar primero qu atributos nos podra interesar para nuestras entidades: Alumnos: CURP Nombre Direccin Ciudad

47

< > Programacin

Telfono Fecha de nacimiento Fecha de alta en el centro Fotografa Profesores: CURP Nombre Direccin Ciudad Telfono Conocimientos Sueldo Cuenta bancaria Cursos: Nombre del curso Fecha de comienzo Duracin (horas) Importe (pesos) Nmero mximo de alumnos Es slo un ejemplo. Insisto en que de momento no estamos pensando en tablas, sino simplemente en qu informacin queremos almacenar. Segn el sistema de bases de datos que empleemos realmente, puede ocurrir que sea incmodo (o incluso imposible) trabajar con algunos de estos datos que hemos previsto (por ejemplo, la fotografa del alumno). Pero eso ya nos lo plantearemos despus. Lo que s vamos a pensar ya es cual de esos datos nos permitir distinguir una ficha de otra. Esto se hace porque podemos tener dos alumnos con el mismo nombre, pero claramente son personas distintas, y debemos saber qu cursos ha realizado cada uno de ellos sin posibilidad de confusin, para no dar a uno el diploma que corresponda a otro, ni cobrarle un dinero de otro. En el caso de los alumnos, no son datos nicos los siguientes: el nombre (puede repetirse, incluso con apellidos), la direccin (dos hermanos o dos amigos pueden vivir en la misma casa), el telfono (ocurre lo mismo), la fecha de nacimiento (tambin podemos encontrar dos alumnos que hayan nacido el mismo da), etc.

48

< > Programacin

Lo que realmente distinguir a un alumno de otro es su nmero de CURP (Clave nica de Registro de Poblacin) o pasaporte, que s es nico. Pues bien, este dato que puede distinguir una persona de otra (o en general una ficha -registro- de otra) es lo que llamaremos la clave. Puede ocurrir que no exista nada que nos sirva claramente como clave, como es el caso de los cursos: no es nico el nombre (podemos impartir ms de un curso con el mismo contenido), ni la fecha de comienzo (varios cursos pueden comenzar el mismo da), ni la duracin, ni el importe, ni el nmero mximo de alumnos. En estos casos se suele aadir algo arbitrario, un cdigo, que nos permita distinguir un curso de otro (en general una ficha -registro- de otra). En nuestro caso, incluiramos un nuevo atributo, llamado Cdigo de curso. Un ltimo comentario antes de ver cmo quedara nuestro diagrama EER con sus atributos. Puede ocurrir que nuestra entidad tenga varios atributos nicos, todos los cuales puedan servir como clave. Entonces escogemos una de ellas como clave principal, y el resto sern claves alternativas, que no llegaremos a usar como claves. En el diagrama, el atributo que vaya a utilizarse como clave principal aparecer subrayado. Ahora ya s. Nuestro diagrama quedara como en la Figura 3.3 (no incluyo todos los atributos que habamos pensado, slo algunos como ejemplo, que es con los que trabajaremos a partir de ahora):

Figura 3.3

49

< > Programacin

3.2 Diseo lgico


3.2.1 Tipos de Datos En general, los tipos de datos habituales, que encontraremos en casi cualquier sistema de bases de datos, son los siguientes: Texto (o alfanumrico, o carcter), cuando nuestro campo deba almacenar letras y quizs algn otro tipo de smbolos de puntuacin y/o cifras numricas. Numrico, cuando nuestro campo vaya a guardar cantidades numricas, especialmente si ms adelante necesitaremos realizar operaciones aritmticas con estas cantidades numricas. Lgico, cuando slo hay dos posibilidades (verdadero o falso, s o no). Fecha, para almacenar fechas (y, en ocasiones, tambin horas). Memo, es un campo de texto especial, que permite una longitud ilimitada, pero a cambio su acceso es ms lento que el campo de texto normal. Otros menos habituales nos permitirn guardar imgenes o ficheros en general, nmeros que se incrementen automticamente, hipervnculos (enlaces a una cierta direccin dentro de nuestra computadora u otro), etc.

3.3 Lenguaje de consulta


3.3.1 Sintaxis bsica del lenguaje de consulta estructurado (SQL) SQL es un lenguaje de computacin que sirve para trabajar con conjuntos de datos y las relaciones entre ellos. SQL se usa para describir conjuntos de datos que pueden ayudarle a responder preguntas. Cuando se usa SQL, debe emplear la sintaxis correcta. La sintaxis es el conjunto de reglas mediante las cuales se combinan los elementos de un lenguaje correctamente. La sintaxis de SQL se basa en la sintaxis del ingls.

Comandos Existen dos tipos de comandos SQL: Los DLL que permiten crear y definir nuevas bases de datos, campos e ndices. Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos (select, insert, update y delete)

50

< > Programacin

Clusulas Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular. Clusula from where group by having order by Descripcin Utilizada para especificar la tabla de la cual se van a seleccionar los registros Utilizada para especificar las condiciones que deben reunir los registros que se van seleccionar Utilizada para especificar los registros seleccionados en grupos especficos Utilizada para expresar la condicin que debe satisfacer cada grupo Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico

Por ejemplo, una simple instruccin SQL que recupera una lista de los apellidos de contactos cuyo nombre es Mara podra ser similar a esto:

SELECT Apellidos FROM Contactos WHERE Nombre = Mara;

3.3.2 Sentencias de seleccin, insercin, actualizacin y borrado de datos Sentencias de Seleccin Se utilizan para indicar al motor de datos que devuelva informacin de las bases de datos, esta informacin es devuelta en forma de un conjunto de registros que pueden modificarse. Sintaxis:

SELECT Atributos FROM Tabla Atributos: lista de propiedades que se deseen presentar Tabla: nombre de la tabla que contiene los atributos a presentar

51

< > Programacin

Ejemplo:

SELECT Nombre, Telefono FROM Clientes


Esta consulta devuelve un recordset con el campo nombre y telfono de la tabla clientes.

Sentencias de insercin Para almacenar datos en una base de datos debemos insertar filas en las tablas. Para ellos SQL pone a nuestra disposicin la sentencia INSERT.

Insercin individual de filas Para realizar la insercin individual de filas SQL posee la instruccin INSERT INTO. La insercin individual de filas es la que ms comnmente se utiliza. Su sintaxis es la siguiente:

INSERT INTO <nombre_tabla>


[(<campo1>[,<campo2>,...])] values (<valor1>,<valor2>,...);

valores que queremos insertar en los campos. La mejor forma de ver esto es a travs de un ejemplo.

INSERT INTO seguida de la lista de campos en los que queremos insertar los datos, y por otro la lista de

Como se puede observar la sentencia tiene dos partes claramente diferenciadas, por un lado la propia

INSERT INTO tCoches


(matricula, marca modelo color , , ,

numero_kilometros)

52

< > Programacin

values (M1111CA, RENAULT, MEGANE TR100, NEGRO DIAMANTE, 78000);

Nota: Hemos utilizado el color rojo para los datos de tipo texto, entrecomillados con la comilla simple, y el azul para los numricos.

Con esta sentencia INSERT creamos un registro en la tabla tCoches con los valores especificados, es decir, la matricula tendr el valor M-1111-CA, la marca ser RENAULT y as sucesivamente.

Sentencias de actualizacin Para la actualizacin de datos SQL dispone de la sentencia UPDATE. La sentencia UPDATE permite la actualizacin de uno o varios registros de una nica tabla. La sintaxis de la sentencia UPDATE es la siguiente:

UPDATE <nombre_tabla> SET <campo1> = <valor1>


{[,<campo2> = <valor2>,...,<campoN> = <valorN>]} [ WHERE <condicion>];

Las siguientes sentencias actualizan los datos de la tabla tCoches con los valores de la tabla tMarca.

UPDATE tCoches SET marca = 1 WHERE marca = FORD;

53

< > Programacin

UPDATE tCoches SET marca = 2 WHERE marca = RENAULT;

UPDATE tCoches SET marca = 3 WHERE marca = SEAT;

Sentencias de borrado de datos Para borrar datos de una tabla, debemos utilizar la sentencia DELETE. La sintaxis de la sentencia DELETE es la siguiente:

DELETE FROM <nombre_tabla>

[ WHERE <condicion>]; El siguiente ejemplo ilustra el uso de la sentencia DELETE. Es buena idea especificar en la sentencia WHERE los campos que forman la clave primaria de la tabla para evitar borrar datos que no queramos eliminar.

DELETE FROM tCoches WHERE marca = SEAT;


Cuando trabajemos con la sentencia DELETE debemos tener en cuenta las siguientes consideraciones: Slo podemos borrar datos de una nica tabla. Cuando borramos datos de una vista, los estamos borrando tambin de la tabla. Las vistas son slo una forma de ver los datos, no una copia.

54

Identificar la plataforma .NET, tambin su kit de desarrollo .Net Framework, que le permitirn desarrollar aplicacio nes simples o complejas. Conocer el entorno de C# y su instalacin. Describir los elementos que confor man un programa, conocer los diferentes tipos de datos y como hacer la declaracin de estos. Operar las sentencias de control. Conocer las definiciones de mtodo, arreglo y colecciones, su uso e importancia.

< > Programacin

4 .NET

4.1 .NET Framework


.NET Framework es un entorno multi-lenguaje para la construccin, distribucin y ejecucin de Servicios Web y aplicaciones dicho de otra forma es una plataforma diseada para simplificar el desarrollo de aplicaciones en el entorno distribuido de Internet. .Net es un conjunto de bibliotecas que pueden ser utilizadas por aplicaciones para acelerar el desarrollo de programas y optimizar el rendimiento. .Net ofrece un entorno de ejecucin de aplicaciones, compiladores, y permite el desarrollo de todo tipo de programas de escritorio, aplicaciones para Internet, para dispositivos mviles, etc. Caractersticas Proporciona un entorno coherente de programacin orientada a objetos, en el que el cdigo de los objetos se puede almacenar y ejecutar de forma local, ejecutar de forma local pero distribuida en Internet o ejecutar de forma remota. Proporciona un entorno de ejecucin de cdigo que minimiza la implementacin de software y los conflictos de control de versiones. Ofrece un entorno de ejecucin de cdigo que promueve la ejecucin segura del mismo, incluso del creado por terceros. Proporciona un entorno de ejecucin de cdigo que elimina los problemas de rendimiento de los entornos en los que se utilizan scripts o intrpretes de comandos. Ofrece al programador una experiencia coherente entre tipos de aplicaciones muy diferentes, como las basadas en Windows o en el Web.

4.1.1 Entorno de ejecucin .NET proporciona un entorno de ejecucin para aplicaciones llamada Common Language Runtime o CLR. CLR es la implementacin de Microsoft de un estndar llamado Common Language Infrastructure o CLI. ste fue creado y promovido por Microsoft pero desde hace aos es un estndar reconocido mundialmente. El CLR/CLI esencialmente define un entorno de ejecucin virtual independiente en el que trabajan las aplicaciones escritas con cualquier lenguaje .NET. Este entorno virtual se ocupa de multitud de cosas importantes para una aplicacin: desde la gestin de la memoria y la vida de los objetos hasta la seguridad y la gestin de subprocesos.

56

< > Programacin

Todos estos servicios unidos a su independencia respecto a arquitecturas computacionales convierten la CLR en una herramienta extraordinariamente til puesto que, en teora, cualquier aplicacin escrita para funcionar segn la CLI puede ejecutarse en cualquier tipo de arquitectura de hardware. Por ejemplo Microsoft dispone de implementacin de .NET para Windows de 32 bits, Windows de 64 bits e incluso para Windows Mobile, cuyo hardware no tiene nada que ver con la arquitectura de un ordenador comn 4.1.2 Biblioteca de Clase Base (BCL) La plataforma .NET (Figura 4.1) nos ofrece infinidad de funcionalidades de fbrica que se utilizan como punto de partida para crear aplicaciones. Existen funcionalidades bsicas (por ejemplo todo lo relacionado con la E/S de datos o la seguridad) y funcionalidades avanzadas en las que se fundamentan categoras enteras de aplicaciones (acceso a datos, creacin de aplicaciones Web...).Toda esta funcionalidad est implementada en forma de bibliotecas de funciones que fsicamente se encuentran en diversas DLL (bibliotecas de enlace dinmico). A su conjunto se le denomina Base Classes Library (Biblioteca de clases base o BCL) y forman parte integral de la plataforma .NET, es decir, no se trata de aadidos que se deban obtener o adquirir aparte.

Figura 4.1 Todo lo que se encuentra en la BCL forma parte de la plataforma .NET. De hecho existe tal cantidad de funcionalidad integrada dentro de estas bibliotecas (hay decenas de miles de clases) que el mayor esfuerzo que todo programador que se inicia en .NET debe hacer es el aprendizaje de las clases ms importantes. De todos modos Visual Studio ofrece mucha ayuda contextual (documentacin, Intellisense...) y una vez que se aprenden las bases resulta fcil ir avanzando en el conocimiento de la BCL a medida que lo vamos necesitando.

57

< > Programacin

4.1.3 Sistema de tipo comn (CTS) El sistema de tipos comn define cmo se declaran, utilizan y administran los tipos en el motor en tiempo de ejecucin. Es tambin una parte importante de la compatibilidad en tiempo de ejecucin con la integracin entre lenguajes. El sistema de tipos comn realiza las funciones siguientes: Establece un marco de trabajo que ayuda a permitir la integracin entre lenguajes, la seguridad de tipos y la ejecucin de cdigo con alto rendimiento. Proporciona un modelo orientado a objetos que admite la implementacin completa de muchos lenguajes de programacin. Define reglas que deben seguir los lenguajes, lo que ayuda a garantizar que los objetos escritos en distintos lenguajes puedan interactuar unos con otros. El Sistema de tipos comn es el modelo que define las reglas que se siguen en Common Language Runtime para declarar, utilizar y administrar tipos. Este sistema establece un marco de trabajo que permite la integracin entre lenguajes, la seguridad de tipos y ejecutar cdigo de alto rendimiento. Es la materia prima a partir de la cual se pueden crear bibliotecas de clases.

4.1.4 Especificacin del lenguaje comn (CLS) macin que determina la interoperacin de los tipos creados en distintos lenguajes de programacin. La seleccin de CLS es un modo excelente de garantizar la interoperacin entre lenguajes. Los diseadores de bibliotecas de clases administradas pueden utilizar CLS para asegurarse de que las API creadas se pueden llamar desde una amplia gama de lenguajes de programacin. Tenga en cuenta que aunque CLS promueve el diseo correcto de bibliotecas, no lo impone.

Common Language Specification (CLS) define un conjunto de reglas comprobables mediante progra-

4.2 Entorno de Programacin


Es el banco de trabajo del programador, se encarga de dar soporte a las actividades de la fase de codificacin (preparacin del cdigo y prueba de unidades). Los mismos productos sirven tambin para el diseo detallado y para las pruebas de integracin. Se sita, por tanto, en la parte central del ciclo de desarrollo.

58

< > Programacin


4.2.1 Entorno de Desarrollo (IDE) Se utiliza el acrnimo IDE (Integrated Development Environment) para referirnos al entorno de desarrollo integrado de C#. Al igual que los procesadores de palabras, programas que facilitan la creacin de documentos, el IDE cuenta con herramientas para crear (desarrollar) programas. Todas las herramientas que requerimos para dicho propsito estn integradas, por lo que podemos realizar la totalidad de nuestro trabajo dentro del IDE en vez de tener que usar otros programas. En otras palabras, el IDE nos proporciona un entorno de programacin completo. 4.2.2 Descarga e Instalacin Descarga Microsoft Visual C# 2012 Express Edition. Siga las instrucciones de instalacin y registre el producto si el proceso te pide hacerlo.Lo puedes descargar desde la sigueinte liga: http://www.microsoft.com/visualstudio/esn/downloads 4.2.3 Interfaz de usuario A continuacin describiremos la interfaz de usuario de manera general y para hacer de un modo ms sencillo la explicaremos a travs de un ejemplo: El programa que crearemos a continuacin desplegar el mensaje Hola mundo en la pantalla de tu computadora. Independientemente de lo anterior, deber seguir estos pasos generales para crear cualquier programa. 1. Abre el IDE. A continuacin aparecer la Pgina de inicio, como se muestra en la Figura 4.2 2. Has clic en el vnculo Crear: Proyecto A continuacin se mostrar la ventana Nuevo Proyecto (Figura 4.3) .

Figura 4.2

59

< > Programacin

Figura 4.3 Asegrate de que est seleccionada la plantilla Aplicacin de Windows Forms. Elije un nombre para tu proyecto, mismo que se convertir tambin en la identificacin de una carpeta. Te recomendamos utilizar slo letras, dgitos y espacios. En nuestro caso utilizamos el nombre Primer Hola. Haz clic en Aceptar. A continuacin aparecer un rea de diseo similar (aunque no necesariamente idntica) a la que se muestra en la Figura 4.4.

Figura 4.4

60

< > Programacin


3. Para facilitar tu incursin en el lenguaje C#, es conveniente que el cuadro de herramientas est siempre visible. Haz clic en el men Ver y seleccione Cuadro de herramientas. Ahora haz clic en el smbolo de chincheta del cuadro de herramientas (Figura 4.5), el cuadro de herramientas quedar fijo y abierto de manera permanente. Haz clic en Todos los formularios Windows Forms para ver la lista de herramientas disponibles.

Figura 4.5 Los pasos anteriores son comunes en la realizacin de cualquier proyecto. Realicemos ahora una tarea especfica para este proyecto en particular. Observa el formulario y el cuadro de herramientas ilustrados en la Figura 4.6.

Figura 4.6

61

< > Programacin


A continuacin seleccionaremos un control del cuadro de herramientas, y lo colocaremos en el formulario. stos son los pasos a seguir: Localiza el cuadro de herramientas y has clic en Control Label. Desplaza el puntero del ratn hacia el formulario. Has clic y, sin soltar el botn, arrastra para crear una etiqueta como en la Figura 4.7.

Figura 4.7 Ahora estableceremos algunas propiedades de la etiqueta: has clic con el botn derecho del ratn sobre la etiqueta y seleccione Propiedades. Desplaza el ratn hacia la lista Propiedades en la parte inferior derecha de la pantalla, como se muestra en la Figura 4.8:

Figura 4.8

62

< > Programacin

Desplzate hasta la propiedad Text y sustituye el texto label1 por Hola Mundo.

Ejecutemos ahora el programa, haciendo clic en la flecha que se encuentra en la parte superior del IDE se trata del botn Iniciar depuracin ver Figura 4.9.

Figura 4.9 Aparecer una nueva ventana, como se muestra en la Figura 4.10. Es el programa que haz creado. Slo muestra algo de texto, pero es una verdadera ventana en cuanto a que puede moverla, cambiar su tamao y cerrarla al hacer clic en el icono X que se encuentra en la esquina superior derecha.

Figura 4.10 Para guardar tu programa y poder usarlo ms adelante: Ve al men Archivo y selecciona la opcin Guardar todo. A continuacin aparecer la ventana Guardar proyecto. Aparecer una ventana como la de la figura 4.11

Figura 4.11 Haz clic en Guardar.

63

< > Programacin


4.3 Introduccin a la programacin en C#
4.3.1 Estructura de un programa Los programas en C# pueden constar de uno o varios archivos. Cada archivo puede contener cero o varios namespaces . Un namespace puede contener tipos como clases, estructuras, interfaces, enumeraciones y delegados, adems de otros spacenames. A continuacin, se muestra la estructura de un programa en C# que contiene todos estos elementos.

// Estructura general de un programa en C# using System; namespace Ejemplo { class Program { } //Nombre de la clase //Nombre del programa

struct TuEstructura { }

interface TuInterfaz { }

delegate int EjemploDelegate();

enum EjemEnum {

64

< > Programacin

namespace TuNamespaceAnidado { struct Tu estructura { } }

class TuClaseprincipal { static void Main(string[] args) { //Tu programa inicia aqu... } } }

4.3.2 Palabras reservadas Existen palabras para utilizacin exclusiva de C#, de manera que el programador no los puede reutilizar. Se denominan palabras clave o palabras reservadas. Las palabras clave son identificadores predefinidos reservados que tienen un significado especial para el compilador. No se pueden utilizar como identificadores en un programa a menos que incluyan el carcter @ como prefijo. Por ejemplo, @if es un identificador vlido pero if no lo es porque if es una palabra clave.

65

< > Programacin


Palabras clave de instrucciones En la tabla siguiente se muestran todas las palabras clave de las instrucciones de C#.

Categora Instrucciones de seleccin Una instruccin de seleccin hace que el control del programa se transfiera a un determinado punto del flujo de ejecucin dependiendo de qu cierta condicin sea verdadera o no. Instrucciones de iteracin Las instrucciones de iteracin permiten crear bucles. En un bucle, las instrucciones internas se ejecutan un determinado nmero de veces, segn el criterio de terminacin del bucle. Estas instrucciones se ejecutan en orden, salvo cuando se encuentra una instruccin de salto. Instrucciones de salto La bifurcacin del flujo secuencial normal de un programa se consigue mediante instrucciones de salto, las cuales producen una transferencia inmediata del control del programa. Las siguientes palabras clave se utilizan en instrucciones de salto: Instrucciones de control de excepciones C# incorpora mecanismos para el tratamiento de las situaciones anmalas, denominadas excepciones, que pueden producirse durante la ejecucin de un programa. Estas excepciones se controlan mediante cdigo situado fuera del flujo normal de control. Checked y unchecked Las instrucciones de C# se pueden ejecutar en un contexto comprobado (checked) o no comprobado (unchecked). En un contexto comprobado, el desbordamiento aritmtico produce una excepcin. En un contexto no comprobado, se hace caso omiso del desbordamiento aritmtico y el resultado se trunca.

Palabras clave de C# if,else,switch,case

do,for,foreach,in,while

break,continue,default,goto,return,yield

throw,try-catch,try-finally,try-catch-finally

checked,unchecked

66

< > Programacin

4.3.3 Literales Una literal es la representacin explcita de los valores que pueden tomar los tipos bsicos del lenguaje. A continuacin se explica cul es la sintaxis con que se escriben los literales en C# desglosndolos segn el tipo de valores que representan: Literales enteros: Un nmero entero se puede representar en C# tanto en formato decimal como hexadecimal. En el primer caso basta escribir los dgitos decimales (0-9) del nmero unos tras otros, mientras que en el segundo hay que preceder los dgitos hexadecimales (0-9, a-f, A-F) con el prefijo 0x. En ambos casos es posible preceder el nmero de los operadores + para indicar si es positivo o negativo, aunque si no se pone nada se considerar que es positivo. Ejemplos de literales enteros son 0, 5, +15, -23, 0x1A, -0x1a, etc.

En realidad, la sintaxis completa para la escritura de literales enteros tambin puede incluir un sufijo que indique el tipo de dato entero al que ha de pertenecer el literal.

Literales reales: Los nmeros reales se escriben de forma similar a los enteros, aunque slo se pueden escribir en forma decimal y para separar la parte entera de la real usan el tradicional punto decimal (carcter .) Tambin es posible representar los reales en formato cientfico, usndose para indicar el exponente los caracteres e E. Ejemplos de literales reales son 0.0, 5.1, -5.1, +15.21, 3.02e10, 2.02e-2, 98.8E+1, etc.

Literales lgicos: Los nicos literales lgicos vlidos son true y false, que respectivamente representan los valores lgicos cierto y falso.

Literales de carcter: Prcticamente cualquier carcter se puede representar encerrndolo entre comillas simples. Por ejemplo, a (letra a), (carcter de espacio), ? (smbolo de interrogacin), etc.

4.3.4 Variables Una variable representa un valor numrico o de cadena o un objeto de una clase. El valor que la variable almacena puede cambiar, pero el nombre sigue siendo el mismo. Una variable es un tipo de campo. El cdigo siguiente es un ejemplo sencillo de cmo declarar una variable de entero, asignarle un valor y, a continuacin, asignarle un nuevo valor.

int x = 1; // a x se asigna el valor 1 x = 2; // ahora x vale 2

67

< > Programacin

En C#, las variables se declaran con un tipo de datos y una etiqueta concreto adems tienes que especificar si la variable es de tipo int, float, byte, short u otro cualquiera.

4.3.5 Tipos de Datos Un tipo de datos se puede describir como: Un tipo de datos integrado, como int o char, o bien Un tipo de datos definidos por el usuario, como class o interface. 4.3.5.1 int La palabra clave int denota un tipo entero que almacena valores segn el tamao y el intervalo que se indica en la tabla siguiente:
Tipo de .NET Framework System.Int32 Valor predeterminado 0

Tipo int

Intervalo De -2.147.483.648 a 2.147.483.647

Tamao Entero de 32 bits con signo

Las variables de tipo int se pueden declarar e inicializar como en el siguiente ejemplo:

int i = 123;

4.3.5.2 double La palabra clave double denota un tipo simple que almacena valores de punto flotante de 64 bits. La siguiente tabla muestra la precisin y el intervalo de valores aproximado para el tipo double.
Tipo double Intervalo aproximado 5,010324a 1,710308 Precisin 15-16 dgitos Tipo de .NET Framework System.Double

De forma predeterminada, una literal numrica real en el lado derecho del operador de asignacin se trata como un valor de tipo double por ejemplo:

double x = 3;

68

< > Programacin

4.3.5.3 float La palabra clave float denota un tipo simple que almacena valores de punto flotante de 32 bits. La siguiente tabla muestra la precisin y el intervalo de valores aproximado para el tipo float.
Tipo float Intervalo aproximado -3.41038to +3.41038 Precisin 7 dgitos Tipo de .NET Framework System.Single

De forma predeterminada, una literal numrica real en el lado derecho del operador de asignacin se trata como double. Por consiguiente, para inicializar una variable de tipo float, utiliza el sufijo f o F, como en el ejemplo siguiente:

float x = 3.5 F;

4.3.5.4 char La palabra clave char se utiliza para declarar una instancia de la estructura de System.Char que .NET Framework utiliza para representar un carcter Unicode. El valor de un objeto de Char es un valor (ordinal) numrico de 16 bits. Los caracteres Unicode se utilizan para representar la mayor parte de los idiomas escritos en el mundo.
Tipo char Intervalo De U+0000 a U+FFFF Size Carcter Unicode de 16 bits Tipo de .NET Framework System.Char

Las constantes de tipo char se pueden escribir como literales de cadena, secuencias de escape hexadecimales o representaciones Unicode. Los cdigos de caracteres integrales se pueden convertir explcitamente al tipo char.

69

< > Programacin

bool La palabra clave bool es un alias de System.Boolean. Se utiliza para declarar variables que almacenan los valores booleanos, true y false. Puede asignar un valor booleano a una variable de tipo bool. Tambin puede asignar una expresin que se evale como bool a una variable de tipo bool.

long La palabra clave long denota un tipo entero que almacena valores segn el tamao y el intervalo que se indican en la tabla siguiente:
Tipo long Intervalo 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 Tamao Entero de 64 bits con signo Tipo de .NET Framework System.Int64

Las variables de tipo long se pueden declarar e inicializar como en el siguiente ejemplo:

long long1 = 4294967296;

4.3.6 Operadores En C#, un operador es un trmino o un smbolo que acepta como entrada una o ms expresiones, denominadas operandos, y devuelve un valor. Los operadores que requieren un operando, como el operador de incremento (++) o new, se denominan operadores unarios. Los operadores que requieren dos operandos, como los operadores aritmticos (+, -, *, /) se denominan operadores binarios. El operador condicional (?:), utiliza tres operandos y es el nico operador terciario de C#. Los operadores de una expresin se evalan en un orden concreto conocido como prioridad de operadores. La tabla siguiente divide a los operadores en categoras basadas en el tipo de operacin que realizan. Las categoras se muestran en orden de prioridad.

70

< > Programacin

Principal Unario Aritmticos: multiplicativos Aritmticos: aditivos Desplazamiento Comprobacin de tipos y relacionales Igualdad Lgicos, en orden de prioridad Condicionales, en orden de prioridad Asignacin

x.y, f(x), a[x], x++, x--,new,typeof,checked,unchecked +,-,!,~,++x,--x, (T)x *,/,% +,<<,>> <,>,<=,>=,is,as ==,!= &,^,| &&,||,?: =,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=

Cuando dos operadores con la misma prioridad estn presentes en una expresin, se evalan segn su asociatividad. Los operadores que son asociativos por la izquierda se evalan en orden de izquierda a derecha. Por ejemplo, x * y / z se evala como (x * y) / z. Los operadores que son asociativos por la derecha se evalan en orden de derecha a izquierda. Los operadores de asignacin y el operador terciario (?:) son asociativos por la derecha. Todos los otros operadores binarios son asociativos por la izquierda. Sin embargo, el estndar de C# no especifica cundo se ejecuta la parte fija de una instruccin de incremento en una expresin. Por ejemplo, el resultado del cdigo de ejemplo siguiente es 6:

int num1 = 5;
num1++; System.Console.WriteLine(num1); Los parntesis se pueden utilizar para envolver una expresin y hacer que esa expresin sea evaluada antes que cualquier otra. Por ejemplo, 2 + 3 * 2 normalmente daran 8 como resultado. Esto es porque los operadores multiplicativos tienen prioridad sobre los operadores aditivos. Escribir la expresin (2 + 3) * 2 da como resultado 10, ya que sta indica al compilador de C# que el operador de adicin (+) se debe evaluar antes que el operador de multiplicacin (*).

71

< > Programacin

Operadores aritmticos Los operadores aritmticos son los siguientes: Smbolo * / % + multiplicacin divisin mdulo suma resta Accin

La multiplicacin, divisin y mdulo (*, / y %) se llevan a cabo antes que la suma y la resta (+ y ). Tambin podemos usar parntesis para agrupar los clculos y forzarlos a llevarse a cabo en un orden especfico. Si un clculo incluye operadores de la misma precedencia, las operaciones se realizarn de izquierda a derecha. He aqu algunos ejemplos:

int i; int n = 3; double d; i = n + 3; i = n * 4; i = 7 + 2 * 4;


// se convierte en 6 // se convierte en 12 // se convierte en 15 // se convierte en 60

n = n * (n + 2) * 4; d = 3.5 / 2; n = 7 / 4;

// se convierte en 1.75 // se convierte en 1

Recuerde que las instrucciones forman una secuencia, la cual se ejecuta de arriba hacia abajo en la pgina. Siempre que se utilicen parntesis, los elementos que stos contengan se calcularn primero. La multiplicacin y la divisin se realizan antes de la suma y la resta. Por lo tanto: 3+2*4 se lleva a cabo como si se hubiera escrito as: 3 + (2 * 4)

72

< > Programacin

El uso de los operadores +, y * es razonablemente intuitivo, pero la divisin es un poco ms engaosa, ya que exige diferenciar entre los tipos int y double. En este sentido, lo importante es tomar en cuenta que: Cuando el operador / trabaja con dos nmeros double o con una mezcla de double e int se produce un resultado double. Para fines de clculo, cualquier valor int se considera como double. As es como funciona la divisin en una calculadora de bolsillo. Cuando / trabaja con dos enteros se produce un resultado entero. El resultado se trunca, lo cual significa que se borran los dgitos que pudiera haber despus del punto decimal. sta no es la forma en que funcionan las calculadoras. He aqu algunos ejemplos: // divisin con valores double

double d;
d = 7.61 / 2.1; // se convierte en 3.7 d = 10.6 / 2; // se convierte en 5.3

En el primer caso la divisin se lleva a cabo de la manera esperada. En el segundo el nmero 2 se trata como 2.0 (es decir, un double) y la divisin se realiza. Sin embargo, la divisin con enteros es distinta: //divisin con enteros

int i;
i = 10 / 5; i = 13 / 5; i = 33 / 44; // se convierte en 2 // se convierte en 2 // se convierte en 0

En el primer caso se espera una divisin con enteros; la respuesta exacta que se produce es 2. En el segundo caso el resultado tambin es 2, debido a que se trunca el verdadero resultado. En el tercer caso se trunca la respuesta correcta de 0.75, con lo cual obtenemos 0.

73

< > Programacin

El operador % Por ltimo veremos el operador % (mdulo). A menudo se utiliza junto con la divisin de enteros, ya que provee la parte del residuo. Su nombre proviene del trmino mdulo. Anteriormente dijimos que los valores double se almacenan de manera aproximada, a diferencia de los enteros, que lo hacen de forma exacta. Entonces cmo puede ser que 33/44 genere un resultado entero de 0? Acaso perder 0.75 significa que el clculo no es preciso? La respuesta es que los enteros s operan con exactitud, pero el resultado exacto est compuesto de dos partes: el cociente (es decir, el resultado principal) y el residuo. Por lo tanto, si dividimos 4 entre 3 obtenemos como resultado 1, con un residuo de 1. Esto es ms exacto que 1.3333333, etc. En consecuencia, el operador % nos da el residuo como si se hubiera llevado a cabo una divisin. He aqu algunos ejemplos:

int i; double d;
i = 12 % 4; i = 13 % 4; i = 15 % 4; // se convierte en 0 // se convierte en 1 // se convierte en 3

d = 14.9 % 3.9; // se convierte en 3.2 (se divide 3.2 veces) El uso ms frecuente de % es con nmeros int. Veamos un problema que involucra un resultado con residuo: convertir un nmero entero de centavos en dos cantidades: la cantidad de dlares y el nmero de centavos restantes. La solucin es:

int centavos = 234; int dolares, centavosRestantes;


dolares = centavos / 100; // se convierte en 2

centavosRestantes = centavos % 100; // se convierte en 34

Unin de cadenas con el operador + Hasta ahora hemos visto el uso de variables numricas, pero tambin es muy importante el procesamiento de datos de texto. C# cuenta con el tipo de datos string; las variables string pueden guardar cualquier caracter. La longitud mxima de una cadena es de aproximadamente dos mil millones de caracteres.

74

< > Programacin

El siguiente es un ejemplo del uso de cadenas:

string primerNombre = Salvador ; string apellidoPaterno, nombreCompleto; string saludo;


apellidoPaterno = Lpez; nombreCompleto = primerNombre + apellidoPaterno; saludo = Saludos de + nombreCompleto; //se convierte en Saludos de Salvador Lpez

En el ejemplo anterior declaramos algunas variables string y les asignamos valores iniciales mediante el uso de comillas dobles. Despus utilizamos la asignacin, en la cual el valor de la cadena a la derecha del signo = se almacena en la variable utilizada a la izquierda del mismo, de manera similar a la asignacin numrica (si intentamos utilizar una variable que no haya recibido un valor, C# nos informar que la variable no est asignada y el programa no se ejecutar). Las siguientes lneas ilustran el uso del operador +, que (de igual manera que al sumar nmeros) opera sobre las cadenas y las une extremo con extremo. A esto se le conoce como concatenacin. Despus de la instruccin: nombreCompleto = primerNombre + apellidoPaterno; el valor de nombreCompleto es Salvador Lpez.

4.3.7 Constantes y enumeraciones Constantes Las constantes son valores inmutables que se conocen en tiempo de compilacin y no cambian mientras dura el programa. Las constantes se declaran con el modificador const. Slo los tipos integrados de C# (excluido System.Object) se pueden declarar como const. El tipo de enumeracin permite definir constantes con nombre para los tipos integrados enteros (por ejemplo int, uint, long, etc.). Las constantes se deben inicializar tal como se declaran. Por ejemplo: class Calendar1

75

< > Programacin

{ public const int meses = 12; }

En este ejemplo, la constante meses siempre es 12 y no se puede cambiar. De hecho, cuando el compilador encuentra un identificador de constante en el cdigo fuente de C# (por ejemplo, meses), sustituye directamente el valor literal en el cdigo de lenguaje intermedio (IL) que genera. Se pueden declarar varias constantes del mismo tipo al mismo tiempo, por ejemplo: class Calendar2 { const int meses = 12, semanas = 52, dias = 365; }

Enumeraciones

enum es la palabra clave que se utiliza para declarar una enumeracin, un tipo distinto que consiste en un
conjunto de constantes con nombre denominado lista de enumeradores. Cada tipo de enumeracin tiene un tipo subyacente, que puede ser cualquier tipo excepto char. El tipo predeterminado subyacente de los elementos de la enumeracin es int. De forma predeterminada, el primer enumerador tiene el valor 0 y el valor de cada enumerador sucesivo se incrementa en 1. Por ejemplo:

enum Dias {Sab, Dom, Lun, Mar, Mie, Jue, Vie};


En esta enumeracin, Sab es 0, Dom es 1, Lun es 2 y as sucesivamente. Los enumeradores pueden tener inicializadores que reemplazan a los valores predeterminados. Por ejemplo:

enum Dias {Sab=1, Dom, Lun, Mar, Mie, Jue, Vie};


En esta enumeracin, se obliga a que la secuencia de elementos empiece en 1 en vez de en 0. A una variable de tipo Dias se le puede asignar cualquier valor en el intervalo del tipo subyacente; los valo-

76

< > Programacin

res no se limitan a las constantes con nombre. El valor predeterminado de un enum E es el valor producido por la expresin (E)0.

Nota: Un enumerador no puede contener espacio en blanco en su nombre.

Tipos de enumeraciones Un tipo de enumeracin proporciona una manera eficaz de definir un conjunto de constantes con nombre que pueden asignarse a una variable. Por ejemplo, suponga que tiene que definir una variable cuyo valor representar un da de la semana. Slo hay siete valores significativos que almacenar dicha variable. Para definir esos valores, puede utilizar un tipo de enumeracin, que se declara mediante la palabra clave enum.

enum Dias { Domingo ,Lunes, Martes, Mircoles, Jueves, Viernes, Sabado}; enum Meses : byte { Ene, Feb, Mar, Abr, May, Jun, Jul, Ago, Sep, Oct, Nov, Dic };

Las ventajas de utilizar una enumeracin en lugar de un tipo numrico: Se especifica claramente para el cdigo de cliente qu valores son vlidos para la variable. En Visual Studio, IntelliSense muestra los valores definidos. Si no se especifican valores para los elementos en la lista de enumeradores, los valores se incrementan automticamente en 1. En el ejemplo anterior, Dias.Domingo tiene un valor de 0, Dias.Lunes tiene un valor de 1, y as sucesivamente. Al crear un nuevo objeto Dias, ste tendr un valor predeterminado de Dias.Domingo (0) de lo contrario se le asigna un valor explcitamente. Al crear una enumeracin, selecciona el valor predeterminado ms lgico y asgnale el valor cero. De esta forma, todas las enumeraciones tendrn ese valor predeterminado si no se les asigna un valor explcitamente al crearlas.

77

< > Programacin

4.4 Sentencias de Control


4.4.1 Condicionales Todos los seres humanos hacemos elecciones en la vida diaria. Usamos un paraguas si llueve; compramos un CD si tenemos suficiente dinero. Las elecciones tambin se utilizan mucho en los programas. La computadora evala un valor y de acuerdo con el resultado, toma un curso de accin u otro. Cada vez que un programa hace una seleccin entre varias acciones y decide realizar una u otra se utiliza una instruccin if o switch para describir la situacin. Algunas veces desearemos que se evalen ciertos datos y se elija una de varias acciones dependiendo del resultado de la evaluacin. Por ejemplo, tal vez necesitemos que la computadora evale la edad de una persona y le diga si puede votar o es demasiado joven para hacerlo. A esto se le conoce como seleccin, y para llevarla a cabo se utiliza una instruccin conocida como if. Las instrucciones if son tan importantes que se utilizan en todos los lenguajes de programacin que se han inventado. 4.4.1.1 La instruccin if Se trata de un si condicional, por ejemplo si apruebas, te compro un Xbox y un videojuego. Pues bien, en programacin, es ms o menos lo mismo. Escrito en pseudocdigo se vera de la siguiente forma:

Si (apruebas) {
te compro un Xbox; te compro un videojuego;

En C# podemos poner el siguiente ejemplo:

if (num==10) {
Console.WriteLine(El nmero es igual a 10);

78

< > Programacin

En este ejemplo, se evala como verdadero o falso lo que est dentro de los parntesis, es decir, num==10. Por lo tanto, el operador == retornar verdadero (true) siempre que num valga 10, y falso (false) si vale otra cosa.

En C# == es el operador de comparacin y = es de asignacin.

NOTA: La condicin a evaluar se encierra entre parntesis; sta es una regla de la sintaxis de C#. Observa tambin que para la prueba de igualdad se utiliza el operador == (no el operador =).

La instruccin if consta de dos partes: La condicin a evaluar; La instruccin o secuencia de instrucciones a ejecutar si la condicin es verdadera.

Es muy frecuente que se lleve a cabo no slo una accin, sino secuencias completas de acciones si el resultado de la evaluacin es verdadero. En este caso, las acciones a realizar deben ir encerradas entre los corchetes.

4.4.1.2 if ... else Algunas veces es necesario especificar dos secuencias de acciones: las que se llevarn a cabo si la condicin es verdadera, y las que sern realizadas si es falsa para eso podemos hacer uso de la instruccin else. Podramos decir que funciona como un de lo contrario, es decir, si apruebas, te compro un Xbox y un videojuego; de lo contrario, te castigo en tu cuarto y te quedas sin cenar. Su pseudocdigo sera algo como esto:

Si (apruebas) {
te compro un Xbox; te compro un videojuego;

} de lo contrario

79

< > Programacin

{
te castigo en tu cuarto; te quedas sin cenar;

Veamos cmo se escribe esta instruccin en C#:

if (num==10) {
Console.WriteLine(El nmero es igual a 10);

} else {
Console.WriteLine(El nmero no es igual a 10);

Esta instruccin if consta de tres partes:

La condicin a evaluar; La instruccin o secuencia de instrucciones que se ejecutarn si la condicin es verdadera; esta parte debe ir encerrada entre corchetes; La instruccin o instrucciones a ejecutar si la condicin es falsa; esta parte debe ir encerrada entre corchetes.

El nuevo elemento en este cdigo es la palabra clave else, que introduce la segunda parte de la instruccin if.

80

< > Programacin

4.4.2 Ciclos Los seres humanos estamos acostumbrados a realizar determinadas actividades como comer, dormir y trabajar una y otra vez. Las computadoras realizan repeticiones similares cuando, por ejemplo: suman una lista de nmeros; buscan cierta informacin en un archivo; resuelven una ecuacin matemtica de manera iterativa, obteniendo cada vez mejores aproximaciones; hacen que una imagen grfica se mueva en la pantalla (animacin).

Ahora veremos cmo repetir una secuencia de instrucciones cierto nmero de veces. En parte, el poder de las computadoras deriva de su habilidad de realizar repeticiones con extrema rapidez. En el lenguaje de programacin a las repeticiones se les conoce como ciclos, bucles o loops.

4.4.2.1 for El ciclo for va asignando valores a una variable desde un valor inicial hasta un valor final, y cuando la variable contiene un valor que est fuera del intervalo el ciclo termina. Veamos la sintaxis:

for (var=inicial;condicin;siguientevalor) {
Instrucciones

La explicacin es la siguiente despus de la sentencia for se indican las especificaciones del ciclo entre parntesis. Estas especificaciones estn divididas en tres partes separadas por punto y coma: la parte de asignacin del valor inicial en primer lugar; la parte que verifica la continuidad del bucle (mediante una condicin) en segundo lugar; y la parte en que se calcula el siguiente valor en tercer lugar.

81

< > Programacin

Por ejemplo: Realicemos un ciclo for que imprima los nmeros del 1 al 5:

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


Console.WriteLine(i);

La condicin determina si el ciclo for se ejecuta o completa de cualquiera de las siguientes maneras: Si la condicin es verdadera, se ejecuta el cuerpo del ciclo. Si la condicin es falsa, el ciclo termina y se ejecutan las instrucciones que van despus de la llave de cierre.

Ten en cuenta que es posible escribir la declaracin de una variable dentro de una instruccin for junto con su inicializacin, algo que se hace con frecuencia. Esta variable puede utilizarse dentro del cuerpo de la instruccin for.

4.4.2.2 while La traduccin de while a espaol significa mientras, por lo tanto un ciclo while se repetir mientras una condicin determinada se cumpla, o sea, verdadera (true). Veamos su sintaxis:

while (expresin bool) {


Instrucciones

Entonces las Instrucciones que se hallen dentro del ciclo while se ejecutarn continuamente mientras la expresin de tipo boolean sea verdadera (true). Por ejemplo, podemos escribir un ciclo while para pedir una contrasea de usuario. En C# quedara similar a esto:

82

< > Programacin

string Clave=programacion123; string Res=;

while (Res!=Clave) {
Console.Write(Dame la clave: ); Res=Console.ReadLine();

}
Console.WriteLine(La clave es correcta); string a=Console.ReadLine();

En este pequeo ejemplo el programa pedir una y otra vez la clave al usuario, y cuando ste teclee la clave correcta ser cuando finalice la ejecucin del mismo. Algunas veces se escriben ciclos que empiezan con un conteo de 0, y la intencin de la evaluacin es verificar si la condicin es menor que el nmero requerido, como se muestra a continuacin: conteo = 0;

while (conteo < nmeroRequerido) {


// cuerpo conteo = conteo++;

83

< > Programacin

En otras ocasiones el ciclo comienza con un conteo de 1 y la evaluacin busca corroborar si la condicin es menor o igual al nmero requerido, como en el ejemplo siguiente:

conteo = 1;

while (conteo <= nmeroRequerido) {


// cuerpo conteo = conteo++;

4.4.2.3 do ... while Cuando se utilizan las instrucciones while o for, la evaluacin se realiza siempre al principio de la repeticin. El ciclo do es una estructura alternativa, en la cual la evaluacin se lleva a cabo al final de cada repeticin. Esto significa que el ciclo siempre se repite por lo menos una vez. La sintaxis es la siguiente:

do {
Instrucciones

} while (expresin bool);

84

< > Programacin

Realicemos el ejemplo anterior que solicitaba una contrasea: using System;

namespace BuclesDo { class BuclesDoApp { static void Main() { string Clave=Compadre, cmprame un coco; string Res=;

do
{ Console.Write(Dame la clave: ); Res=Console.ReadLine(); } while (Res!=Clave);

Console.WriteLine(La clave es correcta);

string a=Console.ReadLine(); } } } El resultado sera el mismo que antes. La diferencia est en que aqu dara exactamente lo mismo lo que valiera la variable Res antes de llegar al bucle, puesto que este se va a ejecutar antes de comprobar dicho valor, y al ejecutarse, el valor de Res se sustituye por lo que se introduzca en la consola.

85

< > Programacin


4.4.3 Uso de Break y Contine 4.4.3.1 Break La instruccin break permite terminar el bucle envolvente ms cercano o la instruccin switch en la cual aparece. El control se transfiere a la instruccin que sigue a la instruccin terminada, si existe alguna. En este ejemplo, la instruccin condicional contiene un contador que se supone que cuenta de 1 a 100; sin embargo, la instruccin break termina el bucle tras 4 iteraciones. // statements_break.cs using System; class BreakTest { static void Main() {

for (int i = 1; i <= 100; i++)


{

if (i == 5)
{

break;
} Console.WriteLine(i); } } }

Resultados 1 2 3 4

86

< > Programacin

4.4.3.2 Continue La instruccin continue transfiere el control a la siguiente iteracin de la instruccin de iteracin envolvente donde aparece. Ejemplo En este ejemplo, se inicializa un contador que cuenta de 1 a 10. Utilizando la instruccin continue con la expresin (i < 9), se omiten las instrucciones situadas entre continue y el final del cuerpo del bucle for. // statements_continue.cs using System; class ContinueTest { static void Main() {

for (int i = 1; i <= 10; i++)


{

if (i < 9)
{

continue;
} Console.WriteLine(i); } } }

87

< > Programacin

4.5 Mtodos, Arreglos y Colecciones


4.5.1 Mtodos Los programas grandes pueden ser complejos, difciles de comprender y de depurar. La tcnica ms importante para reducir esta complejidad consiste en dividir el programa en secciones (relativamente) independientes. Esto nos permite enfocarnos en una seccin especfica sin distraernos con el programa completo. Adems, si la seccin tiene nombre podemos llamarla o invocarla (es decir, hacer que sea utilizada por otra instancia) con slo hacer referencia a ella. Trabajar de esta manera nos permite, en cierto sentido, pensar a un nivel ms alto. En C# a dichas secciones se les conoce como mtodos.

4.5.1.1 Nuestro primer mtodo Vamos a construir una clase llamada Boligrafo. Una clase es una construccin que permite crear tipos personalizados propios mediante la agrupacin de variables de otros tipos, mtodos y eventos. Una clase es como un plano. Define los datos y el comportamiento de un tipo. Los mtodos de nuestra clase Boligrafo sern, por ejemplo, Pintar y Recargar, que son las operaciones que se suelen efectuar con un bolgrafo. Ambos mtodos modificarn la cantidad de tinta del bolgrafo, valor que podramos poner en una propiedad llamada Tinta. Recordemos que un mtodo es como un procedimiento o una funcin. En determinadas ocasiones necesitaremos pasarle datos a los mtodos para que estos puedan hacer su trabajo. Siguiendo con el bolgrafo, puede que necesitemos decirle al mtodo Pintar la cantidad de tinta que vamos a gastar. Pues bien, estos datos se llaman argumentos. Vamos a verlo:

using System; class Boligrafo { protected int color=0; protected byte tinta=100;

88

< > Programacin

public bool Pintar(byte gasto) { if (gasto>this.tinta) return false; this.tinta -= gasto; Console.WriteLine(Se gastaron {0} unidades de tinta., gasto); return true; } public void Recargar() { this.tinta=100; Console.WriteLine(Bolgrafo recargado); } public int Color { get { return this.color; } set { this.color = value; } } public byte Tinta { get

89

< > Programacin

{ return this.tinta; } } }

En este ejemplo tienes los mtodos Pintar y Recargar (presta especial atencin a la sintaxis). El primero disminuye la cantidad de tinta, y el segundo establece esta cantidad nuevamente a 100, es decir, rellena el bolgrafo de tinta.

El encabezado declara el nombre del mtodo (que nosotros tenemos la libertad de elegir) y los elementos que deben suministrarse para controlar su operacin.

C# utiliza los trminos argumentos y parmetros para definir estos elementos. Al resto del mtodo se le conoce como cuerpo, y va encerrado entre llaves { }; aqu es donde se realiza el trabajo.

A menudo el encabezado es una lnea extensa, y nosotros podemos optar por dividirlo en puntos adecuados (aunque no en medio de una palabra).

Una importante decisin que debe tomar el programador es el lugar desde donde se puede invocar el mtodo; en este sentido, tenemos dos opciones:

El mtodo slo puede ser invocado desde el interior del programa actual; en este caso utilizamos la palabra clave private. El mtodo puede ser invocado desde otro programa; en este caso utilizamos la palabra clave public.

Otra decisin que debe tomar el programador es: El mtodo realizar una tarea sin necesidad de producir un resultado? En este caso utilizamos la palabra clave void despus de private.

90

< > Programacin

El mtodo calcular un resultado y lo devolver a la seccin de cdigo que lo invoc? En este caso tenemos que declarar el tipo del resultado, en vez de usar void. Ms adelante en el captulo veremos cmo hacerlo.

4.5.1.2 Cmo invocar mtodos Para invocar un mtodo privado en C# es preciso indicar su nombre junto con una lista de argumentos entre parntesis. En nuestro programa la primera llamada es:

DibujarLogo(papel, miLapiz, 10, 20); Esta instruccin tiene dos efectos: Los valores de los argumentos se transfieren al mtodo de manera automtica. Ms adelante hablaremos sobre esto con mayor detalle. El programa salta al cuerpo del mtodo (la instruccin despus del encabezado) y ejecuta las instrucciones. Cuando termina con todas las instrucciones y llega al caracter }, la ejecucin contina en el punto desde el que se hizo la llamada al mtodo. Estos efectos se pueden visualizar en la Figura 4.12

Figura 4.12

91

< > Programacin

Despus se lleva a cabo la segunda llamada: DibujarLogo(papel, miLapiz, 100, 100); Son dos llamadas que producen dos logotipos.

4.5.1.3 Cmo pasar argumentos Es imprescindible comprender lo mejor posible cmo se transfieren (pasan) los argumentos a los mtodos. En nuestro ejemplo el concepto se muestra en las siguientes lneas: DibujarLogo(papel, miLapiz, 10, 20); private void DibujarLogo(Graphics areaDibujo, Pen lpizAUsar, int posX, int posY)

El rea en la que debemos enfocarnos est constituida por las dos listas de elementos que se hallan entre parntesis. En una llamada los elementos se denominan argumentos. En el encabezado del mtodo los elementos se denominan parmetros. Para aclarar esta situacin extraigamos los parmetros y los argumentos: argumentos: papel parmetros: miLapiz lapizAUsar 10 20

areaDibujo

posX posY

Recordemos la comparacin que hicimos de una variable con una caja. Dentro del mtodo hay un conjunto de cajas vacas (los parmetros) que esperan la transferencia de los valores de los argumentos. Despus de la transferencia tenemos la situacin que se muestra en la Figura No contamos con valores numricos para pasarlos al rea de dibujo y el lpiz, por lo que nos enfocaremos en cmo se transfieren las coordenadas (Figura 4.13).

Figura 4.13

92

< > Programacin

La transferencia se realiza de izquierda a derecha. La llamada debe proporcionar el nmero y tipo correctos de cada argumento. Si el que hace la llamada (el usuario) recibe accidentalmente los argumentos en el orden incorrecto, el proceso de la transferencia no los regresar a su orden correcto.

Cuando el mtodo DibujarLogo se ejecuta, estos valores controlan el proceso de dibujo. Aunque en este ejemplo invocamos el mtodo con nmeros, tambin podemos utilizar expresiones (es decir, incluir variables y clculos), como en el siguiente ejemplo: int x = 6; DibujarLogo(papel, miLapiz, 20 + 3, 3 * 2 + 1); // 23 y 7 DibujarLogo(papel, miLapiz, x * 4, 20); // 24 y 20

4.5.2 Parmetros 4.5.2.1 Parmetros y argumentos En el anlisis que estamos llevando a cabo estn involucradas dos listas entre parntesis, y es importante aclarar el propsito de cada una de ellas: El programador que escribe el mtodo debe elegir cules son los elementos que ste solicitar por medio de parmetros. En el mtodo DibujarLogo las medidas de los cuadrados anidados siempre se establecen en 20, 40 y 60, de manera que la instancia que invoca el mtodo no necesita suministrar esos datos. Sin embargo, tal vez quien haga la llamada quiera variar la posicin del logotipo, utilizar un lpiz distinto o incluso dibujarlo en un componente distinto (como un botn). Estos elementos se han convertido en parmetros. El escritor del mtodo debe elegir el nombre de cada parmetro. Si se utilizan nombres similares en otros mtodos no hay problema alguno, pues cada uno de ellos tiene una copia propia de sus parmetros. En otras palabras, el escritor tiene la libertad de elegir cualquier nombre. Se debe proporcionar el tipo de cada parmetro; esta informacin debe ir antes del nombre del mismo. Los tipos dependen del mtodo en particular. Se utiliza una coma para separar los parmetros entre s. En el encabezado de DibujarLogo puede comprobar este acomodo. Quien hace la llamada debe proveer una lista de argumentos entre parntesis, y stos tendrn que ser del tipo correcto y estar en el orden adecuado para el mtodo. Los dos beneficios que conlleva la utilizacin de un mtodo para dibujar el logotipo son: evitamos duplicar las tres instrucciones DrawRectangle cuando se requieren varios logos, y al dar un nombre a esta tarea podemos ser decididamente ms creativos. Por ltimo, sabemos que tal vez desee aplicar las habilidades de programacin que ha aprendido aqu a

93

< > Programacin

otros lenguajes, pero debe saber que an cuando los conceptos son similares la terminologa podra ser distinta; por ejemplo, en muchos lenguajes quien hace la llamada provee los parmetros actuales, y la declaracin del mtodo tiene parmetros formales. 4.5.3 Namespace Un Namespace es una forma de agrupar clases, funciones, tipos de datos relacionados, y otros namespaces. Se utiliza una forma jerrquica para crear un esquema que nos permita hacer referencia y organizar las clases de la BCL. Adems las clases irn creciendo porque nos creemos nuestras propias clases o porque consigamos alguna de otros desarrolladores. Una misma clase puede aparecer en varios espacios de nombres.

4.5.3.1 La palabra clave using y los namespaces C# incluye una enorme biblioteca (o coleccin) de clases que podemos utilizar. Un aspecto muy importante de la programacin en C# radica en la posibilidad de emplear estas clases en vez de escribir nuestro propio cdigo. A esto se le conoce como reutilizacin de software. Debido a que hay miles de ellas, las clases estn subdivididas en grupos cuyo mbito es conocido mediante la palabra clave namespace. Por otro lado, para utilizar una clase primero debemos asegurarnos de que se importe a nuestro programa mediante la palabra clave using. Esto puede ocurrir de dos formas: algunos de los espacios de nombres que se utilizan con ms frecuencia se importan de manera automtica en cualquier aplicacin de Windows. Estos namespaces son: System System.Drawing System.Collections System.ComponentModel System.Windows.Forms System.Data

94

< > Programacin

4.5.4 Arreglos En la vida real es muy frecuente que tengamos que lidiar con datos que no estn aislados, sino agrupados en colecciones de informacin. Algunas veces este tipo de informacin se encuentra almacenada en tablas, tal como ocurre en el caso de los itinerarios de trenes, los directorios telefnicos o los estados de cuenta bancarios. En programacin a estas colecciones de datos se les conoce como estructuras de datos, y tienen la particularidad de que cada parte de la informacin de la tabla est relacionada de cierta forma con el resto. El arreglo es uno de los tipos ms simples de estructura de datos en programacin. Un arreglo se puede considerar simplemente como una tabla con una sola fila (o columna) de informacin en forma de nmeros, cadenas de caracteres o cualquier otra cosa. La siguiente es una tabla de palabras que almacena los nombres de los miembros de un grupo musical:

C# denomina estas tablas como arreglos. En programacin cada uno de los datos de un arreglo es conocido como elemento, y nos referimos a l por la posicin que ocupa en el arreglo llamada ndice, algunas veces se utiliza el trmino componente en vez de elemento, y el trmino subndice en vez de ndice). Desde nuestro punto de vista, el nombre John est en la posicin uno de la tabla anterior, pero C# cuenta los elementos a partir de cero. En consecuencia, la cadena de caracteres Ringo se encuentra en la tercera posicin del arreglo. A la posicin que ocupa un elemento en un arreglo se le conoce como ndice. As, podemos visualizar los arreglos y sus ndices de la siguiente manera:

Recuerda que los ndices no se guardan en la memoria de la computadora, slo los datos. Los ndices constituyen el mecanismo que nos permite localizar la informacin en un arreglo. He aqu otro arreglo, esta vez conteniendo nmeros. Tambin se muestran sus ndices:

En los programas (al igual que en la vida real) por lo general tenemos que realizar las siguientes operaciones con arreglos:

95

< > Programacin

Crear el arreglo: determinar cul es su longitud y qu tipo de elementos almacenar. Colocar valores en el arreglo (equivalente, por ejemplo, a introducir nmeros en un directorio telefnico personal). Desplegar en pantalla el contenido del arreglo (los arreglos se guardan en la memoria de la computadora y, por ende, son invisibles). Buscar en el arreglo cierto valor (algo similar a buscar en el itinerario de trenes una corrida en horario conveniente). Sumar el contenido del arreglo (equivalente a averiguar cunto gast un cliente en el supermercado).

4.5.5 Declaracin En C# los arreglos se declaran de la misma manera que cualquier otro objeto: mediante la palabra clave new, y por lo general en la parte superior de una clase o de un mtodo. Adems, el programador debe darle nombre, como se muestra a continuacin:

int[] edades = new int[6]; string[] grupo = new string[4];


La variable edades est ahora lista para guardar un arreglo de enteros. El nmero entre corchetes que est despus del nombre del arreglo representa su tamao. El arreglo edades es lo bastante grande como para contener seis nmeros (enteros, int), cuyos ndices irn de 0 a 5. Por su parte, el arreglo grupo tiene capacidad suficiente para contener cuatro cadenas de caracteres (string) sus ndices van de 0 a 3.

4.5.5.1 ndices Para hacer referencia a un elemento individual de un arreglo el programa debe especificar el valor del ndice (algunas veces llamado subndice) correspondiente. Por lo tanto, edades[3] hace referencia al elemento que tiene el ndice 3 en el arreglo: el valor 12 en el caso de nuestro ejemplo. De manera similar, grupo[2] contiene la cadena George. Recuerde que los ndices empiezan en 0, por lo que un arreglo de longitud 4 tiene ndices que van de 0 a 3. Por lo tanto, si hiciramos referencia a grupo[4] estaramos cometiendo un error, el programa se detendra y aparecera un mensaje indicndolo.

96

< > Programacin

En resumen, los valores de los ndices: empiezan en cero; son enteros; llegan hasta un nmero menos que el tamao del arreglo (el valor que se especifica al momento de declarar el arreglo). Algunas veces es conveniente utilizar como ndice el valor de una variable. En tales casos utilizamos variables int como ndices. Por ejemplo para modificar los valores de elementos individuales de un arreglo a travs de instrucciones de asignacin, como en el siguiente ejemplo: edades[3] = 99; grupo[2] = Mike; Para hacer referencia a los elementos individuales de un arreglo, en todos estos fragmentos de programa hemos especificado el valor de un ndice. Es frecuente que necesitemos hacer referencia al n-simo elemento en un arreglo, siendo n una variable. Por ejemplo, supn que deseamos sumar todos los nmeros de un arreglo (de nmeros), e imagina que ste consta de siete elementos que representan el nmero de computadoras vendidas en un almacn durante cada da de la semana: int[] venta = new int[7]; Para insertar valores en el arreglo emplearemos instrucciones de asignacin. Suponga que el lunes (da 0) se vendieron 13 computadoras: venta[0] = 13; y el resto de la semana se vendieron estas cantidades: venta[1] = 8; venta[2] = 22; venta[3] = 17; venta[4] = 24; venta[5] = 15; venta[6] = 23; Ahora queremos obtener la venta total de la semana. Una manera (poco hbil) de obtener ese resultado consistira en escribir lo siguiente: suma = venta[0] + venta[1] + venta[2] + venta[3]+ venta[4] + venta[5] + venta[6];

97

< > Programacin

Lo cual es correcto, pero no aprovecha la regularidad de un arreglo. La alternativa es usar un ciclo for. Una variable digamos, nmeroDa se emplea para almacenar el valor del ndice que representa el da de la semana. Al principio el ndice se hace igual a 0, y su valor se incrementa cada vez que se repite el ciclo: int suma = 0; for ( int nmeroDa = 0; nmeroDa <= 6; nmeroDa++ ) { suma = suma + venta[nmeroDa]; }

En cada iteracin del ciclo se suma al total el siguiente valor del arreglo. En realidad este fragmento de cdigo no es ms corto que la solucin anterior, pero sin duda lo sera si el arreglo tuviera mil elementos que sumar. Otra ventaja es que el cdigo muestra explcitamente que est realizando una operacin sistemtica en un arreglo. Los ndices son el nico lugar de la programacin en el que se permite (algunas veces) el uso de nombres un poco crpticos. Sin embargo, en el fragmento de programa anterior queda claro el uso como ndice de nmeroDa, y el nombre est estrechamente relacionado con el problema a resolver. 4.5.5.2 Longitud de los arreglos Un programa en ejecucin siempre puede conocer la longitud de los arreglos que intervienen en l. Por ejemplo, si tenemos un arreglo declarado de la siguiente forma: int[] tabla = new int[10]; podemos conocer su longitud si utilizamos la propiedad Length, como en el siguiente ejemplo: int tamao; tamao = tabla.Length; En este caso, tamao tiene un valor de 10. Tal vez le parezca intil querer saber la longitud de un arreglo; despus de todo tenemos que proporcionar ese dato al momento de declararlo. Una vez que creamos un arreglo su longitud es fija. Al disear un nuevo programa debemos tener en cuenta el tamao de cualquier arreglo que intervenga en l. En ocasiones la naturaleza del problema hace que esto resulte obvio. Por ejemplo, si los datos se relacionan con los das de la semana, sabemos que el arreglo constar de siete elementos.

98

< > Programacin

4.5.5.3 Inicializacin de arreglos Una forma comn de inicializar un arreglo de manera explcita es al momento de declararlo. Los valores iniciales requeridos se encierran entre llaves y se separan mediante comas. Pero el tamao del arreglo no debe proporcionarse en su posicin usual. La siguiente inicializacin:

int[] edades = {23, 54, 96, 13, 7, 32};


en donde la longitud del arreglo no se da de manera explcita, es equivalente a: int[] edades = new int[6]; edades[0] = 23; edades[1] = 54; edades[2] = 96; edades[3] = 13; edades[4] = 7; edades[5] = 32; He aqu otro ejemplo; en este caso se inicializa un arreglo de cadenas de caracteres: string[] grupo = {John, Paul, George, Ringo}; Otra forma de inicializar un arreglo es mediante un ciclo, como en el siguiente ejemplo: int[] tabla = new int[25]; for ( int ndice = 0; ndice < tabla.Length; ndice++ ) { tabla[ndice] = 0; } Si el programa necesita restablecer peridicamente el arreglo a sus valores iniciales, podemos utilizar el ciclo for anterior.

99

< > Programacin

4.5.6 Colecciones Las colecciones proporcionan un mtodo ms flexible para trabajar con grupos de objetos. A diferencia de los arreglos, el grupo de objetos con el que trabaja puede aumentar y reducirse dinmicamente a medida que cambian las necesidades de la aplicacin. Para algunas colecciones, puede asignar una clave a cualquier objeto que incluya en la coleccin para que pueda recuperar rpidamente el objeto con la clave asignada. Una coleccin es una clase, de modo que antes de poder agregar elementos a una nueva coleccin, debe declararla. 4.5.7 Listas Cuando arrastramos un cuadro de lista al formulario desde el cuadro de herramientas, estamos creando una nueva instancia de la clase ListBox. Esta clase emplea otra clase llamada List para llevar a cabo sus funciones. Los cuadros de lista simplemente despliegan la informacin en el formulario, y manejan los eventos de clic de ratn; por su parte, las listas almacenan la informacin que se muestra en aquellos. As, mientras los cuadros de lista soportan los eventos Click y DoubleClick junto con propiedades tales como SelectedItem, las listas proveen mtodos para agregar y eliminar elementos de stas. Podemos obtener un conteo del nmero de elementos que conforman la lista (y el cuadro de lista) mediante el uso de la propiedad Count, como se muestra a continuacin: int nmeroDeElementos = compras.Items.Count;

4.5.7.1 Adicin de elementos a una lista El programa de ejemplo que se muestra en la siguiente Figura 4.14 permite que el usuario agregue elementos a un cuadro de lista.

Figura 4.14

100

< > Programacin

Este mtodo responde al clic del botn y coloca un elemento a comprar al final del cuadro de lista. private void button1_Click(object sender, EventArgs e) { compras.Items.Add(textBox1.Text); }

En este ejemplo el nombre del cuadro de lista es compras. Como vimos antes, una de las propiedades de los cuadros de lista es Items, y representa su contenido como una instancia de la clase List. A su vez, esta clase proporciona varios mtodos, uno de los cuales es Add, que nos permite aadir elementos a una lista. Su parmetro es el valor que se agregar a la lista.

Tambin podemos colocar elementos en un cuadro de lista en tiempo de diseo. Al seleccionar la propiedad Items de un cuadro de lista aparece una nueva ventana que nos permite insertar elementos en l.

4.5.7.2 La longitud de una lista A continuacin veremos un mtodo que responde al clic de un botn desplegando un cuadro de mensaje con el nmero de elementos que contiene el cuadro de lista.

private void button1_Click(object sender, EventArgs e) { MessageBox.Show(Convert.ToString(compras.Items.Count)); }

Una vez ms podemos ver cmo se utiliza la propiedad Items del cuadro de lista llamado compras. Al mismo tiempo se emplea la propiedad Count de la clase List para obtener el nmero de elementos que lo conforman.

101

< > Programacin

4.5.7.3 ndices Los programas utilizan un ndice para hacer referencia a los elementos que constituyen un cuadro de lista. Un ndice es un entero que indica a qu elemento se hace referencia. El primer elemento tiene el ndice 0, el segundo 1, etctera como se muestra en al Figura 4.15.

Figura 4.15

El programa de ejemplo que se muestra en la figura 4.16 muestra al usuario el nmero de ndice correspondiente a cada elemento.

Figura 4.16 Ahora analicemos un programa que demuestra cmo usar los valores de los ndices. El usuario hace clic en un elemento del cuadro de lista, y el programa muestra el valor del ndice equivalente en un cuadro de texto.

102

< > Programacin

Cuando ocurre el evento del clic invocamos el siguiente mtodo para manejarlo:

private void compras_SelectedIndexChanged(object sender, EventArgs e) { textBox1.Text = Convert.ToString(compras.SelectedIndex); }

SelectedIndex es una propiedad del cuadro de lista que proporciona el valor del ndice del elemento en el que se hizo clic (o 21 si no se ha hecho seleccin alguna). Al ejecutar este programa podemos ver que los valores de los ndices no se almacenan como parte del cuadro de lista, sino que la computadora conoce los valores y stos pueden usarse como y cuando sea necesario. Tambin podemos confirmar que los valores de los ndices empiezan en cero y no en uno.

4.5.8 Pilas Esta estructura es bastante usada para simular mtodos recursivos y resolver algunos tipos de problemas. Esto viene simulando como un montn de objetos que se van apilando (uno encima de otro). La filosofa de una pila (stack) es El ltimo que entra es el primero que sale. Pueden ver un poco ms de que se trata en la siguiente figura 4.17.

ste es el primer elemento en salir Pila vaca


Figura 4.17 Es importante tambin sealar que esta clase implementa la interfaz IEnumerable. Una pila tiene un constructor con tres sobre cargas:

103

< > Programacin

Contructor por defecto que crea una pila vaca

Stack s = new Stack();


Podemos indicar la cantidad inicial de elementos que tendr la pila

Stack s = new Stack(int initialCapacity);


Podemos tambin pasarle una coleccin de elementos (List, Quee, ArrayList). Este constructor copiar todos estos elementos a la pila:

Stack s = new Stack(ICollection col);

4.5.9 Colas Las Colas son una coleccin FIFO. Es decir, procesan informacin en un orden de primero-en-entrar, primero-en-salir (del ingls first-in, first-out). Dicho de otra manera, maneja primero los elementos que recibi ms lejanos en el tiempo. Pensemos un poco en la lgica usada para procesar pedidos en una aplicacin en C#. Las colas FIFO son frecuentemente utilizadas dentro de un sistema de computadoras para albergar tareas que an faltan ser completadas cuando queremos proveer servicios en una base primero-en-llegar, primero-en-atender. Podemos crear colas si nos apoyamos en la clase Queue. En una cola podremos introducir elementos por la cabeza (Enqueue, encolar) y extraerlos por el extremo opuesto, el final de la cola (Dequeue, desencolar). Este tipo de estructuras se nombran a veces tambin por las siglas FIFO (First In First Out, lo primero en entrar es lo primero en salir). Un ejemplo bsico similar al anterior, que creara una cola, introdujera tres palabras y luego las volviera a mostrar sera:

104

< > Programacin

Ejemplo: using System; using System.Collections; public class ejemploCola1 { public static void Main() { string palabra;

Queue Cola = new Queue();


Cola.Enqueue(Hola,); Cola.Enqueue(soy); Cola.Enqueue(yo); for (byte i=0; i<3; i++) { palabra = (string) miCola.Dequeue(); Console.WriteLine( palabra ); } } } Que mostrara: Hola, soy yo

la implementacin de una cola que incluye C# es ms avanzada que eso, con mtodos: Peek, que mira el valor que hay en la cabeza de la cola, pero sin extraerlo. Clear, que borra todo el contenido de la cola. Contains, que indica si un cierto elemento est en la cola. GetType, para saber de qu tipo son los elementos almacenados en la cola.

105

< > Programacin

ToString, que devuelve el elemento actual convertido a un string. ToArray, que devuelve toda la pila convertida a un array. GetEnumerator, que permite usar enumeradores para recorrer la cola, una funcionalidad que veremos con algn detalle ms adelante. Al igual que en la pila, tambin tenemos una propiedad Count, que nos indica cuntos elementos contiene.

106

Reconocer el concepto de clase y el modo de acceso a estas en la programacin con C#. Realizar interfaces graficas usando los diferentes controles que proporciona C# . Conocer y manejar excepciones en C#. Nombrar los requerimientos para el manejo de archivos en C#.

< > Programacin


5 Programacin orientada a objetos
En esencia, la programacin orientada a objetos no es ms que un modelo de programacin donde un programa es dividido en mdulos de software independientes unos de otros pero con capacidad de interactuar entre s para cumplir con un objetivo. Dichos mdulos estn conformados bsicamente por datos y funciones que se encargan de manipularlos internamente para mostrar al exterior nicamente los resultados que necesita el programa que los va a utilizar.

5.1 Clases y Objetos


5.1.9.1 Clases La clase es el elemento fundamental de la programacin orientada a objetos con el lenguaje C#. Aunque, dentro de este modelo de programacin, existen muchas definiciones vlidas para el concepto de clase, en la prctica una clase no es ms que una plantilla de software que sirve para construir cualquier cantidad de objetos. Por ejemplo, en .NET existe una clase llamada Form que sirve como molde para construir cualquier ventana que necesite una aplicacin tipo Windows. Las ventanas que nosotros observamos en la pantalla de nuestro computador, son los objetos generados con esa plantilla. Pueden haber muchos objetos generados con esa plantilla, pero lo que los puede hacer diferentes a unos de otros, son los valores que se asignan a sus atributos como: alto, ancho, color, ttulo, etc. Desde la perspectiva del lenguaje de programacin, una clase es un tipo, que al igual que los tipos estndar, sirve para declarar variables cuya estructura es una fiel copia de ella. Estas variables reciben el nombre de objetos y son los elementos que manipula el programador para desarrollar su programa. 5.1.9.2 Objetos Cuando se disea y programa una aplicacin de software con el modelo de programacin orientada a objetos, lo que se hace en la prctica es construir un conjunto de plantillas de objetos, o lo que se conoce como clases, las cuales permiten definir variables en memoria que se conocen con el nombre de objetos o instancias de clase. Desde esta perspectiva, el trmino clase gana mayor significado, ya que se puede definir como una plantilla que permite generar una clase de objetos. Para crear un objeto de una determinada clase, se procede bsicamente en dos pasos: primero se declara una variable con el tipo que representa la clase y luego se le asigna memoria con el operador new

108

< > Programacin

5.1.1 Definicin de clases En C# una clase se define mediante la palabra clave class y una sintaxis bsica que encontramos para definirla, es la siguiente:

class NombreClase
{ // Miembros } Por ejemplo, supongamos que deseamos un componente de software para procesos matemticos que nos permitan manipular nmeros complejos. La clase que nos permitir procesar estos nmeros la llamaremos Complejo, y se puede definir como,

class Complejo
{ //Miembros de la clase Complejo } 5.1.1.1 Definicin de objeto Por ejemplo, tomando la clase Complejo definida anteriormente, la siguiente lnea crea un objeto a partir de esta plantilla:

Complejo z;
Cuando el programa ejecuta esta lnea, slo posee una direccin de memoria donde se inicia la estructura de la variable z. Para asignarle la memoria total conforme al tamao de la estructura que describe la clase, es necesario aplicar el operador new, as: z = new Complejo(); A partir de aqu, el sistema conoce con exactitud la ubicacin y tamao ocupado en memoria por la variable z y estar en condiciones de colocar en el sitio que corresponda cada uno de los datos y dems elementos que conforman el objeto.

109

< > Programacin

En C#, tanto la declaracin como la asignacin de memoria para un objeto puede hacerse en una sola lnea de cdigo, como se muestra enseguida para nuestro ejemplo:

Complejo z = new Complejo();

5.1.2 Accesibilidad Sin embargo, las clases deben cumplir unos niveles de seguridad que exigen el manejo del control de accesibilidad a ellas, sobre todo por parte de agentes externos al proyecto de software donde se hayan definido. Es por esto que la definicin de cualquier clase debe ir antecedida de una palabra clave que determina la accesibilidad que admite dicha clase. La sintaxis C# para definir una clase es la siguiente: [public | private | protected | internal] class NombreClase { // Miembros } La seccin entre corchetes, que indica las palabras clave de accesibilidad, public, private, protected, internal, que pueden utilizarse en la definicin de una clase, es opcional e indica cual es el nivel de acceso que se va a permitir sobre la clase. Si no se especifica ningn nivel de accesibilidad, el compilador la define por defecto como internal, lo cual significa que solo se permite el acceso a las clases que hacen parte del mismo ensamblado. Mediante las palabras de accesibilidad se pueden especificar los siguientes cinco niveles de proteccin para una clase: Acceso public protected internal internal protected private Seguridad No existe ninguna restriccin de acceso Slo pueden tener acceso la clase contenedora o los tipos derivados de sta clase nicamente se permite el acceso al ensamblado actual El acceso est limitado al ensamblado actual o a los tipos derivados de la clase contenedora Slo se permite el acceso al tipo contenedor

Para nombrar una clase se sugiere utilizar una cadena de caracteres que inicia con una letra mayscula

110

< > Programacin

y cuyo significado es familiar para el programador. Aqu es muy importante tener en cuenta cual es la funcionalidad bsica de la clase, para darle un nombre que resulte significativo y fcil de recordar posteriormente. Podemos tener clases como: Complejo, Estudiante, DocumentoImpresion, RedNeuronal, ConexionBaseDatos.

5.2 Interfaces de Usuario


La interfaz de usuario es el medio con que el usuario puede comunicarse con una mquina, un equipo o una computadora, y comprende todos los puntos de contacto entre el usuario y el equipo. Normalmente suelen ser fciles de entender y fciles de accionar. La interfaz virtual o interfaz grfica (GUI) que permite, mediante iconos (cursor + objetos grficos metafricos), interactuar con los elementos grficos convirtiendo al ser humano en usuario de la aplicacin.

Una interfaz debe cumplir las condiciones: Naturalidad. El nuevo sistema automatizado debe tender a ser lo ms similar al antiguo. Facilidad de aprendizaje y uso, dos aspectos que no siempre van unidos. Consistencia. La interfaz debe mantener uniformidad en cuanto a estilo, vocabulario, etc.

5.2.1 Barra de herramientas y controles de usuario para formularios Windows 5.2.1.1 El formulario El elemento principal y ms representativo de una aplicacin con interfaz grfica es aquel que se conoce con el nombre de ventana. Desde la visin del programador de C#, el objeto que da origen a este elemento es el formulario. La clase Form, que pertenece al Namespace System.Windows.Forms, es quien se encarga de definir todos los formularios que sean necesarios para la creacin de las ventanas que puede necesitar una aplicacin con interfaz grfica de usuario. Generalmente, y en el contexto del entorno de desarrollo de .NET, a este tipo de aplicaciones se le denomina programas Windows Forms. Form es una clase que encapsula todas las propiedades, mtodos y eventos que se necesitan para dar funcionalidad a una ventana. Aunque el programador tambin puede heredar de ella para crear clases que definan formularios de ventanas totalmente personalizadas a sus intereses.

111

< > Programacin

En el siguiente ejemplo vamos a mostrar una ventana totalmente autnoma, cuyo comportamiento es idntico al de cualquier otra ventana de otros programas de Windows. La diferencia con el anterior ejemplo, radica en la inclusin de un ciclo de mensajes a travs de la clase Application. using System.Windows.Forms; public class ProgramaGrafico { static void Main() { Form ventana = new Form(); ventana.Text = Hola ventana...!; ventana.Visible = true; Application.Run(ventana); } }

5.2.2 Controles de usuario y sus eventos asociados En Windows se le llama control a cualquier elemento grfico colocado sobre una ventana y que permite realizar alguna tarea de inters para la aplicacin. Ejemplos de controles son las barras de desplazamiento, los mens, botones de comando, botones de opcin, casillas de verificacin, campos de entrada de texto y cuadros de lista, entre otros. Para .NET cualquier control es un objeto que puede crearse a partir de una clase, y su manejo es igual al de cualquier otro objeto. Con la ventaja que ya existe una amplia gama de clases que han sido programadas, y hacen parte de .NET Framework, para tal fin. Se hace mencin de tres clases que permiten crear los controles ms bsicos de una aplicacin: Button, para crear botones de comando; TextBox, para crear campos de entrada de texto, y Label para crear las llamadas etiquetas, que permiten mostrar cadenas de texto sobre la ventana.

112

< > Programacin

Las tres clases mencionadas exponen un conjunto de propiedades que son comunes a todos sus objetos. Entre ellas estn las siguientes: Propiedad Text Left Descripcin Permite escribir o leer una cadena de texto hacia o desde el control Establece o recupera la coordenada horizontal de la esquina superior izquierda del control (ver Figura 5.1) Establece o recupera la coordenada vertical de la esquina superior izquierda del control (ver Figura 5.1) Establece o recupera el ancho de un control Establece o recupera el ancho de un control

Top

Width Height

Las propiedades de posicin y dimensin de un control aceptan valores enteros que por defecto representan cantidades de pxeles.

Figura 5.1 Estas propiedades igual existen para un formulario, donde Left y Top establecen o devuelven las coordenadas de la esquina superior izquierda con respecto a la pantalla. El formulario expone la propiedad Controls, que es un objeto del tipo CollectionControls, el cual expone el mtodo Add que permite agregar un control a la ventana. Su sintaxis es la siguiente: Formulario.Controls.Add(Identificador); El parmetro del mtodo Add, es el identificador de la variable que representa al objeto control.

113

< > Programacin

A continuacin se muestra un programa formado por una ventana que contiene un botn etiquetado con Aceptar. El programa hace una implementacin del evento Click del botn.

using System; using System.Windows.Forms; public class ProgramaGrafico { static void Main() { Form formVentana = new Form(); Button buttonAceptar = new Button(); // Botn Aceptar buttonAceptar.Click += new EventHandler(ButtonAceptarClick); buttonAceptar.Text = Aceptar; buttonAceptar.Left = 100; buttonAceptar.Top = 150; // Configurar la ventana formVentana.Text = Ventana; formVentana.Visible = true; // Agregar un control a la ventana formVentana.Controls.Add(buttonAceptar); // Entrar al bucle de mensajes Application.Run(formVentana); } // Mtodo que controla el evento Click del botn Aceptar static void ButtonAceptarClick(object sender, EventArgs e)

114

< > Programacin

{ MessageBox.Show(Hola botn...!, Click); } }

El programa de este ejemplo muestra cuatro botones de comando que generan el evento Click y este es controlado por un nico evento. Esta es una buena forma de programar un conjunto de controles que realizan tareas muy similares.

Se ha implementado el controlador del evento Click de los cuatro botones mediante el mtodo static void ButtonOperar(object emisor, EventArgs e) { Button buttonEmisor = (Button)emisor; MessageBox.Show(buttonEmisor.Text); }

Las clases que definen objetos visuales implementan una gran cantidad de eventos y el trabajo del programador de .NET es desarrollar los mtodos que los controlen. El siguiente programa muestra dos eventos que han sido controlados para mostrar un mensaje en pantalla. El evento Load que se genera cada que se est iniciando el proceso de carga de una ventana y el evento Click que se genera al hacer clic con el botn principal del ratn sobre la ventana.

using System; using System.Windows.Forms; public class VentanaEventos

115

< > Programacin

{ static void Main() { Form formVentana = new Form(); formVentana.Load += new EventHandler(FormVentanaLoad); formVentana.Click += new EventHandler(FormVentanaClick); formVentana.Text = Ventana; Application.Run(formVentana); } static void FormVentanaLoad(object emisor, EventArgs e) { MessageBox.Show(Cargando..., Load); } static void FormVentanaClick(object emisor, EventArgs e) { MessageBox.Show(Clic..., Click); } }

5.3 Excepciones
En C#, el trmino excepcin se utiliza para transmitir la idea de que algo ha salido mal; en trminos comunes, significa que ha ocurrido un error o se ha presentado una circunstancia excepcional. En el lenguaje C#, los errores del programa se difunden en tiempo de ejecucin a travs del programa mediante un mecanismo denominado excepciones. Las excepciones se producen cuando el cdigo encuentra un error y se detectan mediante el cdigo que puede corregir el error. Las excepciones se pueden producir mediante el Common Language Runtime (CLR) de .NET Framework o mediante cdigo de un programa. Una vez que se produce una excepcin, sta se difunde a la pila de llamadas hasta que se encuentra una instruccin catch para la excepcin. Las excepciones no detectadas se identifican a travs de un controlador de excepciones genrico proporcionado por el sistema.

116

< > Programacin

5.3.1 Excepciones del sistema 5.3.1.1 La clase System.Exception. La clase System.Exception es el tipo base de todas las excepciones. Entre sus propiedades ms importantes estn: - Message: es una propiedad de slo lectura que contiene una descripcin de la causa de la excepcin (en forma de cadena legible por el ser humano). - InnerException: es una propiedad de slo lectura que contiene la excepcin interna de la excepcin. Si su valor es distinto de null, indica que la excepcin actual ha sido lanzada en respuesta a otra excepcin (que es a la que se llama la excepcin interna). El valor de estas propiedades puede ser especificado en el constructor de la clase System.Exception.

5.3.1.2 Activacin de Excepciones. Las excepciones pueden ser activadas de dos modos: Mediante la sentencia throw: Activa la excepcin de modo inmediato e incondicional. En ningn caso vuelve el control a la sentencia siguiente al throw. Durante la ejecucin de sentencias y expresiones C# se pueden dar situaciones en las que la operacin no pueda completarse de modo normal y se active una excepcin. Por ejemplo, una divisin entera por cero lanza la excepcin System.DivideByZeroException. 5.3.1.3 Manejo de Excepciones. Las excepciones se manejan mediante una sentencia try-catch-finally. Por ejemplo:

try
{ string s = null; x.MiFun(s); }

catch (ArgumentNullException e)

117

< > Programacin

{ Console.WriteLine({0} Primera excepcin capturada, e); } catch (Exception e) { Console.WriteLine({0} Segunda excepcin capturada, e); } Cuando se lanza una excepcin desde el cdigo que est entre las llaves de la clusula try, el sistema busca la primera clusula catch que pueda manejar el tipo de excepcin que se ha lanzado (el tipo de excepcin ha de coincidir con el del parmetro que espera la clusula catch o bien ser de un tipo derivado al que espera la clusula catch).

Si no se encuentra la clusula catch adecuada se sigue buscando la excepcin en el punto del cdigo desde el que se ha llamado al mtodo que contiene la clusula try donde se ha lanzado la excepcin. Esta operacin se repite hasta encontrar una clusula catch que capture la excepcin.

Es importante tener en cuenta que si se desea que una clusula catch capture cualquier excepcin ha de definirse sin parmetros. Una vez se ha encontrado la clusula catch que maneja la excepcin, se transfiere el control a la primera sentencia de tal clusula. Antes de ejecutar la primera sentencia de la clusula catch, se ejecutan todas las clusulas finally de las sentencias try anidadas a la que captura la excepcin.

Si no se encuentra una clusula catch puede ocurrir una de las dos opciones siguientes:

Si la bsqueda llega a un constructor static o a un inicializador de campos static, se lanza una excepcin System.TypeInicializationException en el punto en el que se invoc al constructor. El campo InnerException de la excepcin TypeInicializationException contiene la excepcin originalmente lanzada.

Si la bsqueda llega al cdigo que inicialmente comenz el thread o el proceso, la ejecucin del thread o el proceso finalizan.

118

< > Programacin


Ejemplo: using System; class MiClase { public static void Main() { MiClase x = new MiClase(); try { string s = null; x.MiFun(s); } // Captura de la excepcin (ms especfica): catch (ArgumentNullException e) { Console.WriteLine({0} Primera excepcin capturada , e); } // Captura de la excepcin (menos especfica): catch (Exception e) { Console.WriteLine({0} Segunda excepcin capturada , e); } } public void MiFun(string s) { if (s == null) throw new ArgumentNullException(); }}

119

< > Programacin

5.3.2 Excepciones personalizadas .NET Framework proporciona una jerarqua de clases de excepcin que, en ltima instancia, derivan de la clase base Exception. Cada una de estas clases define una excepcin especfica, por lo que en muchos casos slo hay que detectar la excepcin. Tambin se pueden crear clases de excepcin personalizadas derivndolas de la clase Exception. Cuando se creen excepciones personalizadas, es recomendable finalizar el nombre de la clase de la excepcin definida por el usuario con la palabra Excepcin. Tambin se recomienda implementar los tres constructores comunes recomendados, como se muestra en el ejemplo siguiente. En el ejemplo siguiente, se deriva una nueva clase de excepcin, EmployeeListNotFoundException, de Exception. Se definen tres constructores en la clase, cada uno con parmetros diferentes. using System; public class EmployeeListNotFoundException: Exception { public EmployeeListNotFoundException() { } public EmployeeListNotFoundException(string message) : base(message) { } public EmployeeListNotFoundException(string message, Exception inner) : base(message, inner) { } }

120

< > Programacin

5.4 Archivos
Los flujos nos permiten acceder a un archivo como una secuencia de elementos. El trmino flujo se utiliza en el sentido de una sucesin de datos que sale o entra del programa. A continuacin explicaremos el vocabulario asociado al uso de archivos, que es similar en casi todos los lenguajes de programacin. Si deseamos procesar los datos que se encuentran en un archivo existente, debemos: 1. Abrir el archivo. 2. Leer (recibir como entrada) los datos, elemento por elemento, y colocarlos en variables. 3. Cerrar el archivo cuando terminemos de trabajar con l.

Para transferir datos de variables a un archivo, debemos: 1. Abrir el archivo. 2. Enviar como salida (escribir) nuestros elementos en la secuencia requerida. 3. Cerrar el archivo cuando terminemos de trabajar con l. Al leer datos de un archivo, lo nico que podemos hacer es trabajar elemento por elemento. Si, por ejemplo, slo necesitamos examinar el ltimo elemento de un archivo, tendremos que codificar un ciclo para leer un elemento a la vez hasta llegar al requerido. Para la realizacin de muchas tareas es conveniente visualizar los archivos de texto como una serie de lneas, cada una compuesta de varios caracteres. Cada lnea se da por terminada mediante un marcador de fin de lnea que puede ser en el carcter de nueva lnea, el carcter de retorno, o ambos. Aun cuando el usuario se concreta a oprimir la tecla Enter para finalizar una lnea, el software de Windows colocar los caracteres de nueva lnea y retorno para indicar el fin de lnea. C# se encarga de ocultar la mayor parte de este complicado proceso. Adems de poder manipular los archivos que contienen lneas de texto, C# tambin puede manejar aquellos que constan de datos binarios, como imgenes. Sin embargo, por lo general este tipo de datos se organiza en un formato ms complicado dentro de los archivos.

121

< > Programacin

5.4.1 Streams 5.4.1.1 Las clases StreamReader y StreamWriter Para leer y escribir lneas de texto utilizaremos: El mtodo ReadLine de StreamReader:lee toda una lnea de texto y la coloca en una cadena, excluyendo el marcador de fin de lnea La clase StreamWriter. Consta de dos mtodos principales: Write y WriteLine. Ambos escriben una cadena en un archivo, pero WriteLine agrega el marcador de fin de lnea despus de la cadena. Tambin podemos usar WriteLine sin argumentos para escribir slo un marcador de fin de lnea en el archivo. Como alternativa a WriteLine podemos utilizar Write envindole los caracteres \r\n entre comillas como argumento. Los mtodos OpenText y CreateText de la clase File. stos son mtodos estticos que nos proporcionan una nueva instancia de un flujo de texto. Las clases de archivo forman parte del namespace System.IO. Como esta clase no se importa de manera automtica, para hacerlo debemos usar la siguiente lnea: using System.IO; en la parte superior de todos nuestros programas en los que se procesen archivos.

5.4.1.2 Operaciones de salida con archivos El programa Archivo de salida abre un archivo y escribe tres lneas en l. La interfaz de usuario slo consiste en un botn, por lo cual no la mostraremos aqu. El cdigo es el siguiente: private void button1_Click(object sender, EventArgs e) { // escribe varias lneas de texto en el archivo StreamWriter flujoSalida = File.CreateText(@c:\miarchivo.txt); flujoSalida.WriteLine(Este archivo); flujoSalida.WriteLine(contiene tres); flujoSalida.WriteLine(lneas de texto.); flujoSalida.Close(); }

122

< > Programacin

Ahora examinemos nuestro cdigo. Primero creamos y abrimos el archivo: StreamWriter flujoSalida = File.CreateText(@c:\miarchivo.txt); En este caso utilizamos el mtodo esttico CreateText de la clase File, sta lnea crea un nuevo objeto StreamWriter y abre el archivo. Cabe mencionar que en esta parte del cdigo hay dos elementos que hacen referencia al archivo: Una cadena especificando el nombre del archivo que utiliza el sistema operativo cuando muestra las carpetas: @c:\miarchivo.txt. Ten en cuenta la necesidad de utilizar el carcter @, cuya funcin es hacer que el carcter \ tenga su interpretacin normal en vez del uso que se le da con los caracteres de escape. Una variable que elegimos nombrar flujoSalida. Es una instancia de la clase StreamWriter que nos proporciona el mtodo WriteLine. Al utilizar CreateText asociamos flujoSalida con el archivo c:\ miarchivo.txt. Para escribir una lnea de texto en el archivo utilizamos WriteLine, como en el siguiente ejemplo: flujoSalida.WriteLine(Este archivo); Si el usuario escribe los datos que deseamos colocar en el archivo (digamos, mediante un cuadro de texto), podramos utilizar: flujoSalida.WriteLine(textBox1.Text) Si el archivo ya existe su contenido original ser eliminado y sustituido por las tres lneas. Por ltimo, cerramos el archivo: flujoSalida.Close(); Esto asegura que los datos en trnsito se escriban en el archivo, y tambin nos permite volver a abrirlo para lectura o escritura. El proceso de escritura tambin hubiera podido llevarse a cabo mediante el uso de Write con los caracteres de fin de lnea, como en el siguiente ejemplo: flujoSalida.Write(Dos lneas\r\nde texto.\r\n); Algunas veces esto es conveniente cuando manipulamos una cadena que contiene varias lneas. En resumen, el proceso para escribir datos en un archivo consisti en: abrir el archivo c:\miarchivo.txt enviar (escribir) algunas cadenas al archivo cerrar el archivo

123

www.grupoeduit.com 01 800 808 62 40

Você também pode gostar