Você está na página 1de 71

Manual de Asignatura

Programacin

Contenido
INTRODUCCIN.................................................................................................................... 2
FICHA TCNICA..................................................................................................................... 3
DESARROLLO DE CONTENIDOS.........................................................................................6
DESARROLLO DE PRCTICAS..........................................................................................69
INSTRUMENTOS DE EVALUACIN....................................................................................70
BIBLIOGRAFA..................................................................................................................... 72

INTRODUCCIN
Es importante aclarar desde un principio la diferencia que existe entre
programacin orientada a objetos y un lenguaje orientado a objetos.
La programacin orientada a objetos es una

filosofa,

un modelo de

programacin, con su teora y su metodologa, que conviene conocer y estudiar


antes de nada. Un lenguaje orientado a objetos es un lenguaje de programacin que
permite el diseo de aplicaciones orientadas a objetos.
La programacin orientada a objetos, ha tomado las mejores ideas de la
programacin estructurada y los ha combinado con varios conceptos nuevos y
potentes que incitan a contemplar las tareas de programacin desde un nuevo punto
de vista. La programacin orientada a objetos, permite descomponer ms fcilmente
un problema en subgrupos de partes relacionadas del problema. Entonces,
utilizando el lenguaje se pueden traducir estos subgrupos a unidades autocontenidas
llamadas objetos.
El trmino Programacin Orientada a Objetos (POO), hoy en da ampliamente
utilizado, es difcil de definir, ya que no es un concepto nuevo, sino que ha sido el
desarrollo de tcnicas de programacin desde principios de la dcada de los
setenta, aunque sea en la dcada de los noventa cuando ha aumentado su difusin,
uso y popularidad. No obstante, se puede definir POO como una tcnica o estilo de
programacin que utiliza objetos como bloque esencial de construccin.
Un objeto es una unidad que contiene datos y las funciones que operan sobre
esos datos. A los elementos de un objeto se les conoce como miembros; las
funciones que operan sobre los objetos se denominan mtodos y los datos se
denominan miembros datos.

FICHA TCNICA
Ficha Tcnica - Programacin
Nombra de la asignatura
Programacin
Justificacin
Objetivo
El alumno generar una aplicacin
informtica utilizando el paradigma
orientado a objetos en un lenguaje de
programacin para la solucin de un
problema especfico; aplicando buenas
Conocimientos previos

prcticas de programacin.
Metodologa de la Programacin

Capacidades Asociadas

Horas

Unidades Temticas

Prcticas

Tericas

Totales

Fundamentos de programacin

10

II

orientada a objetos
Ambiente de desarrollo de la POO

III

Programacin orientada a objetos

36

44

IV

Arreglos

12

18

Manejo de excepciones

10

12

68

22

90

Totales

Bibliografa
Autor
Arnow, David

Ao
(2004
)

Baltasar Garca,

