Está en la 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

1.1.1 Sintaxis de la lgica de predicados

1.2 Algoritmos
1.2.1 Prueba de escritorio

1.3

Clasificacin de Algoritmos

10
11

13

1.3.1 Transcripcin

13

1.3.2 Compilacin y errores

13

1.4 Variables
1.4.1 Asignacin de valores

1.5 Operadores
1.5.1 Operadores aritmticos y su prioridad

1.6

Estructuras Bsicas

14
14

15
15

16

1.6.1 Primera estructura: Secuencia de acciones

16

1.6.2 Segunda estructura: Decisin de accin

17

1.6.3 Tercera Estructura: Ciclos de acciones

19

1.7

Tcnicas para representar algoritmos

1.7.1 Diagramas de flujo

20
20

< > Programacin

2 Pseudocdigo
2.1 Introduccin

28

2.2

28

Diagramas de Nassi Scheiderman (N-S)

2.2.1 Diagrama N-S de estructuras de decisin

28

2.3 Normas

30

2.4 Ciclos

35

2.4.1 Ciclo Mientras (While)

35

2.4.2 Ciclo Para (For)

36

2.4.3 Ciclo Hacer-Mientras (Repeat While)

38

2.4.4 Ciclo Hacer-Hasta (Repeat Until)

40

2.4.5 Ciclos Anidados

41

Almacenamiento persistente de datos


3.1

Diseo conceptual

43
43

3.1.1 Entidades

44

3.1.2 Relaciones

45

3.1.3 Modelo Entidad-Relacin

46

3.2

28

Diseo lgico

50

< > Programacin

3.2.1 Tipos de Datos 

3.3

Lenguaje de consulta

50

3.3.1 Sintaxis bsica del lenguaje de consulta estructurado (SQL)

50

3.3.2 Sentencias de seleccin, insercin, actualizacin y borrado de datos

51

4 .NET
4.1

.NET Framework 

56
56

4.1.1 Entorno de ejecucin 

56

4.1.2 Biblioteca de Clase Base (BCL)

57

4.1.3 Sistema de tipo comn (CTS) 

58

4.1.4 Especificacin del lenguaje comn (CLS)

58

4.2

Entorno de Programacin 

58

4.2.1 Entorno de Desarrollo (IDE) 

59

4.2.2 Descarga e Instalacin 

59

4.2.3 Interfaz de usuario

59

4.3

50

Introduccin a la programacin en C#

64

4.3.1 Estructura de un programa 

64

4.3.2 Palabras reservadas

65

4.3.3 Literales 

67

< > Programacin

4.3.4 Variables 

67

4.3.5 Tipos de Datos

68

4.3.6 Operadores 

70

4.3.7 Constantes y enumeraciones

75

4.4

78

4.4.1 Condicionales 

78

4.4.2 Ciclos 

81

4.4.3 Uso de Break y Contine

86

4.5

Sentencias de Control 

Mtodos, Arreglos y Colecciones 

88

4.5.1 Mtodos 

88

4.5.2 Parmetros 

93

4.5.3 Namespace 

94

4.5.4 Arreglos

95

4.5.5 Declaracin 

96

4.5.6 Colecciones 

100

4.5.7 Listas 

100

4.5.8 Pilas 

103

4.5.9 Colas

104

< > Programacin

Programacin orientada a objetos


5.1

Clases y Objetos 

108
108

5.1.1 Definicin de clases 

109

5.1.2 Accesibilidad

110

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

5.3

Excepciones 

116

5.3.1 Excepciones del sistema

117

5.3.2 Excepciones personalizadas

120

5.4 Archivos
5.4.1 Streams

112

121
122

Comprender cules son las secuencias lgicas que se utilizan en programacin


as como su finalidad.
Identificar el proceso para la construccin 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

Entrada

Menor

Suma

10
10
0
10
7
7
17
9
26
0

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

Pantalla

Valor Menor
7
Suma:
26

< > 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
*
/
%
+
-

Significado
multiplicacin
divisin
mdulo
suma
resta


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.

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:

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

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.

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

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.

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

Condicin 2

Trae un refresco

Trae un pan de $10

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>,...);

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

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

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

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 aplicaciones simples o complejas.
Conocer el entorno de C# y su instalacin.
Describir los elementos que conforman 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)

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

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.

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

//Nombre del programa

{
class Program

//Nombre de la clase

{
}

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

Palabras clave de C#

Instrucciones de seleccin

if,else,switch,case

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

do,for,foreach,in,while

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

break,continue,default,goto,return,yield

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

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

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.

66

checked,unchecked

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

Intervalo

Tamao

int

De -2.147.483.648
a 2.147.483.647

Entero de 32
bits con signo

Tipo de
.NET Framework

Valor predeterminado

System.Int32

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

Tipo de .NET Framework

15-16 dgitos

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.
Intervalo
aproximado

Tipo
float

-3.41038to
+3.41038

Precisin

Tipo de .NET Framework

7 dgitos

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

Intervalo

Size

char

De U+0000 a
U+FFFF

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

Intervalo

long

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

x.y, f(x), a[x], x++, x--,new,typeof,checked,unchecked

Unario

+,-,!,~,++x,--x, (T)x

Aritmticos: multiplicativos

*,/,%

Aritmticos: aditivos

+,-

Desplazamiento

<<,>>

Comprobacin de tipos y relacionales

<,>,<=,>=,is,as

Igualdad

==,!=

Lgicos, en orden de prioridad

&,^,|

Condicionales, en orden de prioridad

&&,||,?:

Asignacin

=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=

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

Accin

*
/
%
+
-

multiplicacin
divisin
mdulo
suma
resta

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;

// se convierte en 6

i = n * 4;

// se convierte en 12

i = 7 + 2 * 4;

// se convierte en 15

n = n * (n + 2) * 4;

// se convierte en 60

d = 3.5 / 2;

// se convierte en 1.75

n = 7 / 4;

// 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;

// se convierte en 2

i = 13 / 5;

// se convierte en 2

i = 33 / 44;

// 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;

// se convierte en 0

i = 13 % 4;

// se convierte en 1

i = 15 % 4;

// 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:

areaDibujo

miLapiz

10

20

lapizAUsar

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

Top

Width
Height

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

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

También podría gustarte