Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programación
Programación
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-
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.
1 Algoritmos
1.1
Lgica computacional
1.2 Algoritmos
1.2.1 Prueba de escritorio
1.3
Clasificacin de Algoritmos
10
11
13
1.3.1 Transcripcin
13
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
16
17
19
1.7
20
20
2 Pseudocdigo
2.1 Introduccin
28
2.2
28
28
2.3 Normas
30
2.4 Ciclos
35
35
36
38
40
41
Diseo conceptual
43
43
3.1.1 Entidades
44
3.1.2 Relaciones
45
46
3.2
28
Diseo lgico
50
3.3
Lenguaje de consulta
50
50
51
4 .NET
4.1
.NET Framework
56
56
56
57
58
58
4.2
Entorno de Programacin
58
59
59
59
4.3
50
64
64
65
4.3.3 Literales
67
4.3.4 Variables
67
68
4.3.6 Operadores
70
75
4.4
78
4.4.1 Condicionales
78
4.4.2 Ciclos
81
86
4.5
Sentencias de Control
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
Clases y Objetos
108
108
109
5.1.2 Accesibilidad
110
5.2
Interfaces de Usuario
111
5.3
Excepciones
116
117
120
5.4 Archivos
5.4.1 Streams
112
121
122
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.
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
es verdadero
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.
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.
10
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.
5. Fin.
leer entrada
menor = entrada
suma = 0
mientras (entrada != 0)haga
si (entrada < menor) entonces
11
Entrada
Menor
Suma
10
10
0
10
7
7
17
9
26
0
12
Pantalla
Valor Menor
7
Suma:
26
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.
13
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.
14
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.
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
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
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
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
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
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
Inicio
Llegar puntual a la hora de inicio de la jornada laboral
Ubicarnos en nuestro escritorio
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
Fin_Mientras
Fin_Mientras
Fin
20
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
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:
Inicio
Llegar puntual a la hora de inicio de la jornada laboral
Ubicarnos en nuestro escritorio
Si estamos sentados
Levantarnos del lugar en donde estemos sentados
Orientarnos hacia la ventana
De lo contrario
Orientarnos hacia la ventana
22
Si esta cerrada
Abrirla
Asomarnos por la ventana
Regresar a nuestro escritorio
Fin_Mientras
Fin_Mientras
Fin
23
24
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
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.
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.
Figura 2.1
28
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
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
30
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
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:
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
.
.
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:
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
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
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
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:
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
Ejemplo
Escribir los nmeros impares comprendidos entre 1 y 20.
Programa Ejem_Ciclo_Mientras
Variables
Entero :Num
Inicio
Num = 1
Fin_Mientras
Fin
FIN_PARA
36
Dnde:
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:
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
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
P=I*J
Imprimir I, *, J, =, P
FIN_PARA
FIN_PARA
FIN_INICIO
REPETIR
Accin 1
38
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
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
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
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
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
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.
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.
45
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
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
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
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
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.
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
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;
51
Ejemplo:
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.
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.
modelo
color
numero_kilometros)
52
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
UPDATE tCoches
SET marca = 2
WHERE marca = RENAULT;
UPDATE tCoches
SET marca = 3
WHERE marca = SEAT;
[ 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.
54
4 .NET
56
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
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.
58
Figura 4.2
59
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
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
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
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
{
class Program
//Nombre de la clase
{
}
struct TuEstructura
{
}
interface TuInterfaz
{
}
enum EjemEnum
{
64
namespace TuNamespaceAnidado
{
struct Tu estructura
{
}
}
class TuClaseprincipal
{
static void Main(string[] args)
{
//Tu programa inicia aqu...
}
}
}
65
Categora
Palabras clave de C#
Instrucciones de seleccin
if,else,switch,case
do,for,foreach,in,while
break,continue,default,goto,return,yield
throw,try-catch,try-finally,try-catch-finally
66
checked,unchecked
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.
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.
67
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.
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
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
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
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
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
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
Las variables de tipo long se pueden declarar e inicializar como en el siguiente ejemplo:
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
Principal
Unario
+,-,!,~,++x,--x, (T)x
Aritmticos: multiplicativos
*,/,%
Aritmticos: aditivos
+,-
Desplazamiento
<<,>>
<,>,<=,>=,is,as
Igualdad
==,!=
&,^,|
&&,||,?:
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
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
double d;
d = 7.61 / 2.1; // se convierte en 3.7
d = 10.6 / 2;
// se convierte en 5.3
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
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
// se convierte en 2
74
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.
75
{
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:
76
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.
77
Si (apruebas)
{
te compro un Xbox;
te compro un videojuego;
if (num==10)
{
Console.WriteLine(El nmero es igual a 10);
78
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.
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 =).
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.
Si (apruebas)
{
te compro un Xbox;
te compro un videojuego;
}
de lo contrario
79
{
te castigo en tu cuarto;
te quedas sin cenar;
if (num==10)
{
Console.WriteLine(El nmero es igual a 10);
}
else
{
Console.WriteLine(El nmero no es igual a 10);
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
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;
resuelven una ecuacin matemtica de manera iterativa, obteniendo cada vez mejores aproximaciones;
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
Por ejemplo:
Realicemos un ciclo for que imprima los nmeros del 1 al 5:
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:
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
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;
83
conteo = 1;
do
{
Instrucciones
84
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);
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
if (i == 5)
{
break;
}
Console.WriteLine(i);
}
}
}
Resultados
1
2
3
4
86
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()
{
if (i < 9)
{
continue;
}
Console.WriteLine(i);
}
}
}
87
using System;
class Boligrafo
{
protected int color=0;
protected byte tinta=100;
88
89
{
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.
90
Figura 4.12
91
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
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
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.
94
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
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:
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
97
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
99
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;
Figura 4.14
100
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.
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
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
Cuando ocurre el evento del clic invocamos el siguiente mtodo para manejarlo:
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
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
Ejemplo:
using System;
using System.Collections;
public class ejemploCola1 {
public static void Main() {
string palabra;
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
106
108
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
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:
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
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.
111
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);
}
}
112
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
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
{
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
{
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
try
{
string s = null;
x.MiFun(s);
}
catch (ArgumentNullException e)
117
{
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
119
120
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.
121
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.
122
123
www.grupoeduit.com
01 800 808 62 40