(2008

J.
Cairo Battistuti

(2004

oriented approach
Metodologa de la Programacin

Metodologa De La Programacin

)
(2008

Osvaldo

Joyanes

Introduction to programming using Java : an object-

Osvaldo
Cairo Battistuti

Ttulo del Documento

)
(198

Metodologa de La Programacin: Algoritmos,


Diagramas De Flujo Y Programas (3 Ed.)

Metodologa de la Programacin. Diagramas de Flujo,

Aguilar Luis

8)

Algoritmos Y Programacin Estructurada

Joyanes

(1992

Problemas de Metodologa de La Programacin

Aguilar Luis
Katcheroff,
Pablo
Lpez Leobardo

)
(2006

El Gran libro de la Programacin

)
(2006
)

Metodologa De La Programacin Orientada A


Objetos

Bibliografa
Autor

Rodrguez

Ao

Ttulo del Documento

(19

Almeida ngel 91)

Metodologa De La Programacin a travs de


Pseudocdigo.

M.

Distribucin horas/semana de las Unidades Temticas


Horas
Unidades Temticas
I.

Practicas

Tericas

Totales

Imparticin

10

1, 2

2, 3

36

44

12
10
68

6
2
22

18
12
90

Fundamentos de
programacin orientada a

II.

objetos
Ambiente de desarrollo

III.

de la POO
Programacin orientada a

IV.
V.

Semana de

objetos
Arreglos
Manejo de excepciones
TOTALES

DESARROLLO DE CONTENIDOS

3, 4, 5, 6, 7,
8, 9, 10
11, 12 , 13
14, 15

Unidades y Temas
I.

Fundamentos de programacin orientada a objetos.


a. Fundamentos de la POO
b. Caractersticas de la POO

II.

Ambiente de desarrollo de la POO.


a. Generalidades de la herramienta de desarrollo
b. Caractersticas de la interfaz de desarrollo

III.

Programacin orientada a objetos.


a. Estructura bsica de una clase
b. Aspectos lxicos
c. Clases y Objetos
d. Estructuras de control
e. Encapsulamiento
f. Herencia
g. Polimorfismo

IV.

Arreglos.
a. Definicin de Arreglos
b. Manejo de arreglos

V.

Manejo de excepciones
a. Concepto y tipos de excepciones.
b. Manejo de excepciones.
c. Creacin y lanzamiento de excepciones.

UNIDAD I. Fundamentos de programacin orientada a objetos.


I.I Fundamentos de la POO
Qu es un paradigma de programacin?
Conjunto de herramientas y tcnicas que conforman el soporte de una tecnologa; en
este caso para desarrollo de programas. IBM 2005
Paradigma orientado a objetos
Resultado de la evolucin natural de la programacin, se transform

en una

metodologa de programacin de propsito general que simula la forma en que el


7

hombre trabaja y cuya idea bsica es que percibimos al mundo que nos rodea como
una variedad de objetos.
La POO (Programacin Orientada a Objetos) representa una metodologa de
programacin que se basa en las siguientes caractersticas:
1. Los diseadores definen nuevas clases (o tipos) de objetos.
2. Los objetos poseen una serie de operaciones asociadas a ellos.
3. Las operaciones tienden a ser genricas, es decir, operan sobre mltiples
tipos de datos.
4. Las clases o tipos de objetos comparten componentes comunes mediante
mecanismos de herencia.
Objeto
Es una entidad (tangible o intangible) que posee caractersticas y acciones que
realiza por s solo o interactuando con otros objetos.
Un objeto es una entidad caracterizada por sus atributos propios y cuyo
comportamiento est determinado por las acciones o funciones que pueden
modificarlo, as como tambin las acciones que requiere de otros objetos. Puede ser
definido como una encapsulacin y una abstraccin: una encapsulacin de atributos
y servicios, y una abstraccin del mundo real.
Para el contexto de POO un objeto es una entidad que encapsula datos (atributos) y
acciones o funciones que los manejan (mtodos). Tambin un objeto se define como
una instancia o particularizacin de una clase.
Los objetos de inters durante el desarrollo de software no slo son tomados de la
vida real (objetos visibles o tangibles), tambin pueden ser abstractos. En general
son entidades que juegan un rol bien definido en el dominio del problema. Un libro,
una persona, un carro, un polgono, son apenas algunos ejemplos de objeto.
Cada objeto puede ser considerado como un proveedor de servicios utilizados por
otros objetos que son sus clientes. Cada objeto puede ser a la vez proveedor y
cliente. De all que un programa pueda ser visto como un conjunto de relaciones
entre proveedores clientes. Los servicios ofrecidos por los objetos son de dos tipos:
8

1. Los datos, que llamamos atributos.


2. Las acciones o funciones, que llamamos mtodos.
Clase
La clase es la unidad de modularidad en la POO. La tendencia natural del individuo
es la de clasificar los objetos segn sus caractersticas comunes (clase). Por
ejemplo, las personas que asisten a la universidad se pueden clasificar (haciendo
abstraccin) en estudiante, docente, empleado e investigador.
La clase puede definirse como la agrupacin o coleccin de objetos que comparten
una estructura comn y un comportamiento comn.
Es una plantilla que contiene la descripcin general de una coleccin de objetos.
Consta de atributos y mtodos que resumen las caractersticas y el comportamiento
comunes de un conjunto de objetos. Todo objeto (tambin llamado instancia de una
clase), pertenece a alguna clase.
Todos aquellos objetos que pertenecen a la misma clase son descritos o comparten
el mismo conjunto de atributos y mtodos, tienen el mismo formato y
comportamiento, son diferentes nicamente en los valores que contienen sus
atributos.

Mtodo
Son las operaciones (acciones o funciones) que se aplican sobre los objetos y que
permiten crearlos, cambiar su estado o consultar el valor de sus atributos.
Los mtodos constituyen la secuencia de acciones que implementan las operaciones
sobre los objetos. La implementacin de los mtodos no es visible fuera de objeto.
Atributo
Son los datos o variables que caracterizan al objeto y cuyos valores en un momento
dado indican su estado.

Un atributo es una caracterstica de un objeto. Mediante los atributos se define


informacin oculta dentro de un objeto, la cual es manipulada solamente por los
mtodos definidos sobre dicho objeto
Un atributo consta de un nombre y un valor. Cada atributo est asociado a un tipo de
dato, que puede ser simple (entero, real, lgico, carcter, string) o estructurado
(arreglo, registro, archivo, lista, etc.)

I.II Caractersticas de la POO


Abstraccin
Es el principio de ignorar aquellos aspectos de un fenmeno observado que no son
relevantes, con el objetivo de concentrarse en aquellos que s lo son. Una
abstraccin denota las caractersticas esenciales de un objeto (datos y operaciones),
que lo distingue de otras clases de objetos. Decidir el conjunto correcto de
abstracciones de un determinado dominio, es el problema central del diseo
orientado a objetos.
Los mecanismos de abstraccin son usados en la POO para extraer y definir del
medio a modelar, sus caractersticas y su comportamiento. Dentro de la POO son
muy usados mecanismos de abstraccin: la Generalizacin, la Agregacin y la
clasificacin.

La generalizaciones el mecanismo de abstraccin mediante el cual un


conjunto de clases de objetos son agrupados en una clase de nivel superior
(Superclase), donde las semejanzas de las clases constituyentes (Subclases)

son enfatizadas, y las diferencias entre ellas son ignoradas.


La agregacin es el mecanismo de abstraccin por el cual una clase de objeto

es definida a partir de sus partes (otras clases de objetos).


La clasificacin consiste en la definicin de una clase a partir de un conjunto
de objetos que tienen un comportamiento similar.

10

Herencia
Es el proceso mediante el cual un objeto de una clase adquiere propiedades
definidas en otra clase que lo preceda en una jerarqua de clasificaciones. Permite la
definicin de un nuevo objeto a partir de otros, agregando las diferencias entre ellos,
evitando repeticin de cdigo y permitiendo la reusabilidad.
Las clases heredan los datos y mtodos de la superclase. Un mtodo heredado
puede ser sustituido por uno propio si ambos tienen el mismo nombre.
La herencia puede ser simple (cada clase tiene slo una superclase) o mltiple
(cada clase puede tener asociada varias superclases). La clase Docente y la clase
Estudiante heredan las propiedades de la clase Persona (superclase, herencia
simple). La clase Preparador (subclase) hereda propiedades de la clase Docente y
de la clase Estudiante (herencia mltiple).

Encapsulamiento (Ocultamiento de Informacin)


Es la propiedad de POO que permite ocultar al mundo exterior la representacin
interna del objeto. Esto quiere decir que el objeto puede ser utilizado, pero los datos
esenciales del mismo no son conocidos fuera de l.
La idea central del encapsulamiento es esconder los detalles y mostrar lo relevante.
Permite el ocultamiento de la informacin separando el aspecto correspondiente a la
especificacin de la implementacin; de esta forma, distingue el "qu hacer" del

11

"cmo

hacer". La

especificacin

es visible

al

usuario, mientras que

la

implementacin se le oculta.
El encapsulamiento en un sistema orientado a objeto se representa en cada clase u
objeto, definiendo sus atributos y mtodos con los siguientes modos de acceso:

Pblico. Atributos o Mtodos que son accesibles fuera de la clase. Pueden ser

llamados por cualquier clase, aun si no est relacionada con ella.


Privado. Atributos o Mtodos que solo son accesibles dentro de la

implementacin de la clase.
Protegido. Atributos o Mtodos que son accesibles para la propia clase y sus
clases hijas (subclases).

Polimorfismo
Es una propiedad de la POO que permite que un mtodo tenga mltiples
implementaciones, que se seleccionan en base al tipo objeto indicado al solicitar la
ejecucin del mtodo.
El polimorfismo operacional o Sobrecarga operacional permite aplicar operaciones
con igual nombre a diferentes clases o estn relacionados en trminos de inclusin.
En este tipo de polimorfismo, los mtodos son interpretados en el contexto del objeto
particular, ya que los mtodos con nombres comunes son implementados de
diferente manera dependiendo de cada clase.
Por ejemplo, el rea de un cuadrado, rectngulo y crculo, son calculados de manera
distinta; sin embargo, en sus clases respectivas puede existir la implementacin del
rea bajo el nombre comn rea. En la prctica y dependiendo del objeto que llame
al mtodo, se usar el cdigo correspondiente.
Otro ejemplo de polimorfismo es el operador +. Este operador tiene dos funciones
diferentes de acuerdo al tipo de dato de los operandos a los que se aplica. Si los dos
elementos son numricos, el operador + significa suma algebraica de los mismos,
en cambio si por lo menos uno de los operandos es un String o Carcter, el operador
es la concatenacin de cadenas de caracteres.

12

UNIDAD II. Ambiente de desarrollo de la POO.


II.I Generalidades de la herramienta de desarrollo
Para el curso actual se decidi para la materia utilizar el lenguaje de programacin
C# , por lo tanto el IDE ideal para el desarrollo de aplicaciones es el Visual Studio
aunque existen otros IDE libres para el desarrollo de dichas aplicaciones en el
lenguaje C#.
Visual Studio 2013

13

C# es un lenguaje de programacin que se ha diseado para compilar diversas


aplicaciones que se ejecutan en .NET Framework. C# es simple, eficaz, con
seguridad de tipos y orientado a objetos.
Visual C# es una implementacin del lenguaje C# de Microsoft. Visual Studio ofrece
compatibilidad con Visual C# con un completo editor de cdigo, un compilador,
plantillas de proyecto, diseadores, asistentes para cdigo, un depurador eficaz y de
fcil uso y otras herramientas. La biblioteca de clases de .NET Framework ofrece
acceso a numerosos servicios de sistema operativo y a otras clases tiles y
adecuadamente diseadas que aceleran el ciclo de desarrollo de manera
significativa.
II.II Caractersticas de la interfaz de desarrollo
Crear un nuevo proyecto (consola C#)
Desde el men "Archivo" seleccionar la opcin "Nuevo proyecto..."

En la ventana Proyecto se encuentran los diferentes entornos de desarrollo en


lo que puedes trabajar en nuestro caso seleccionaremos: Visual C# - Aplicacin
de consola

14

Ingrese el Nombre del Proyecto, en nuestro caso le llamaremos Mi proyecto y


finalmente damos en el botn Aceptar.

Finalmente se desplegar el rea de trabajo, con el cual se podr iniciar con la


programacin

Abrir un proyecto
15

Para poder abrir un proyecto en Visual Studio solo es necesario ir al men Archivo
(File) y dar en la Abrir (open) y en la opcin de Proyecto/Solucin
(Project/solution)

Lo cual desplegar una ventana de exploracin donde simplemente se deber


seleccionar el proyecto deseado y dar en el botn Abrir

16

Guardar
Cuando se crea un proyecto se guarda por defecto en la ruta establecida. Lo que
ocurre con el proceso de guardado es que: 1. Guardar el cambio en el archivo
modificado en ese momento; 2 Guarda el proyecto en otra ruta de directorio; 3
Guardar todos los cambios de los archivos que se han modificado en ese momento.
Para poder acceder al guardado es necesario ir al men Archivo y se podr
observar las opciones de guardado como en la siguiente imagen.

Otra forma de hacerlo es con la barra de tareas en el icono con la imagen de los
disquetes.

Compilar
Cuando trabajamos en el entorno este cuenta con su depurador que se encarga de
compilar el cdigo generado y hacer un chequeo rpido de errores en sintaxis en
nuestro programa. Para ejecutar el compilador debemos acceder a la men
Compilar (Build) y en la opcin Compilar solucin (build solution), o bien F7.

17

Como se puede observar a continuacin el compilador nos arroja 1 error y nos da


una sugerencia: en este caso falta; en el cdigo nos lo enmarca con un recuadro gris
donde se encuentra el error.

Ejecutar
Una vez finalizado el cdigo y que no cuente con errores prosigue la accin
ejecutar (o depuracin) para visualizar el comportamiento del cdigo. Para ello
vamos al men Depurar (debug) y en la opcin Iniciar sin depurar

18

En caso de que el cdigo cuento con alguna anomala se presentar una lista de
errores.
Como el proyecto que se seleccion es Aplicacin de consola aparecer una
ventana como la siguiente:

Depurar
La opcin Depurar genera un diagnstico afondo del cdigo desarrollado, para
acceder al proceso de depuracin es men Depurar y la opcin Iniciar depuracin

En el caso de que exista un error en el cdigo de sintaxis aparecer una ventana de


advertencia y posteriormente los resultados de dicho error.
19

Unidad III. Programacin orientada a objetos.


III.I Estructura bsica de una clase
Una declaracin de clase o struct es como un plano que se utiliza para crear
instancias u objetos en tiempo de ejecucin. Si define una clase o un struct
llamado Person, Person es el nombre del tipo. Si declara e inicializa una
variable p de tipo Person, se dice que p es un objeto o una instancia de Person. Se
pueden crear varias instancias del mismo tipo Person y cada instancia puede tener
diferentes valores en sus propiedades y campos.
Una clase es un tipo de referencia. Cuando se crea un objeto de la clase, la
variable a la que se asigna el objeto solo incluye una referencia a dicha memoria.
Cuando la referencia a objeto se asigna a una nueva variable, la nueva variable
hace referencia al objeto original. Los cambios realizados en una variable se reflejan
en la otra variable porque ambas hacen referencia a los mismos datos.
En general, las clases se utilizan para modelar comportamiento ms complejo
o datos que se piensan modificar una vez creado un objeto de clase.
Sintaxis <Clase>:
class <Nombre de la clase>
{
<Atributos>
<Mtodos o funcionalidades>
}
Un ejemplo de la declaracin de una clase sera la siguiente:
class Alumno
{
public static void Main( string[] args )
{
}
}

20

El ejemplo de anterior no tiene funcionalidad, pero puede agregrsele una


funcionalidad simple como es la captura de un nombre en consola y la impresin del
nombre utilizando un mtodo, para ello ser necesario crear un objeto de la clase.
Para conocer ms: https://msdn.microsoft.com/es-es/library/ms173109.aspx
III.II Aspectos lxicos
Tipos de datos.
Todos los tipos de datos primitivos en C# son objetos en el espacio de
nombres System. Para cada tipo de datos, se proporciona un nombre corto o alias.
Por ejemplo, int es el nombre corto correspondiente a System.Int32 y double es la
forma abreviada de System.Double.
En la tabla siguiente se proporciona la lista de tipos de datos de C# y sus
alias. Los primeros ocho de estos tipos corresponden a los tipos primitivos
disponibles en Java. Sin embargo, el tipo boolean de Java se denomina bool en C#.
Nombr

Clase

e corto

.NET

Tipo

Anch

Intervalo (bits)

byte

Byte

Entero sin signo

0 a 255

sbyte

SByte

Entero con signo

-128 a 127

int

Int32

Entero con signo

32

-2.147.483.648 a 2.147.483.647

uint

UInt32

Entero sin signo

32

0 a 4294967295

short

Int16

Entero con signo

16

-32.768 a 32.767

ushort

UInt16

Entero sin signo

16

0 a 65535

long

Int64

Entero con signo

64

-922337203685477508 a
922337203685477507

ulong

UInt64

Entero sin signo

64

0 a 18446744073709551615

float

Single

Tipo de punto

32

-3,402823e38 a 3,402823e38

flotante de

21

precisin simple
double

Double

Tipo de punto

64

flotante de

-1,79769313486232e308 a
1,79769313486232e308

precisin doble
char

Char

Un carcter

16

Unicode
bool

object

Boolea

Tipo Boolean

lgico

Object

Tipo base de todos

Smbolos Unicode utilizados en el


texto

True o false

128

1.0 10e28 a 7.9 10e28

los otros tipos


string

String

Una secuencia de
caracteres

decim

Decim

Tipo preciso

al

al

fraccionario o
integral, que
puede representar
nmeros
decimales con 29
dgitos
significativos

Palabras clave (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.
En la primera tabla de este tema se enumeran las palabras clave que son
identificadores reservados en cualquier parte de un programa de C#. En la segunda
tabla se enumeran las palabras clave contextuales en C# las cuales solamente
tienen un significado especial en un contexto de programa limitado y se pueden
22

utilizar como identificadores fuera de ese contexto. Normalmente, al agregarse


nuevas palabras clave al lenguaje C#, stas se agregan como palabras clave
contextuales para evitar errores en programas escritos en versiones anteriores.
abstract

as

base

bool

break

byte

case

catch

char

checked

class

const

continue

decimal

default

delegate

do

double

else

enum

event

explicit

extern

false

finally

fixed

float

for

foreach

goto

if

implicit

in

in (generic modifier)

int

interface

internal

is

lock

long

namespace

new

null

object

operator

out

out (generic modifier)

override

params

private

protected

public

readonly

ref

return

sbyte

sealed

short

sizeof

stackalloc

static

string

struct

switch

this

throw

true

try

typeof

uint

ulong

unchecked

unsafe

ushort

using

virtual

void

volatile

while

23

Las palabras clave contextuales se utilizan para proporcionar un significado concreto


en el cdigo, sin embargo no son palabras reservadas de C#. Algunas palabras
clave contextuales, como partial y where, tienen significados especiales en dos o
ms contextos.

add

alias

ascending

async

await

descending

dynamic

from

get

global

group

into

join

let

orderby

partial (type)

partial (method)

remove

select

set

value

var

where (generic type constraint)

where (query clause)

yield

Declaracin de variables y constantes.


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. En C#, las variables se declaran con un
tipo de datos y una etiqueta concretos.
Sintaxis <Variable>:
<Tipo de dato> <Nombre de la variable>;
Ejemplo:
int ValorEntero;

24

Una constante es otro tipo de campo. Contiene un valor que se asigna cuando
se compila el programa y nunca cambia despus. Las constantes se declaran con la
palabra clave const; son tiles para que el cdigo sea ms legible.
Sintaxis <Constante>
const <Tipo de dato> <Nombre de la constante> = <valor>;
Ejemplo:
const double pi = 3.1416;
Para conocer ms:
https://msdn.microsoft.com/es-MX/library/wew5ytx4%28v=vs.90%29.aspx
Operadores.
o Aritmticos.
La mayora de las aplicaciones realiza clculos aritmticos. Las expresiones
aritmticas deben escribirse en formato de lnea recta para facilitar la introduccin de
aplicaciones en la computadora. Por ende, las expresiones como a dividida entre b
deben escribirse como a / b, de manera que todas las constantes, variables y
operadores aparezcan en una lnea recta.
A continuacin se presenta una tabla con los operadores aritmticos binarios en
C#:
Operador de C#
Suma
Resta
Multiplicacin
Divisin
Residuo

Operador

Expresin

aritmtico
+
*

algebraica
a+b
a-c
ab

a/b ,

a
b

, ab

a mod b

25

Expresin en C#
a+b
a b
a*b
a/b
a%b

C# aplica los operadores en las expresiones aritmticas en una secuencia


precisa, la cual se determina en base a las siguientes reglas de precedencia de
operadores, que por lo general son las mismas que las que se siguen en lgebra:
1. Primero se aplican las operaciones de multiplicacin, divisin y residuo. Si
una expresin contiene varias de estas operaciones, los operadores se
aplican de izquierda a derecha. Los operadores de multiplicacin, divisin y
residuo tienen el mismo nivel de precedencia.
2. Despus se aplican las operaciones de suma y resta. Si una expresin
contiene varias de esas operaciones, los operadores se aplican de izquierda a
derecha. Los operadores de suma y restas tienen el mismo nivel de
precedencia.
Los parntesis se utilizan para agrupar trminos en expresiones de C#, de la
misma forma que en las expresiones algebraicas. Por ejemplo, para multiplicar apor
la cantidad b + c, escribimos
a*(b+c)
Si una expresin contiene parntesis anidados, como
((a+b)*c)
la expresin en el conjunto ms interno de parntesis (a + b en este caso) se evala
primero.
o Toma de decisiones: operadores de igualdad y relacionales
Una condicin es una expresin que puede ser verdadera o falsa. En esta
seccin introducimos una versin simple de la instruccin if de C#, que permite que
una aplicacin tome una decisin con base en el valor de una condicin. Por
ejemplo, la condicin calificacin es mayor o igual a 60 determina si un estudiante
pas una prueba. Si la condicin en una instruccin if es verdadera, se ejecuta el
cuerpo de la instruccin if. Si la condicin es falsa, el cuerpo no se ejecuta.

26

Operador estndar
algebraicos de igualdad
y relacionales
Operado de igualdad
=

Operadores

Operador de igualdad o
relacional en C#

relacionales
>
<

Ejemplo

Significado de la
condicin

==
!=

x == y
x != y

x es igual a y
x no es igual a y

>
<
>=
<=

x>y
x<y
x >=
x <=

x es mayor que y
x es mejor que y
x es mayor o igual que y
x es menor o igual que y

Tambin se han incluido operadores de asignacin compuestos que permiten


ahorrar tecleo a la hora de realizar asignaciones tan comunes como:
temperatura = temperatura + 15; // Sin usar asignacin compuesta
temperatura += 15; // Usando asignacin compuesta

Las dos lneas anteriores son equivalentes, pues el operador compuesto += lo que
hace es asignar a su primer operando el valor que tena ms el valor de su segundo
operando. Como se ve, permite compactar bastante el cdigo.
Aparte del operador de asignacin compuesto +=, tambin se ofrecen operadores de
asignacin compuestos para la mayora de los operadores binarios ya vistos.
Estos son: +=,-=,*=, /=, %=, &=, |=, ^=, <<= y >>=. Ntese que no hay versiones
compuestas para los operadores binarios &&y ||.
Otros dos operadores de asignacin incluidos son los de incremento (++) y
decremento (--) Estos operadores permiten, respectivamente, aumentar y disminuir
en una unidad el valor de la variable sobre el que se aplican. As, estas lneas de
cdigo son equivalentes:
temperatura = temperatura + 1; // Sin usar asignacin compuesta ni incremento
temperatura += 1; // Usando asignacin compuesta
temperatura++; // Usando incremento

27

Si el operador ++se coloca tras el nombre de la variable (como en el ejemplo)


devuelve el valor de la variable antes de incrementarla, mientras que si se coloca
antes, devuelve el valor de sta tras incrementarla; y lo mismo ocurre con el
operador --. Por ejemplo:
c = b++; // Se asigna a c el valor de b y luego se incrementa b
c = ++b; // Se incrementa el valor de b y luego se asigna a c
o Lgicos.
Se incluyen operadores que permiten realizar las operaciones lgicas tpicas:
and (&&y &), or (||y |), not (!) y xor (^)
Los operadores && y || se diferencia de & y | en que los primeros realizan
evaluacin perezosa y los segundos no. La evaluacin perezosa consiste en que si
el resultado de evaluar el primer operando permite deducir el resultado de la
operacin, entonces no se evala el segundo y se devuelve dicho resultado
directamente, mientras que la evaluacin no perezosa consiste en evaluar siempre
ambos operandos.
o Operador condicional.
Es el nico operador incluido en C# que toma 3 operandos, y se usa as:
<condicin> ?<expresin1> :<expresin2>
El significado del operando es el siguiente: se evala <condicin>Si es cierta se
devuelve el resultado de evaluar <expresin1>,y si es falsa se devuelve el resultado
de evaluar <condicin2>. Un ejemplo de su uso es:
b = (a>0) ? a : 0; // Suponemos a y b de tipos enteros
En este ejemplo, si el valor de la variable aes superior a 0 se asignar a b el valor de
a, mientras que en caso contrario el valor que se le asignar ser 0.

Comentarios
28

Los caracteres // convierten el resto de la lnea en un comentario. Un bloque


de texto tambin se puede convertir en comentario si se coloca entre los
caracteres /* y */, como por ejemplo:
// Hello World! program in C#
/* Hello World! program in C#.
This program displays the string "Hello World!" on the screen. */

Literales
Un literales 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: expresiones.
o 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 + o para indicar si es positivo o negativo, aunque si
no se pone nada se considerar que es positivo.
o 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. Tambin es posible representar los reales en formato
cientfico, usndose para indicar el exponente los caracteres e o E. Ejemplos de
literales reales son 0.0, 5.1, -5.1, +15.21,3.02e10, 2.02e-2, 98.8E+1, etc.
o Literales lgicos.

29

Los nicos literales lgicos vlidos son true y false, que respectivamente
representan los valores lgicos cierto y falso.
o 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. Las nicas excepciones a esto son los caracteres que se
muestran en la tabla a continuacin:

Carcter
Comilla simple
Comilla doble
Comilla doble
Carcter nulo
Alarma
Retroceso
Salto de pgina
Nueva lnea
Retorno de carro
Tabulacin horizontal
Tabulacin vertical
Barra invertida

Cdigo de escape Unicode


\u0027
\
\u0022
\u0000
\u0007
\u0008
\u000C
\u000A
\u000D
\u0009
\u000B
\u005C

Cdigo de escape especial


\
\
\0
\a
\b
\f
\n
\r
\t
\v
\\

o Literales de cadena.
Una cadena no es ms que una secuencia de caracteres encerrados entre comillas
dobles. Por ejemplo Hola, mundo, camin, etc. El texto contenido dentro estos
literales puede estar formado por cualquier nmero de literales de carcter
concatenados y sin las comillas simples, aunque si incluye comillas dobles stas han
de escribirse usando secuencias de escape porque si no el compilador las
interpretara como el final de la cadena.
C# tambin admite un nuevo formato para la escritura estos literales tipo de literales
consistente en precederlas de un smbolo @, caso en que todo el contenido de la
cadena sera interpretado tal cual, sin considerar la existencia de secuencias de
escape.
30

o Literal nulo.
El literal nulo es un valor especial que se representa en C# con la palabra reservada
null y se usa como valor de las variables de objeto no inicializadas para as indicar
que contienen referencias nulas.

Expresiones.
Una expresin es una secuencia de uno o ms operandos y cero o ms
operadores que se pueden evaluar como un valor, objeto, mtodo o espacio de
nombres nico. Las expresiones pueden constar de un valor literal, una invocacin
de mtodo, un operador y sus operandos o un nombre simple. Los nombres simples
pueden ser el nombre de una variable, miembro de tipo, parmetro de mtodo,
espacio de nombres o tipo.
Las expresiones pueden utilizar operadores que, a su vez, utilizan otras
expresiones como parmetros o llamadas a mtodos cuyos parmetros son, a su
vez, otras llamadas a mtodos, de modo que pueden variar de simples a muy
complejas. A continuacin se muestran dos ejemplos de expresiones:
((x < 10) && ( x > 5)) || ((x > 20) && (x < 25))
System.Convert.ToInt32("35")
III.III Clases y Objetos
Clases
La sintaxis bsica para definir una clase es la que a continuacin se muestra:
class <nombreClase>
{
<miembros>
}

31

De este modo se definira una clase de nombre <nombreClase> cuyos


miembros son los definidos en <miembros>Los miembros de una clase son los datos
y mtodos de los que van a disponer todos los objetos de la misma. Un ejemplo de
cmo declarar una clase de nombre A que no tenga ningn miembro es la siguiente:
class A
{
}
Una clase as declarada no dispondr de ningn miembro a excepcin de los
implcitamente definidos de manera comn para todos los objetos que creemos en
C#.
Mtodos
Un mtodo es un bloque de cdigo que contiene una serie de instrucciones.
Los programas hacen que las instrucciones se ejecuten mediante una llamada al
mtodo y la especificacin de los argumentos de mtodo necesarios. En C#, cada
instruccin se ejecuta en el contexto de un mtodo. El mtodo Main es el punto de
entrada de cada aplicacin C# al que llama Common Language Runtime (CLR)
cuando se inicia el programa.
Sintaxis de definicin de mtodos.
<tipoRetorno> <nombreMtodo>(<parmetros>)
{
<cuerpo>
}
Para definir un mtodo hay que indicar tanto cules son las instrucciones que forman
su cuerpo como cul es el nombre que se le dar, cul es el tipo de objeto que
puede devolver y cules son los parmetros que puede tomar.
En <tipoRetorno>se indica cul es el tipo de dato del objeto que el mtodo devuelve,
y si no devuelve ninguno se ha de escribir void en su lugar.
32

Como nombre del mtodo se puede poner en <nombreMtodo>cualquier


identificador vlido.
Aunque es posible escribir mtodos que no tomen parmetros, si un mtodo los
toma se ha de indicar en <parmetros>cul es el nombre y tipo de cada uno de
ellos, separndolos con comas si son ms de uno y siguiendo la sintaxis que ms
adelante en este mismo tema es explica.
El <cuerpo>del mtodo tambin es opcional, pero si el mtodo retorna algn tipo de
objeto entonces ha de incluir al menos una instruccin return que indique cul es el
objeto a devolver.
Ejemplo:
int Saluda()
{
Console.WriteLine(Hola Mundo);
return 1;
}
o Mtodos estticos
En C# podemos definir mtodos que se crean independientemente a la definicin de
objetos. Un mtodo esttico puede llamarse sin tener que crear un objeto de dicha
clase. Un mtodo esttico tiene ciertas restricciones:
No puede acceder a los atributos de la clase (salvo que sean estticos)
No puede utilizar el operador this, ya que este mtodo se puede llamar sin
tener que crear un objeto de la clase.
Puede llamar a otro mtodo siempre y cuando sea esttico.
Un mtodo esttico es lo ms parecido a lo que son las funciones en los lenguajes
estructurados (con la diferencia que se encuentra encapsulado en una clase)
Si recordamos cada vez que creamos un programa en C# debemos especificar el
mtodo Main:
33

static void Main(string[] args)


El mtodo Main es esttico para que el sistema operativo pueda llamarlo
directamente sin tener que crear un objeto de la clase que lo contiene.
o Llamada a mtodos
La forma en que se puede llamar a un mtodo depende del tipo de mtodo del que
se trate. Si es un mtodo de objeto(mtodo no esttico) se hade usar la notacin:
<objeto>.<nombreMtodo>(<valoresParmetros>)
El <objeto> indicado puede ser directamente una variable del tipo de datos al que
pertenezca el mtodo o puede ser una expresin que produzca como resultado una
variable de ese tipo; pero si desde cdigo de algn mtodo de un objeto se desea
llamar a otro mtodo de ese mismo objeto, entonces se ha de dar el valor this a
<objeto>.
En caso de que sea un mtodo de tipo(mtodo esttico), entones se ha de usar:
<tipo>.<nombreMtodo>(<valoresParmetros>)
Ahora en <tipo>ha de indicarse el tipo donde se haya definido el mtodo o algn
subtipo suyo. Sin embargo, si el mtodo pertenece al mismo tipo queel cdigo que lo
llama entonces se puede usar la notacin abreviada:
<nombreMtodo>(<valoresParmetros>)
El formato en que se pasen los valores a cada parmetro en <valoresParmetros> a
aquellos mtodos que tomen parmetros depende del tipo de parmetro que sea.
o Tipos de parmetros
o Parmetros de entrada
Un parmetro de entrada recibe una copia del valor que almacenara una variable
del tipo del objeto que se le pase.
Para definir un parmetro de entrada basta indicar cul el nombre que se le desea
dar y el cul es tipo de dato que podr almacenar. Se sigue la siguiente sintaxis:
34

<tipoParmetro> <nombreParmetro>
Por ejemplo, el siguiente cdigo define un mtodo llamado Sumaque toma dos
parmetros de entrada de tipo int llamados par1y par2y devuelve un int con su
suma:
int Suma(int par1, int par2) {
return par1+par2;
}
o Parmetros de salida
Un parmetro de salida se diferencia de uno de entrada en que todo cambio que se
le realice en el cdigo del mtodo al que pertenece afectar al objeto que se le pase
al llamar dicho mtodo tanto si ste es de un tipo por como si es de un tipo
referencia.
Los parmetros de salida se definen de forma parecida a los parmetros de entrada
pero se les ha de aadir la palabra reservada out. O sea, se definen as:
out <tipoParmetro> <nombreParmetro>
Al llamar a un mtodo que tome parmetros deeste tipo tambin se ha preceder el
valor especificado para estos parmetros del modificador out. Una utilidad de esto es
facilitar la legibilidad de las llamadas a mtodos. Por ejemplo, dada una llamada de
la forma:
a.f(x, out z)
o Parmetros por referencia
Un parmetro por referencia es similar a un parmetro de salida slo que no es
obligatorio modificarlo dentro del mtodo al que pertenece, por lo que ser
obligatorio pasarle una variable inicializada ya que no se garantiza su inicializacin
en el mtodo.

35

Los parmetros por referencia se definen igual que los parmetros de salida pero
sustituyendo el modificador out por el modificador ref.
o Mtodos constructores.
Cada vez que se crea una clase o struct, se llama a su constructor. Una clase o
struct puede tener varios constructores que toman argumentos diferentes. Los
constructores permiten al programador establecer valores predeterminados, limitar la
creacin de instancias y escribir cdigo flexible y fcil de leer.
Los constructores de un tipo de datos son mtodos especiales que se definen
como miembros de ste y que contienen cdigo a ejecutar cada vez que se cree un
objeto de ese tipo.
La sintaxis bsica de definicin de constructores consiste en definirlos como
cualquier otro mtodo pero dndoles el mismo nombre queel tipo de dato al que
pertenecen y no indicando el tipo de valor de retorno debido a que nunca pueden
devolver nada.
Es decir, se usa la sintaxis:
<modificadores> <nombreTipo>(<parmetros>)
{
<cdigo>
}
Al constructor de una clase se le llama en el momento en que se crea algn objeto
de la misma usando el operador new. De hecho, la forma de uso de este operador
es:
new <llamadaConstructor>
Por ejemplo:
class Prueba
{
Prueba(int x)
{
36

System.Console.Write(Creado objeto x={0},x);


}
public static void Main() {
Prueba p = new Prueba(5);
}
}

o Mtodo constructor por defecto


No es obligatorio definir un constructor para cada clase, y en caso de que no
definamos ninguno el compilador crear uno por nosotros sin parmetros ni
instrucciones. Es decir, como si se hubiese definido de esta forma:
<nombreTipo>()
{
}
Propiedades
Una propiedades una mezcla entre el concepto de campo y el concepto de
mtodo. Externamente es accedida como si de un campo normal se tratase, pero
internamente es posible asociar cdigo a ejecutar en cada asignacin o lectura de su
valor.
Para definir una propiedad seusa la siguiente sintaxis:
< tipoPropiedad> <nombrePropiedad>
{
set
{
<cdigoEscritura>
}
37

get
{
<cdigoLectura>
}
}
Una propiedad as definida sera accedida como si de un campo de tipo
<tipoPropiedad> se tratase, pero en cada lectura de su valor se ejecutara el
<cdigoLectura> y en cada escritura de un valor en ella se ejecutara
<cdigoEscritura>
Al escribir los bloques de cdigo get y set hay que tener en cuenta que dentro
del cdigo set se puede hacer referencia al valor que se solicita asignar a travs de
un parmetro especial del mismo tipo de dato que la propiedad llamado value; y que
dentro del cdigo get se ha de devolver siempre un objeto del tipo de dato de la
propiedad.
Objetos
o Operador new
La funcionalidad del operador new, es crear objetos y cuya sintaxis es:
new <nombreTipo>(<parametros>)
Este operador crea un nuevo objeto del tipo cuyo nombre se le indica y llama
durante su proceso de creacin al constructor del mismo apropiado segn los
valores que se le pasen en <parametros>, devolviendo una referencia al objeto
recin creado.
El constructor de un objeto no es ms que un mtodo definido en la definicin de su
tipo que tiene el mismo nombre que la clase a la que pertenece el objeto
El constructor recibe ese nombre debido a que su cdigo suele usarse precisamente
para construir el objeto, para inicializar sus miembros.
Utilizaremos el siguiente ejemplo:

38

class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string NIF; // Campo de cada objeto Persona que almacena su NIF
void Cumpleaos() // Incrementa en uno la edad del objeto Persona
{
Edad++;
}
Persona (string nombre, int edad, string nif) // Constructor
{
Nombre = nombre; Edad = edad;
NIF = nif;
}
}

Podemos crear un objeto Persona de nombre Jos, de 22 aos de edad y NIF


12344321-A as:
new Persona(Jos, 22, 12344321-A)
Una vez creado un objeto lo ms normal es almacenar la direccin devuelta
por new en una variable del tipo apropiado para el objeto creado. El siguiente
ejemplo -que como es lgico ir dentro de la definicin de algn mtodo- muestra
cmo crear una variable de tipo Persona llamada p y cmo almacenar en ella la
direccin del objeto que devolvera la anterior aplicacin del operador new:
Persona p;

// Creamos variable p

// Almacenamos en p el objeto creado con new


p = new Persona(Jose, 22, 12344321-A);

39

A partir de este momento la variable p contendr una referencia a un objeto


de clase Persona que representar a una persona llamada Jos de22 aos y NIF
12344321-A. O lo que prcticamente es lo mismo y suele ser la forma comnmente
usada para decirlo: la variable p representa a una persona llamada Jos de 22 aos
y NIF 12344321-A.
Como lo ms normal suele ser crear variables donde almacenar referencias a
objetos que creemos, las instrucciones anteriores pueden compactarse en una sola
as:
Persona p = new Persona(Jos, 22, 12344321-A);
De hecho, una sintaxis ms general para la definicin de variables es la siguiente:
<tipoDato> <nombreVariable> =<valorInicial>;
La parte = <valorInicial> de esta sintaxis es en realidad opcional, y si no se incluye la
variable declarada pasar a almacenar una referencia nula (contendr el literal null)
o Referencia al objeto actual con this
Dentro del cdigo de cualquier mtodo de un objeto siempre es posible hacer
referencia al propio objeto usando la palabra reservada this. Esto puede venir bien a
la hora de escribir constructores de objetos debido a que permite que los nombres
que demos a los parmetros del constructor puedan coincidir nombres de los
campos del objeto sin que haya ningn problema. Por ejemplo, el constructor de la
clase Persona escrito anteriormente se puede reescribir as usando this:
Persona (string Nombre, int Edad, string NIF) {
this.Nombre = Nombre;
this.Edad = Edad;
this.NIF = NIF;
}

Otra forma de crear objetos o instancias de una clase es la siguiente:


40

SampleClass sampleObject = new SampleClass(); //Utilizando constructor por


defecto
Una vez creadas las instancias de una clase, puede asignar valores a las
propiedades y los campos de la instancia, as como invocar mtodos de clase.
sampleObject.sampleProperty = "Sample String"; //Asignacin de valor
utilizando propiedades
sampleObject.sampleMethod(); //Llamada a mtodo

Modificadores y niveles de acceso


Todas las clases y miembros de clase pueden especificar el nivel de acceso que
proporcionan a otras clases mediante los modificadores de acceso.
Modificado

Definicin

r de C#
public

Puede obtener acceso al tipo o miembro cualquier otro cdigo del


mismo ensamblado o de otro ensamblado que haga referencia a
ste.

private

Solamente puede obtener acceso al tipo o miembro el cdigo de la


misma clase.

protected

Solamente puede obtener acceso al tipo o miembro el cdigo de la


misma clase o de una clase derivada.

internal

Puede obtener acceso al tipo o miembro cualquier cdigo del


mismo ensamblado, pero no de un ensamblado distinto.

protected

Puede obtener acceso al tipo o miembro cualquier cdigo del

internal

mismo ensamblado o cualquier clase derivada de otro ensamblado.

III.IV Estructuras de control


41

Por lo general, las instrucciones en una aplicacin se ejecutan una despus


de la otra, en el orden en que se escribieron. A este proceso se le conoce como
ejecucin secuencial. Varias instrucciones de C# le permiten especificar que la
siguiente instruccin a ejecutar no es necesariamente la siguiente en la secuencia. A
esto se le conoce como transferencia de control.
Para todas las estructuras de control excepto la instruccin switch, la
transferencia del control del programa se basa en una decisin cuyo resultado es
una instruccin del valor de verdad (que devuelve un tipo booleano true o false). Se
crea una expresin y, a continuacin, se prueba si su resultado es true. Hay dos
clases principales de estructuras de control de programa.
Estructura de control de seleccin.
La estructura de seleccin especifica rutas alternativas para el flujo del
programa, creando de este modo un punto de unin en el programa.
o La estructura de seleccin nica (if)
La instruccin if permite ejecutar ciertas instrucciones slo si se da una determinada
condicin. Su sintaxis de uso es la sintaxis:
if (<condicin>)
<instrucciones If>
El significado de esta instruccin es el siguiente: se evala la expresin <condicin>,
que ha de devolver un valor lgico. Si es cierta (devuelve true) se ejecutan las
<instrucciones If>, y si es falsa (false) no se ejecutan.
Las aplicaciones utilizan instrucciones de seleccin para elegir entre los
cursos alternativos de accin. Por ejemplo, suponga que la calificacin para aprobar
un examen es de 60.
if( calif >= 60)
Console.WriteLine("Aprobado");
42

La instruccin determina si la condicin calif >= 60 es verdadera o falsa. Si la


condicin es verdadera se imprime "Aprobado" y se ejecuta la siguiente instruccin
en la secuencia. Si la condicin es falsa, no se imprime ningn mensaje y se ejecuta
la siguiente instruccin en la secuencia.
o La estructura de seleccin doble (if...else)
La instruccin de seleccin simple ifrealiza una accin indicada slo cuando la
condicin es verdadera; en caso contrario se omite la accin. La instruccin de
seleccin doble if - else nos permite especificar una accin a realizar cuando la
condicin es verdadera y una accin distinta cuando la condicin es falsa.
if (<condicin>)
<instruccionesIf>
else
<instruccionesElse>
Por ejemplo:
if( calif >= 60)
Console.WriteLine("Aprobado");
else
Console.WriteLine("Reprobado");
La instruccin imprime "Aprobado" si la calificacin es mayor o igual a 60, pero
imprime "Reprobado" si es menor a 60. En cualquier caso, despus de realizar la
impresin se ejecuta la siguiente instruccin en la secuencia.
o La estructura de seleccin mltiple (switch)
La instruccin switch permite ejecutar unos u otros bloques de instrucciones segn
el valor de una cierta expresin. Su estructura es:
switch (<expresin>)
{
case <valor1>:<bloque1>
<siguienteAccin>
43

case <valor2>:<bloque2>
<siguienteAccin>
...
default:<bloqueDefault>
<siguienteAccin>
}

El significado de esta instruccin es el siguiente: se evala <expresin>. Si su


valor es <valor1> se ejecuta el <bloque1>, si es <valor2> se ejecuta <bloque2>, y
as para el resto de valores especificados. Si no es igual a ningunode esos valores y
se incluye la rama default, se ejecuta el <bloqueDefault>; pero si no se incluye se
pasa directamente a ejecutar la instruccin siguiente al switch.
El elemento marcado como <siguienteAccin> colocado tras cada bloque de
instrucciones indica qu es lo que ha de hacerse tras ejecutar las instrucciones del
bloque que lo preceden. Puede ser uno de estos tres tipos de instrucciones:
goto case <valori>;
goto default;
break;
Si es un goto case indica que se ha de seguir ejecutando el bloque de instrucciones
asociado en el switch a la rama del <valori> indicado, si es un goto default indica que
se ha de seguir ejecutando el bloque de instrucciones de la rama default, y si es un
break indica que se ha de seguir ejecutando la instruccin siguiente al switch.
Por ejemplo:
// determina cul calificacin se introdujo
switch(args[0])
{
case Jos:
Console.WriteLine(Hola Jos. Buenos das);
44

break;
case Paco:
Console.WriteLine(Hola Paco. Me alegro de verte);
break;
default:
Console.WriteLine(Hola {0}, args[0]);
}

Este programa reconoce ciertos nombres de personas que se le pueden pasar


como argumentos al lanzarlo y les saluda de forma especial. La rama default se
incluye para dar un saludo por defecto a las personas no reconocidas.
o El operador condicional en lnea ( ? : )
C# cuenta con el operador condicional (?:), que puede utilizarse en lugar de
una instruccin ifelse. ste es el nico operador ternarioen C#; es decir, que utiliza
tres operandos. En conjunto, los operandos y los smbolos ?: forman una expresin
condicional. El primer operando (a la izquierda del ?) es una expresin booleana; es
decir, una expresin que se evala como un valor tipo bool: true(verdadero) o
false(falso). El segundo operando (entre el ? y el :) es el valor de la expresin
condicional si la expresin booleana es truey el tercer operando (a la derecha del :)
es el valor de la expresin condicional si la expresin booleana es false. Por
ejemplo, la instruccin
Console.WriteLine( calif >= 60 ? "Aprobado": "Reprobado");
Estructura de control de repeticin
La estructura de repeticin especifica la repeticin de una accin mientras se
sigan cumpliendo determinadas condiciones. Cuando las condiciones de la
instruccin de control se hayan cumplido (normalmente despus de un nmero
especfico de repeticiones), el control se transferir a la siguiente instruccin externa
a la estructura de repeticin.

45

o Instruccin while.
La instruccin while permite ejecutar un bloque de instrucciones mientras se de una
cierta instruccin. Su sintaxis de uso es:
while (<condicin>)
<instrucciones>
Su significado es el siguiente: Se evala la <condicin> indicada, que ha de producir
un valor lgico. Si es cierta (valor lgico true) se ejecutan las<instrucciones> y se
repite el proceso de evaluacin de <condicin> y ejecucin de <instrucciones> hasta
que deje de serlo. Cuando sea falsa (false) se pasar a ejecutar la instruccin
siguiente al while.
Un ejemplo cmo utilizar esta instruccin es el siguiente:
int actual = 0;
while (actual < args.Length) {
Console.WriteLine(Hola {0}!, args[actual]);
actual = actual + 1;
}
En este caso, si se indica ms de un argumento al llamar al programa se
mostrar por pantalla un mensaje de saludo para cada uno de ellos. Para ello se usa
una variable actual que almacena cul es el nmero de argumento a mostrar en
cada ejecucin del while. Para mantenerla siempre actualizada lo que se hace es
aumentar en una unidad su valor tras cada ejecucin de las <instrucciones> del
bucle.
Por otro lado, dentro de las <instrucciones> de un while pueden usarse dos
instrucciones especiales:
o break; : Indica que se ha de abortar la ejecucin del bucle y continuarse
ejecutando por la instruccin siguiente al while.
46

o continue; : Indica que se ha de abortar la ejecucin de las <instrucciones>


y reevaluarse la <condicin> del bucle.
o Instruccin do while
La instruccin do while es una variante delwhile que se usa as:
do
<instrucciones>
while(<condicin>);
La nica diferencia del significado dedo...while respecto al dewhile es que en vez de
evaluar primero la condicin y ejecutar <instrucciones> slo si es cierta, do while
primero ejecuta las<instrucciones> y luego mira la<condicin> para ver si se ha de
repetir la ejecucin de las mismas. Por lo dems ambas instrucciones son iguales, e
incluso tambin puede incluirse break; y continue; entre las <instrucciones> del do
while. do while est especialmente destinado para los casos en los que haya que
ejecutar las <instrucciones> al menos una vez aun cuando la condicin sea falsa
desde el principio., como ocurre en el siguiente ejemplo:
String ledo;
do
{
Console.WriteLine(Clave: );
ledo = Console.ReadLine();
}
while (ledo != Jos);
Este programa pregunta al usuario una clave y mientras no introduzca la correcta
(Jos) no continuar ejecutndose. Una vez que introducida correctamente dar un
mensaje de bienvenida al usuario.
o Instruccin for

47

La instruccin for es una variante de while que permite reducir el cdigo


necesario para escribir los tipos de bucles ms comnmente usados en
programacin. Su sintaxis es:
for (<inicializacin>; <condicin>; <modificacin>)
<instrucciones>
El significado de esta instruccin es el siguiente: se ejecutan las instrucciones de
<inicializacin>, que suelen usarse para definir e inicializar variables que luego se
usarn en<instrucciones>. Luego se evala <condicin>, y si es falsa se contina
ejecutando por la instruccin siguiente al for; mientras que si es cierta se ejecutan
las <instrucciones> indicadas, luego se ejecutan las instrucciones de <modificacin>
que como su nombre indica suelen usarse para modificar los valores de variables
que se usen en <instrucciones> y luego se reevala <condicin>repitindose el
proceso hasta que sta ltima deje de ser cierta.
La siguiente clase es equivalente a la clase HolaMundo While ya vista solo que hace
uso del for para compactar ms su cdigo:
for (int actual = 0;actual < args.Length; actual++)
Console.WriteLine(Hola {0}!, args[actual]);
Al igual que con while, dentro de las<instrucciones> del for tambin pueden incluirse
instrucciones continue; y break; que puedan alterar el funcionamiento normal del
bucle.
o Instruccin foreach
La instruccin foreach es una variante del for pensada especialmente para
compactar la escritura de cdigos donde se realice algn tratamiento a todos los
elementos de una coleccin, que suele un uso muy habitual de for en los lenguajes
de programacin que lo incluyen. La sintaxis que se sigue a la hora de escribir esta
instruccin foreach es:
foreach (<tipoElemento> <elemento> in <coleccin>)
<instrucciones>
48

El significado de esta instruccin es muy sencillo: se ejecutan<instrucciones>


para cada uno de los elementos de la <coleccin> indicada. <elemento> es una
variable de slo lectura de tipo <tipoElemento> que almacenar en cada momento el
elemento de la coleccin que se est procesando y que podr ser accedida desde
<instrucciones>.
Es importante sealar que<coleccin> no puede valer null porque entonces
saltara

una

excepcin

de

tipo

System.NullReferenceException,

que

<tipoElemento> ha de ser un tipo cuyos objetos puedan almacenar los valores de los
elementos de<coleccin>.

En tanto que una tabla se considera que es una coleccin, el siguiente cdigo
muestra cmo usar for para compactar an ms el cdigo dela clase HolaMundo For
anterior:
foreach(String arg in args)
Console.WriteLine(Hola {0}!, arg);
Para saber ms: https://msdn.microsoft.com/es-mx/library/e240yzs4(v=vs.90).aspx

III.V Encapsulamiento
La encapsulacin, que es un mecanismo que permite a los diseadores de
tipos de datos determinar qu miembros de los tipos creen pueden ser utilizados por
otros programadores y cules no. Las principales ventajas que ello aporta son:
o Se facilita a los programadores que vaya a usar el tipo de dato (programadores
clientes) el aprendizaje de cmo trabajar con l, pues se le pueden ocultar todos
los detalles relativos a su implementacin interna y slo dejarle visibles aquellos
que puedan usar con seguridad. Adems, as se les evita que cometan errores
por manipular inadecuadamente miembros que no deberan tocar.
o Se facilita al creador del tipo la posterior modificacin del mismo, pues si los
programadores clientes no pueden acceder a los miembros no visibles, sus
49

aplicaciones no se vern afectadas si stos cambian o se eliminan. Gracias a


esto es posible crear inicialmente tipos de datos con un diseo sencillo aunque
poco eficiente, y si posteriormente es necesario modificarlos para aumentar su
eficiencia, ello puede hacerse sin afectar al cdigo escrito en base a la no
mejorada de tipo.
La encapsulacin se consigue aadiendo modificadores de acceso en las
definiciones de miembros y tipos de datos.

Los modificadores son partculas que se les colocan delante para indicar
desde qu cdigos puede accederse a ellos, entendindose por acceder el hecho de
usar su nombre para cualquier cosa que no sea definirlo, como llamarlo si es una
funcin, leer o escribir su valor si es un campo, crear objetos o heredar de l si es
una clase, etc.
o public: Puede ser accedido desde cualquier cdigo.
o protected: Desde una clase slo puede accederse a miembros protected de
objetos de esa misma clase o de subclases suyas.
o private: Slo puede ser accedido desde el cdigo de la clase a la que
pertenece. Es lo considerado por defecto.
Public
La palabra clave Public de la instruccin de declaracin especifica que se
puede tener acceso a los elementos desde el cdigo en cualquier parte del mismo
proyecto, desde otros proyectos que hagan referencia al proyecto y desde un
ensamblado compilado a partir del proyecto. El cdigo siguiente muestra un ejemplo
de declaracin Public.
Public Class classForEverybody
Puede utilizar Public solamente en el nivel de mdulo, interfaz o espacio de
nombres.

50

espacio de nombres o dentro de una interfaz, mdulo, clase o estructura, pero no


dentro de un procedimiento.
Protected
La palabra clave Protected de la instruccin de declaracin especifica que
slo se puede tener acceso a los elementos desde dentro de la misma clase o desde
una clase derivada de ella. El cdigo siguiente muestra un ejemplo de declaracin
Protected.
Protected Class classForMyHeirs
Slo puede usar Protected en el nivel de clase y slo al declarar un miembro
de una clase. Es decir, puede declarar un elemento protegido en una clase, pero no
en el nivel de archivo de cdigo fuente o espacio de nombres, o dentro de una
interfaz, mdulo, estructura o procedimiento.
Private
La palabra clave Private de la instruccin de declaracin especifica que slo
se puede tener acceso a los elementos desde dentro del mismo mdulo, clase o
estructura. El cdigo siguiente muestra un ejemplo de declaracin Private.
Private numberForMeOnly As Integer
Slo puede utilizar Private en el nivel de mdulo. Es decir, puede declarar un
elemento privado dentro de un mdulo, clase o estructura, pero no en el nivel de
archivo de cdigo fuente o espacio de nombres, dentro de una interfaz o un
procedimiento.
En el nivel de mdulo, la instruccin Dim sin ninguna palabra clave de nivel de
acceso es equivalente a una declaracin Private. No obstante, podra convenirle
usar la palabra clave Private para facilitar la lectura y la interpretacin del cdigo.
Para saber ms: https://msdn.microsoft.com/es-es/library/76453kax.aspx

III.VI Herencia
51

El mecanismo de herencia es uno de los pilares fundamentales en los que se


basa la programacin orientada a objetos. Es un mecanismo que permite definir
nuevas clases a partir de otras ya definidas de modo que si en la definicin de una
clase indicamos que sta deriva de otra, entonces la primera -a la que se le suele
llamar clase hija ser tratada por el compilador automticamente comosi su
definicin incluyese la definicin de la segunda a la que se le suele llamar clase
padre o clase base. Las clases que derivan de otras se definen usando la siguiente
sintaxis:
class <nombreHija>:<nombrePadre>
{
<miembrosHija>
}

A la hora de escribir el constructor de esta clase ha sido necesario escribirlo


con una sintaxis especial consistente en preceder la llave de apertura del cuerpo del
mtodo de una estructura de la forma:
: base(<parametrosBase>)

A los miembros definidos en <miembrosHijas> se le aadirn los que


hubisemos definido en la clase padre. Por ejemplo:
class Persona
{
public string Nombre;
public Persona (string nombre){ //Constructor de la clase persona
Nombre = nombre;
}
class Trabajador: Persona
{
public int Sueldo;
52

Trabajador(string nombre, int sueldo): base(nombre)


{
Sueldo = sueldo;
}
}
En el ejemplo anterior la clase Trabajador hereda de la clase Persona el
atributo Nombre y al utilizar el constructor del trabajador este recibe los parmetros
de nombre y sueldo; el parmetro nombre corresponde al constructor base que en
este caso pertenece a la clase Persona.
o Mtodos virtuales
Es posible definir clases cuyos mtodos se hereden a otras clases (Herencia).
Adems es posible cambiar dicha definicin en la clase hija, para lo que habra que
haber precedido con la palabra reservada virtual la definicin de dicho mtodo en la
clase padre. A este tipo de mtodos se les llama mtodos virtuales, y la sintaxis que
se usa para definirlos es la siguiente:
virtual <tipoDevuelto> <nombreMtodo>(<parmetros>)
{
<cdigo>
}
Si en alguna clase hija quisisemos dar una nueva definicin del <cdigo> del
mtodo, simplemente lo volveramos a definir en la misma pero sustituyendo en su
definicin la palabra reservada virtual por override. Es decir, usaramos esta
sintaxis:
override <tipoDevuelto> <nombreMtodo>(<parmetros>)
{
<nuevoCdigo>
}
o Clases abstractas

53

Una clase abstracta es aquella que forzosamente se ha de derivar si se desea que


se puedan crear objetos de la misma o acceder a sus miembros estticos. Para
definir una clase abstracta se antepone abstract a su definicin. Ejemplo:
public abstract class A {
}
public class B: A {
public void metodo()
}

III.VII Polimorfismo
El polimorfismo suele considerarse el tercer pilar de la programacin
orientada a objetos, despus de la encapsulacin y la herencia. Polimorfismo es una
palabra griega que significa "con muchas formas" y tiene dos aspectos diferentes:
o En tiempo de ejecucin, los objetos de una clase derivada pueden ser tratados
como objetos de una clase base en lugares como parmetros de mtodos y
colecciones o matrices. Cuando ocurre, el tipo declarado del objeto ya no es
idntico a su tipo en tiempo de ejecucin.
o Las clases base pueden definir e implementar mtodos virtuales, y las clases
derivadas pueden invalidarlos, lo que significa que pueden proporcionar su propia
definicin e implementacin. En tiempo de ejecucin, cuando el cdigo de cliente
llama al mtodo, CLR busca el tipo en tiempo de ejecucin del objeto e invoca
esa invalidacin del mtodo virtual. Por lo tanto, en el cdigo fuente puede llamar
a un mtodo en una clase base y hacer que se ejecute una versin del mtodo
de la clase derivada.
Es la habilidad que poseen los objetos para reaccionar de modo diferente
ante los mismos mensajes
54

El polimorfismo se refiere a la posibilidad de definir mltiples clases con


funcionalidad diferente, pero con mtodos o propiedades denominados de forma
idntica, que pueden utilizarse de manera intercambiable mediante cdigo cliente en
tiempo de ejecucin.
Para saber ms: https://msdn.microsoft.com/es-es/library/ms173152.aspx

Sobrecarga
La sobrecarga representa diferentes maneras de realizar una misma
accin, en los programas se usa el mismo nombre en diferentes mtodos con
diferentes firmas [nmero, orden y tipo de los parmetros], el

cdigo

de

programacin asociado a cada sobrecarga puede variar.


Ejemplos:
miEmpleado.Contratar(Juan, Ventas, 2500);
miEmpleado.Contratar(Juan);
miEmpleado.Contratar(Juan, 2500);
Sobreescritura [ Overriding ]
Sucede cuando una clase B hereda caractersticas de una clase A, pero la
clase B re-define las caractersticas heredadas de A, propiedades y mtodos
pueden heredarse de una superclase. Si estas propiedades y mtodos son redefinidos en la clase derivada, se dice que han sido Sobreescritos.

55

Ejemplo:
Clase Transporte
public class Transporte
{
public int velocidadMaxima = 0;
public int pasajeros = 0;

public virtual void Camina()


{
Console.WriteLine("metodo llamado desde transporte");
}
}

Clase Auto
public class Auto : Transporte
{
public int puertas = 0;
public Auto(int pasajeros,int velocidadMaxima,int numeroLlantas, int puertas)
{
this.pasajeros = pasajeros;
this.velocidadMaxima = velocidadMaxima;
this.puertas = puertas;
}
public override void Camina()
{
56

Console.WriteLine("Metodo llamado desde clase Auto");


}
}
Para utilizar la sobreescritura debemos definir el mtodo del padre con la palabra
virtual o abstract, y esto permitir que podamos remplazarlo por medio del hijo. Para
remplazarlo en el hijo utilizamos la palabra reservada override, y con eso se
remplaza el mtodo, y cuando utilicemos la funcin utilizaremos la del Hijo.
Nota: cuando utilizamos abstract nos referimos a un mtodo abstracto, el cual no
puede ser utilizado, en cambio virtual si puede ser utilizado.

UNIDAD IV. Arreglos.


IV.I Definicin de arreglos
Un arreglo es un grupo de variables (llamadas elementos) que contienen
valores y todos son del mismo tipo. Los tipos se dividen en dos categoras: por valor
y por referencia. Los arreglos son tipos por referencia. Los elementos de un arreglo
pueden ser tipos por valor o tipos por referencia. Para referirnos a un elemento en
especial en un arreglo, especificamos el nombre de la referencia al arreglo y el
nmero de la posicin de ese elemento en el arreglo. Al nmero de la posicin se le
conoce como el ndice del elemento
. En la siguiente figura se muestra una representacin lgica de un arreglo
tipo entero llamado c, que contiene 12 elementos.

57

Un ndice debe ser un entero no negativo; tambin puede ser una expresin. Por
ejemplo, si asumimos que la variable a es igual a 5 y b es igual a 6, entonces la
instruccin
c[ a + b ] += 2;
suma 2 al elemento c[ 11 ] del arreglo.

IV.I Manejo de arreglos


Declaracin y creacin de arreglos
Las instancias de los arreglos ocupan espacio en memoria. Al igual que los
objetos, los arreglos se crean con la palabra clave new. Para crear una instancia de
un arreglo, se especifica el tipo y el nmero de elementos del arreglo, y el nmero de
elementos como parte de una expresin de creacin de arreglos que utiliza la
palabra clave new. Dicha expresin devuelve una referencia que puede almacenarse
en una variable tipo arreglo. La siguiente expresin de declaracin y creacin de
arreglos crea un objeto arreglo que contiene 12 elementos int, y almacena la
referencia al arreglo en la variable c:
int[ ] c = new int[ 12 ];

58

Esta tarea tambin puede llevarse a cabo en dos pasos, como se muestra a
continuacin:
int[ ] c; // declara la variable tipo arreglo
c = new int[ 12 ]; // crea el arreglo; lo asigna a la variable tipo arreglo
Arreglos unidimensionales:
int[ ] numbers;
Arreglos multidimensionales:
string[ , ] names;
Arreglos de arreglos (escalonadas):
byte[ ][ ] scores;
En C#, los arreglos son objetos (se explica ms adelante en este tutorial)
cuyas instancias deben crearse. Los siguientes ejemplos muestran cmo crear
arreglos:
Arreglos unidimensionales:
int[] numbers = new int[5];
Arreglos multidimensionales:
string[,] names = new string[5,4];
Inicializar arreglos
C# proporciona mtodos simples y sencillos para inicializar arreglos en el
momento de la declaracin encerrando los valores iniciales entre llaves ({}). Los
siguientes ejemplos muestran diferentes modos de inicializar diferentes tipos de
arreglos.
Nota

Si no inicializa una matriz en el momento de la declaracin, sus

miembros se inicializan automticamente con el valor inicial predeterminado para el

59

tipo de arreglo. Adems, si declara un arreglo como campo de un tipo, se


establecer con el valor predeterminado null cuando cree la instancia del tipo.
o Arreglos unidimensionales
int[] numbers = new int[5] {1, 2, 3, 4, 5};
string[] names = new string[3] {"Matt", "Joanne", "Robert"};
El tamao de la matriz se puede omitir, como se indica a continuacin:
int[] numbers = new int[] {1, 2, 3, 4, 5};
string[] names = new string[] {"Matt", "Joanne", "Robert"};
Tambin se puede omitir el operador new si se utiliza un inicializador como el
siguiente:
int[] numbers = {1, 2, 3, 4, 5};
string[] names = {"Matt", "Joanne", "Robert"};
o Matrices multidimensionales
int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} };

El tamao de la matriz se puede omitir, como se indica a continuacin:


int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} };
Tambin se puede omitir el operador new si se utiliza un inicializador como el
siguiente:
int[,] numbers = { {1, 2}, {3, 4}, {5, 6} };
string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} };

60

o Matriz escalonada (matriz de matrices)


Las matrices escalonadas se pueden inicializar como en el siguiente ejemplo:
int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
El tamao de la primera matriz se puede omitir, como se indica a continuacin:
int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
O bien
int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} };
Acceso a miembros de arreglos
El acceso a los miembros de un arreglo es sencillo y similar al de los
miembros de una arreglo de C o C++. Por ejemplo, el siguiente cdigo crea una
matriz denominada numbers y, a continuacin, asigna un 5 al quinto elemento de la
matriz:
int[] numbers = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
numbers[4] = 5;
El siguiente cdigo declara una matriz multidimensional y asigna el valor 5 al
miembro ubicado en [1, 1]:
class Program
int[,] numbers = { {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10} };
{
numbers[1, 1] = 5;
static void Main(string[] args)
Arreglo de objetos

CD[ ] cdLibrary = new CD[20];


La creacin de un arreglo de objetos, en lugar de un arreglo de tipos de datos
for de
(intdos
i=0;partes.
i<20; i++)
simples como enteros, es un proceso que consta
En primer lugar, se
{ objetos almacenados en el arreglo.
declara el arreglo y, despus, se deben crear los
= newA CD();
En este ejemplo se crea una clase que define uncdLibrary[i]
CD de audio.
continuacin se
crea un arreglo que almacena 20 CDs de audio.}
cdLibrary[0].Album = "See";

class CD

cdLibrary[0].Artist = "The Sharp Band";


61 }
}

{
private string album;
private string artist;
public string Album
{
get {return album;}
set {album = value;}
}
public string Artist
{
get {return artist;}
set {artist = value;}
}
}

UNIDAD V. Manejo de excepciones


V.I Concepto y tipos de excepciones.
Las excepciones se utilizan para indicar que se ha producido un error
mientras el programa est en ejecucin. Los objetos de excepcin que describen un
error se crean y, a continuacin, se producen con la palabra clave throw. El motor de
ejecucin busca el controlador de excepciones ms compatible.

62

Los programadores deberan iniciar excepciones cuando se cumpla al menos


una de las siguientes condiciones:

El mtodo no puede finalizar su funcionalidad definida.


Se realiza una llamada inadecuada a un objeto, basada en el estado del objeto.
Cuando un argumento para un mtodo provoca una excepcin

Excepciones predefinidas comunes


En el espacio de nombres System de la BCL hay predefinidas mltiples excepciones
derivadas de System.Exception que se corresponden con los errores ms comunes
que pueden surgir durante la ejecucin de una aplicacin. A continuacin se
muestran algunas:

ArgumentException. Pasado argumento no vlido (base de excepciones de

argumentos)
ArgumentNullException. Pasado argumento nulo
ArgumentOutOfRangeException. Pasado argumento fuera de rango
ArrayTypeMistmatchException. Asignacin a tabla de elemento que no es de

su tipo
COMException Excepcin de objeto COM
DivideByZeroException Divisin por cero
IndexOutOfRangeException ndice de acceso a elemento de tabla fuera del

rango vlido (menor que cero o mayor que el tamao de la tabla)


InvalidCastException Conversin explcita entre tipos no vlida
InvalidOperationException Operacin invlida en estado actual del objeto
InteropException. Base de excepciones producidas en comunicacin con

cdigo inseguro
NullReferenceException Acceso a miembro de objeto que vale null
OverflowException Desbordamiento dentro de contexto donde se ha de
comprobar los desbordamientos (expresin constante, instruccin checked,

operancin checked u opcin del compilador /checked)


OutOfMemoryException. Falta de memoria para crear un objeto con new
SEHException. Excepcin SHE del API Win32
StackOverflowException. Desbordamiento de la pila, generalmente debido a
un excesivo nmero de llamadas recurrentes.

63

TypeInizializationException. Ha ocurrido alguna excepcin al inicializar los


campos estticos o el constructor esttico de un tipo. En InnerException se
indica cul es.

V.II Manejo de excepciones.


Los programadores de C# usan bloques try para separar el cdigo al que
puede afectar una excepcin. Los bloques catch asociados se utilizan para controlar
las excepciones resultantes. Un bloque finally contiene cdigo que se ejecuta con
independencia de que se produzca o no una excepcin en el bloque try, como liberar
recursos asignados en el bloque try.
En los ejemplos siguientes se muestra una instruccin try-catch, una
instruccin try-finally y una instruccin try-catch-finally.
try
{
// Cdigo para tratar va aqu.
}
catch (SomeSpecificException ex)
{
// Cdigo para manejar la excepcin va aqu.
}

try
{
// Cdigo para tratar va aqu.
}
finally
{
// Cdigo que se ejecuta despus de que el bloque try va aqu.
}
try
{
// Cdigo para tratar va aqu.
}
catch (SomeSpecificException ex)
{
64

// Cdigo para manejar la excepcin va aqu.


}
finally
{
// Cdigo que se ejecuta despus de que el intento (y posiblemente la
captura)
// bloques. Aqu va.
}
Un bloque try sin un bloque catch o finally produce un error del compilador.
V.III Creacin y lanzamiento de excepciones.
Una vez lanzada una excepcin es posible escribir cdigo que es encargue de
tratarla. Por defecto, si este cdigo no se escribe la excepcin provoca que la
aplicacin aborte mostrando un mensaje de error.
Si se desea tratar la excepcin hay que encerrar la divisin dentro de una
instruccin try.
Bloques Catch
Un bloque catch puede especificar el tipo de excepcin que se detectar. La
especificacin de tipo se denomina filtro de excepcin. El tipo de excepcin debe
derivarse de Exception. En general, no especifique Exception como filtro de
excepcin a menos que sepa cmo controlar todas las excepciones que puedan
producirse en el bloque try o bien haya incluido una instruccin throw al final del
bloque catch.
Se pueden encadenar varios bloques catch con filtros de excepcin
diferentes. Los bloques catch se evalan de arriba abajo en el cdigo, pero solo se
ejecuta un bloque catch para cada excepcin iniciada. Se ejecutar el primer bloque
catch que especifica el tipo exacto o una clase base de la excepcin que se haya
producido. Si ningn bloque catch especifica un filtro coincidente de la excepcin, un
bloque catch que no tiene un filtro se selecciona, si hay alguno presente en la
instruccin.
Debera detectar excepciones cuando se cumplen las condiciones siguientes:
65

Comprende claramente por qu puede producirse la excepcin y puede


implementar una recuperacin concreta, como pedir al usuario que escriba un

nuevo nombre de archivo cuando se detecta un objeto FileNotFoundException.


Pueda crear y producir una excepcin nueva ms especfica.

int GetInt(int[] array, int index)


{
try
{
return array[index];
}
catch(System.IndexOutOfRangeException e)
{
throw new System.ArgumentOutOfRangeException("Parameter index is out of
range.");
}
}

Desea controlar parcialmente una excepcin antes de pasarla para realizar un


control adicional.

try
{
// Try to access a resource.
}
catch (System.UnauthorizedAccessException e)
{
// Call a custom error logging procedure.
LogError(e);
// Re-throw the error.
throw;
}
Bloques Finally
Un bloque finally permite limpiar las acciones que se realizan en un bloque try.
Si est presente, el bloque finally se ejecuta en ltimo lugar, despus del bloque try y
cualquier bloque catch coincidente. Un bloque finally se ejecuta siempre, sin tener en
cuenta si se produce una excepcin o si se encuentra un bloque catch que coincida
con el tipo de excepcin.
El bloque finally se puede utilizar para liberar recursos como secuencias de
archivos, conexiones de base de datos y controladores de grficos sin esperar a que
66

el recolector de elementos no utilizados del motor en tiempo de ejecucin finalice los


objetos. Para obtener ms informacin, consulte using (Instruccin, Referencia de
C#).
En el ejemplo siguiente, el bloque finally se usa para cerrar un archivo que se
abre en el bloque try. Observe que se comprueba el estado del identificador del
archivo antes de cerrarlo. Si el bloque try no puede abrir el archivo, el identificador
de archivos seguir teniendo el valor null y el bloque finally no intenta cerrarlo. Como
alternativa, si el archivo se abre correctamente en el bloque try, el bloque finally
cierra el archivo abierto.
System.IO.FileStream file = null;
System.IO.FileInfo fileinfo = new System.IO.FileInfo("C:\\file.txt");
try
{
file = fileinfo.OpenWrite();
file.WriteByte(0xF);
}
finally
{
// Check for null because OpenWrite might have failed.
if (file != null)
{
file.Close();
}
}
Para saber ms:
https://msdn.microsoft.com/es-es/library/ms173162%28v=vs.120%29.aspx
DESARROLLO DE PRCTICAS
Ver directorio Protocolo de prcticas programacin

67

DESARROLLO DE PRCTICAS
ver archivo protocolo de prcticas programacin

68

INSTRUMENTOS DE EVALUACIN
LISTA DE COTEJO PARA EJERCICIOS

DATOS GENERALES DEL PROCESO DE EVALUACIN


Nombre(s) del alumno(s) y/o Equipo:

Firma del alumno(s):

Producto:

Nombre o tema de la
Tarea:

Fecha:

Asignatura

Grupo:

Periodo cuatrimestral:

69

Nombre del Docente:

Firma del Docente:

INSTRUCCIONES
Revisar las caractersticas que se solicitan y califique en la columna Valor Obtenido el valor
asignado con respecto al Valor del Reactivo. En la columna OBSERVACIONES haga las
indicaciones que puedan ayudar al alumno a saber cules son las condiciones no cumplidas.
Valor del Reactivo

5%
5%

Valor
Obtenido

Caracterstica a cumplir (Reactivo)

15%

Buena Presentacin
No tiene faltas de ortografa
Desarrollo
Diseo de solucin. Cumple

30%

especificaciones del modelo orientado a objetos


Codificacin. Presenta un cdigo en el lenguaje

25%

de programacin orientada a objetos sin errores.


Desarrollo. Sustenta todos los pasos aplicados

con

Observaciones

las

para la solucin de las prcticas utilizando


operaciones con estructuras de secuencia,
10%

seleccin e iteracin.
Resultados. Cumpli totalmente con el objetivo

10%
100%

esperados
Responsabilidad. Entrega su ejercicio a tiempo
CALIFICACIN

RUBRICA PARA EJERCICIOS

DATOS GENERALES DEL PROCESO DE EVALUACIN


Nombre(s) del alumno(s) y/o Equipo:

Firma del alumno(s):

Producto:

Nombre o tema de la
Tarea:

Fecha:

Asignatura

Grupo:

Periodo cuatrimestral:

Nombre del Docente:

Firma del Docente:

70

Criterios

4. Excelente (20)

Razonamiento

Usa pensamiento
completo
y
refinado.
Demuestra
un
anlisis profundo
del tema.
Demuestra una
comprensin
total del tema.

Anlisis del tema.

Comprensin del
tema.

Aplicacin de
procedimiento y
resolucin
correcta de los
ejercicios.
Entrega en tiempo
y forma

La resolucin de
los ejercicios es
correcta y clara.

Entrega
sus
ejercicios
en
tiempo y forma
establecidos

Nivel.
3. Satisfactorio
2. Puede
(15)
Mejorar (10)
Usa pensamiento Algunas
efectivo.
evidencias
de
pensamiento
Demuestra
el Un anlisis con
anlisis correcto errores.
del tema.
Demuestra una Demuestra una
comprensin
comprensin del
aceptable
del tema con errores.
tema.
La resolucin de La resolucin de
los ejercicios es los
ejercicios
la adecuada.
presenta
deficiencias.
Entrega
sus
ejercicios
ligeramente
inadecuados en
tiempo y forma

Entrega
sus
ejercicios
posteriormente

1. Inadecuado
(0)
No
presenta
ningn tipo de
razonamiento
No
presenta
ningn tipo de
anlisis.
No
demuestra
ningn tipo de
comprensin del
tema.
Una
resolucin
incorrecta de los
ejercicios.

No entrega sus
ejercicios ni en
tiempo ni en
forma

Puntaje Obtenido en base a la rbrica:

BIBLIOGRAFA
Baltarsar Garcia. Metodologa de la Programacin (2008). Prentice Hall
Harvey J Deitel y Paul J. Deitel.C# Cmo Programar (2007). Deitel

71

Você também pode gostar