Está en la página 1de 45

Sesión 1.4.

C#-Programación Orientada a Objetos


Versión 1.0

Curso de Enseñanzas Propias “Lenguaje de Programación C#”


Curso 2008/09

Ignacio García, Ismael Caballero


{Ignacio.GRodriguez, Ismael.Caballero}@uclm.es
Universidad de Castilla La Mancha
Sesión 1.4.
Contenidos

1. POO con C #
2. Algunas Clases útiles.
3. Gestión de Errores y Excepciones
4. El proyecto de Hoy

2
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Relación entre Estructura y Clase
•Relación entre Estructura y Clase
 Una estructura define un valor
• Sin identidad, estado accesible, sin comportamiento añadido
 Una clase define un objeto
• Identidad, estado inaccesible, comportamiento añadido
• Los objetos representan mejor el mundo real, mientras que las
estructuras permiten representar simplemente agrupaciones
heterogéneas de datos.

Class Struct
Tipo Por Referencia Tipo Por Valor
Puede heredar de otras
No permite la herencia
clases
Puede tener un
No destructor
destructor
Puede tener
No puede tener constructores
constructores
sobrecargados
sobrecargados

3
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Relación entre Clase y Objeto

• Relación entre Clase y Objeto


 Una clase como generalización para el modelado
de las características de una colección de
individuos de la realidad
• Clase como plantilla
• El papel de las ontologías…
 Un objeto como instancia de una clase
• Cogiendo sólo lo que interesa al dominio del
problema…
•Los objetos tienen Estado
 Definido por el valor de sus atributos
 El comportamiento permite cambiar el estado de un objeto
• Cambio de Estado  Cambio en el valor de al menos un
atributo

4
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Creación de Clases y Objetos

• Creación de Clases y Objetos


Campo
public
publicclass
classPersona
Persona
{{
private
privatestring
stringnombre;
nombre; Propiedad
public
publicstring
stringNombre
Nombre (asociada al
{{ campo)
get
get{{return
returnnombre;
nombre;}}
set
set{{nombre
nombre==value;
value;}} Método (en este
}}
caso sobrecarga
public
publicPersona
Persona(string
(stringsNombre){
sNombre){ de constructor)
this.Nombre
this.Nombre(sNombre);
(sNombre);
}}
}}

Persona
Persona Yo
Yo == new
new Persona(“
Persona(““Ismael”
Persona(
Persona(“ Ismael””);
Ismael
Ismael” );

Puntero/Referencia Reserva de Inicialización del


a Objeto de la Clase Memoria para el Estado del
Persona objeto Objeto
5
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Creación de Clases y Objetos (II)

• Dos referencias pueden apuntar a un mismo


objeto
 Dos formas de acceder a un mismo objeto para
lectura/escritura
Un objeto vive mientras tenga
algun referencia apuntándole

yo ••
Objeto
Objeto con
con datos
datos sobre
sobre Ismael
Ismael
profesor ••
• Comparación de tipos valor
 == and != comparan valores
• Comparación de tipos referencia
 == and != comparan las referencias, no los valores

6
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Creación de Clases y Objetos (III)

• Sobre los Campos (“Atributos”)


 Normales / regulares o “Variables”
• Pueden almacenar referencias a un objeto, a una estructura
o a una matriz de clases o estructuras
 Constantes
• Es un miembro de adtos que es evaluado en tiempo de
compilación y es implícitamente estático
– e.g. Math.PI
– public const string version = “1.0.0”;
 Sólo-Lectura
• Son similares a las constantes, pero son inicializadas en
tiempo de ejecución en su declaración o en un constructor, y
ya su valor no cambia durante toda la ejecución del
programa.
• Pueden ser de clase o de instancia
– public readonly string s1;

7
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Creación de Clases y Objetos (IV)
• Sobre Los Métodos
Puede ser necesario
 Tipos sobrecargarlos
• Constructores / Destructores
– Inicializan el estado de un objeto / Especifican que hay que hacer cuando
ya no se tienen referencias al objeto
• De Acceso a Datos
– ~ setXXX/getXXX  Propiedades en C#
• De Lógica de Dominio
– Implementan las operaciones típicas del dominio
 Aspectos Específicos
• Se puede sobrecargar y hay que especificar si se pueden/deben
sobre-escribir
– Hay que especificar si son virtuales (para definir la existencia un
comportamiento en clases bases) o no virtuales (para especificar cómo
se realiza un comportamiento en clases derivadas)
– Los virtuales pueden contener una especificación por defecto, o ninguna
y entonces ser abstractos (definidos en una clase abstracta)
– Los no-virtuales no pueden ser abstractos ni sirven para implementar el
polimofismo

8
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Creación de Clases y Objetos (V)

public
publicclass
classPersona
Persona
{{
private
privatestring
stringnombre;
nombre;
public
public int Nombre{{
int Nombre
get
get{{return
returnnombre;
nombre;}}
set
set{{ifif(nombre
(nombre!=
!=NULL)
NULL)nombre
nombre==value;
value;
else
elsethrow
thrownew
newNombreInvalidoException();
NombreInvalidoException();}}
}}

private
privatestring
stringapellido1;
apellido1; Usamos la propiedad y
no los campos.
public string Apellido1;; {{
public string Apellido1
get
get{{return
returnthis.apellido1;
this.apellido1;}}
set
set{{this.apellido1=
this.apellido1=value;
value;}}
}}

public
publicPersona
Persona(string
(stringsNombre,
sNombre,string
stringsApellido1){
sApellido1){
this.Nombre = sNombre;
this.Nombre = sNombre;
this.Apellido1=
this.Apellido1=sApellido1;
sApellido1;
}}
public
publicPersona
Persona(string
(stringsNombre):
sNombre):this
this(sNombre,
(sNombre,“”)
“”){{}}
}}
9
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Metáfora de POO

• Imaginemos una obra de teatro…


 …personajes ~ clases
 …papeles ~ objetos
 ...actos ~ métodos
 ...obra ~ programa de orientación a objetos
 …representación ~ ejecución
 …escenario ~ entorno de ejecución
• Idea:
 Tiempo de Diseño: Identificar a los
personajes (clases) y establecer un guión
para que interactúen

10
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Miembros de Clases

•Miembros en Java: atributos y métodos


•Miembros en C#:
 Campos
• Como los atributos en Java. Los campos son instancias de objetos que
se consideran parte de una clase y que normalmente contienen datos de
la clase. Por ejemplo, una clase de calendario puede tener un campo
con la fecha actual.
 Propiedades
• Una implementación de la encapsulación
 Métodos
• Los métodos definen las acciones que una clase puede realizar. El
método puede aceptar parámetros que proporcionan datos de entrada y
puede devolver datos de salida a través de parámetros.
 Eventos
• Los eventos son una manera de proporcionar a otros objetos
notificaciones sobre lo que ocurre, como clics en botones o la
realización correcta de un método. Los eventos se definen y
desencadenan mediante delegados.

11
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Miembros de Clases

 Indizadores
• Los indizadores permiten indizar un objeto de una manera
similar a como se hace con las matrices.
 Constructores
• Se utilizan para inicializar el estado de un nuevo objeto.
 Destructores
• Los destructores son métodos a los que llama el motor de
ejecución cuando el objeto está a punto de quitarse de la
memoria. Generalmente se utilizan para asegurarse de que
los recursos que se tienen que liberar se controlan
apropiadamente.
 Tipos Anidados
• Los tipos anidados son tipos declarados dentro de una clase
o estructura. Los tipos anidados se utilizan a menudo para
describir objetos únicamente utilizados por los tipos que los
contienen.

12
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Miembros estáticos vs miembros de instancia

• Los campos de instancia describen información para objetos


concretos, mientras que los campos estáticos describen
información para todos los objetos de una clase.
• Por defecto los miembros son de instancia
 Cada instancia tiene sus propios campos
 Los métodos se aplican sobre los datos de cada instancia
• Los miembros estáticos son por clase
 Los métodos estáticos no pueden acceder a los datos de una
instancia, sólo a los campos estáticos
 No se puede usar la palabra reservada this en los métodos
estáticos
• Los miembros estáticos son funciones y datos globales
 No se deberían utilizar, pues hacen que se pierda el sentido de
la POO en cierto modo

13
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Acceso a Miembros

Para poder usar un objeto antes hay


que crearlo y asignarlo a una
referencia

Persona
Persona Yo
Yo == new
new Persona(“
Persona(““Ismael”
Persona(
Persona(“ Ismael””);
Ismael
Ismael” );

Yo.Apellido1
Yo.Apellido1 == ““Caballero”
Caballero””;;
Caballero
Caballero”

Yo.Apellido2
Yo.Apellido2 ==““Muñ
Muññoz-
Mu
Muñ oz--Reja”
oz
oz- Reja””;;
Reja
Reja”

Yo.CambiarEstado
Yo.CambiarEstado ((““Dormido”
Dormido””);
Dormido
Dormido” );

NombreReferencia.NombreMiembro

14
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Pilares de POO

• Pilares de la OO
 Encapsulamiento
• Ocultar al resto de las clases el estado de un
objeto
– Confiere seguridad
 Herencia
• Poder compartir características y comportamiento
comunes enter clases de la misma familia
– Confiere posibilidad de clasificar y estructurar
 Polimorfismo
• Poder compartir un mismo comportamiento por
clases de distinas famiilas
– Confiere la posibilidad de establecer y adherirse a
contratos (generalizar comportamientos)

15
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Encapsulamiento

•Encapsulamiento
 Son un conjunto de mecanismos para evitar que
cualquier otro objeto modifique el estado de un
objeto. Sólo un método específico (setXXX)
debería tener esta responsabilidad (ni siquiera los
constructores, que deberían invocarlos)
• Se consigue tener un único punto de acceso al valor
del atributo / campo, con lo que siempre se puede
asegurar dónde encontrar las reglas para mantener la
coherencia en el valor del atributo/campo
• Se implementa poniendo los modificadores de acceso
de tal manera que sean coherentes con los principios de
diseño
– Por ejemplo si pongo algo como privado no se puede
heredar

16
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Encapsulamiento (II)

•Modificadores de Acceso

Si el modificador de Entonces se permite el acceso al


acceso es miembro de la clase a
public Todo el mundo

private Solo dentro de clase

Protected A la clase y a los que heredan de ella

Internal A las clases definidas dentro de la clase

protected A las clases y a los que heredan de ella o


internal están en su mismo espacio de nombre

17
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Herencia

•Herencia
 Mecanismos de clasificación
•Tipos De Clases public abstract class SerVivo
 Abstractas
• No puede ser instanciada, porque no tienen sentido
propiamente dicho
• Sirve como base para la herencia
• Puede contener métodos con y sin implementación
• No puede ser final public class Persona : SerVivo
 Regulares
• Son las clases normales que se definen. Pueden heredar (o
extender) de otras clases y a su vez pueden ser base de
heredadas (o ser extendidas)
public sealed class Alumno :
 Selladas (Sealed) o finales Persona
• Son clases que se definen para que no se puedan heredar de
ellas, bien por razones de diseño, bien por seguridad

18
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Herencia (II)

Clase Base

class
class Persona
Persona Clase
{{ Derivada
...
... Clase Base
}}
class
class Alumno
Alumno :: Persona
Persona
{{
...
...
}} El extends de
C#

19
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Herencia (III)
• Seleccionando qué se hereda
 Los miembros heredados con protección están
implícitamente protegidos en la clase derivada
 Los miembros de una clase derivada sólo pueden acceder
a sus miembros heredados con protección
• Redefinición de Métodos y propiedades
 Con la palabra reservada new creo otra versión del
método heredado, ocultando al heredado
public
public class
class BaseC
BaseC {{
public
public int
int x;
x;
public
public void
void Invoke()
Invoke() {{ }}
}}
public
public class
class DerivedC
DerivedC :: BaseC
BaseC
{{
new
new int
int x;
x;
new
new public
public void
void Invoke()
Invoke() {{ }}
}}
20
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Polimorfismo

•Polimorfismo
 Un tipo puede sustituir a su supertipo
• Se pueden tener comportamientos mediante contratos
 Para implementar polimorfismo se escogen los
métodos virtuales, que obligan a que en cada clase
derivada se tengan que sobre-escribir/reemplazar

class Figura {
public virtual void CalcularArea()
CalcularArea() { ... }
}
class Recuadro : Figura {
public override void CalcularArea()
CalcularArea() { ... }
}
class Esfera : Figura {
public override void CalcularArea()
CalcularArea() { ... }
}

21
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Polimorfismo: Interfaces

• Una interfaz es un conjunto bien definido de métodos que


no contiene datos.
•Un interfaz define un contrato, una especificación
 Una interface es un tipo
 Incluye métodos, propiedades, indexadores y eventos
 Cualquier clase o estructrua que implemente una interfaz
debe dar soporte a todas las partes del contrato
•Los Interfaces no proporcionan implementación
 Cuando una clase o una estructura implementa una interfaz
entonces es cuando se debe crear la implementación
específica para dicha clase o estructura
• Los Interfaces dan soporte al polimorfismo
 Muchas clases o estructuras pueden implementar una
misma interfaz
 Esto no se considera herencia múltiple

22
CEP "Lenguaje de Programación C#"- Curso 08/09
1. POO en C#
Polimorfismo: Interfaces (II)

public interface IDelete {


void Delete();
}
public class TextBox : IDelete {
public void Delete() { ... }
}
public class Car : IDelete {
public void Delete() { ... }
}
TextBox tb = new TextBox();
TextBox();
IDelete iDel = tb;
tb;
iDel.Delete();
iDel.Delete();

Car c = new Car();


iDel = c;
iDel.Delete();
iDel.Delete();

23
CEP "Lenguaje de Programación C#"- Curso 08/09
Sesión 1.4
Contenidos

1. POO con C #
2. Algunas Clases útiles.
3. Gestión de Errores y Excepciones
4. El proyecto de hoy

24
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
Principios de Diseño

•Filosofía de Diseño
 Cada Clase debe tener una responsabilidad única
 Se escribirán métodos para satisfacer esa
responsabilidad
 Se seguirá el principio de “Máxima Coherencia y
Mínimo Acoplamiento”

25
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
Modelo de Tres Capas

•Estructura del Software

Ver ejemplo en:


http://www.codeproject.com/KB/tips/ModelViewController.aspx
http://www.codeproject.com/KB/tips/ModelViewController.aspx

26
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
Espacios de Nombres

•Espacios de Nombres
 La palabra clave namespace se utiliza para declarar
un ámbito.
 Este ámbito permite organizar el código y proporciona
una forma de crear tipos globalmente únicos.
 Dos formas de usarse:
• Primero, las clases de .NET Framework utilizan los
espacios de nombres para organizar clases.
• Segundo, declarar sus propios espacios de nombres
permite ayudar a controlar el ámbito de la clase y los
nombres de método en proyectos de programación de
mayor tamaño.
 Incorporar los que sean accesibles con using.
 Se pueden anidar creando estructuras
 Se pueden usar alias.

27
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
Espacios de Nombres (II)

namespace N1 // N1
{
class C1 // N1.C1
{
Una forma de
class C2 // N1.C1.C2 organizar las clases
{ del Modelo de Tres
} Capas
}
namespace N2 // N1.N2
{
class C2 // N1.N2.C2
{
} using N1;
} namespace N3 {
} class D1 {
C1 uC1= new C1 ();
}
}

28
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
La clase System.Console

•Generalidades
 Permite interactuar con la consola
• Lectura: Métodos Read, ReadLine
– Leen siempre una cadena de caracteres. Si se desea otro tipo de
datos, habrá que hacer la conversión mediante XXX.Parse(), que
puede generar excepciones
• Escritura: Métodos Write, WriteLine
– Admite diferentes formatos según la naturaleza de lo que se imprima

Formato Resultado Formato Resultado

d 24/01/09 D 24 de Enero de 2009

c 7.612,94€ f 7612,94

dd 07 ddd lun

29
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
La clase System.Console (II)
class Sample Console.WriteLine("Standard DateTime Format
{ Specifiers");
enum Color {Yellow = 1, Blue, Green}; Console.WriteLine(
static DateTime thisDate = DateTime.Now; "(d) Short date: . . . . . . . {0:d}\n" +
"(D) Long date:. . . . . . . . {0:D}\n" +
public static void Main() "(t) Short time: . . . . . . . {0:t}\n" +
{ "(T) Long time:. . . . . . . . {0:T}\n" +
Console.Clear(); "(f) Full date/short time: . . {0:f}\n" +
"(F) Full date/long time:. . . {0:F}\n" +
// Format a negative integer or floating-point "(g) General date/short time:. {0:g}\n" +
// number in various ways. "(G) General date/long time: . {0:G}\n" +
Console.WriteLine("Standard Numeric Format " (default):. . . . . . . . {0} (default = 'G')\n" +
Specifiers"); "(M) Month:. . . . . . . . . . {0:M}\n" +
Console.WriteLine( "(R) RFC1123:. . . . . . . . . {0:R}\n" +
"(C) Currency: . . . . . . . . {0:C}\n" + "(s) Sortable: . . . . . . . . {0:s}\n" +
"(D) Decimal:. . . . . . . . . {0:D}\n" + "(u) Universal sortable: . . . {0:u} (invariant)\n" +
"(E) Scientific: . . . . . . . {1:E}\n" + "(U) Universal full date/time: {0:U}\n" +
"(F) Fixed point:. . . . . . . {1:F}\n" + "(Y) Year: . . . . . . . . . . {0:Y}\n",
"(G) General:. . . . . . . . . {0:G}\n" + thisDate);
" (default):. . . . . . . . {0} (default = 'G')\n" + Console.WriteLine("Standard Enumeration Format
"(N) Number: . . . . . . . . . {0:N}\n" + Specifiers");
"(P) Percent:. . . . . . . . . {1:P}\n" + Console.WriteLine(
"(R) Round-trip: . . . . . . . {1:R}\n" + "(G) General:. . . . . . . . . {0:G}\n" +
"(X) Hexadecimal:. . . . . . . {0:X}\n", " (default):. . . . . . . . {0} (default = 'G')\n" +
-123, -123.45f); "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
"(D) Decimal number: . . . . . {0:D}\n" +
"(X) Hexadecimal:. . . . . . . {0:X}\n",
Color.Green);
}
}
30
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
La clase string

• La clase string
 Es un tipo por referencia
• No se pueden hacer comparaciones directas!
 Proporciona los siguientes métodos
• bool Contains (string str)
• bool EndsWith (string str)
• int IndexOf(Char ch)
• string [ ] Split (params char [] sep):
– rompe una cadena en varias partes usando sep como
separador
• ToLower()
• ToUpper()
• …

31
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
La clase Math

• Generalidades
 Proporciona muchos métodos estáticos y constantes para
la realización de cálcuos matemáticos
• Math.PI
• double Abs(double x)
• double Ceiling(double x)
• double Cos(double x)
• double Exp(double x)
• double Floor(double x)
• double Log(double x)
• double Pow(double x, double y)
• double Sqrt(double x)
• double Tan(double x)

32
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
La clase Convert

• Generalidades
 Todas las estructuras que representan los tipos básicos
del lenguaje tienen un método TryParse que permite
transformar strings en objetos del tipo correspondiente.

 Pero para transformar entre distintos Tipos se usa Convert


• int ToInt32 (string sValor)
• Int ToString (long value)
• …

33
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
La estructura DateTime

• Uso
 Para manejar fechas y horas
• Algunas Propiedades
 int Day
 int Hour
 int Minute
 DateTime Now
 int Second
 int Year
• Algunos Métodos
 string ToLongDateString() / ToShortDateString ()
 String ToLongTimeString() / ToShortTimeString()
 DateTime Parse()
 …

34
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
Clases Genéricas

• Definición de Clases Genéricas En ocasiones será


necesario restringir
las clases

public
public class
class Contenedor<T>{
Contenedor<T>{
IList<T>
IList<T> list;
list;
public
public Contenedor(){
Contenedor(){ list=
list= new
new List<T>();
List<T>(); }}

public
public void
void Add(params
Add(params T[]
T[] items{
items{
foreach
foreach (T
(T tt in
in items)
items) list.Add(t);
list.Add(t);

public
public void
void Remove
Remove (T
(T item){
item){
list.Remove
list.Remove (item);
(item);
}}

35
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
Clases Genéricas (II)

Libro
Libro B1,
B1, B2;
B2;
Contenedor<Libro>
Contenedor<Libro> MiBiblio;
MiBiblio;
B1=
B1= new
new Libro();
Libro();
B2=
B2= new
new Libro();
Libro();
MiBiblio
MiBiblio == new
new Contenedor<Libro>();
Contenedor<Libro>();
MiBiblio.Add(B1);
MiBiblio.Add(B1);
MiBiblio.Add(B2);
MiBiblio.Add(B2);
MiBiblio.Add(“Harry
MiBiblio.Add(“Harry Potter”);
Potter”);

Disco
Disco D1,
D1, D2;
D2;
Contenedor<Disco>
Contenedor<Disco> MiDisco;
MiDisco;
D1=
D1= new
new Disco();
Disco();
D2=
D2= new
new Disco();
Disco();
MiDisco
MiDisco == new
new Contenedor<Disco>();
Contenedor<Disco>();
MiDisco.Add(D1);
MiDisco.Add(D1);
MiDisco.Add(D2);
MiDisco.Add(D2);

36
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
El espacio System.Collections.Generics

• System.Collections.Generics

Imagen Tomada de “Guia


Guia Estudio
C#”
C#” de R. Corchuelo, 2006

37
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
El espacio System.Collections.Generics (II)

• Interfaz ICollection<T>
 Define los miembros comunesde todas las estructuras de
datos que proporciona .NET
• Propiedades
– int Count
– bool IsReadOnly
• Métodos
– void Add(T obj)
– void Clear ()
– bool Contains (T obj)
– void CopyTo(T[] target, int index)
– bool Remove (T obj)
– …

38
CEP "Lenguaje de Programación C#"- Curso 08/09
2. Algunas Clases Útiles
El espacio System.Collections.Generics (II)

• Interfaz IList<T>
 Colecciones donde la posición es significativa
 Métodos
• int IndexOf(T obj)
• void Insert (int index, T obj)
• void RemoveAt (int index)
• …
• Interfaz IDictionary<T,Q>
 Colección de datos identificados por unas claves que
deben ser únicas
 Métodos
• Void Add(T key, Q value)
• Bool ContainsKey (T key)
• Bool Remove(T Key)
• …

39
CEP "Lenguaje de Programación C#"- Curso 08/09
Sesión 1.4.
Contenidos

1. POO con C #
2. Algunas Clases útiles.
3. Gestión de Errores y Excepciones
4. El proyecto de hoy

40
CEP "Lenguaje de Programación C#"- Curso 08/09
3. Gestión de Errores y Excepciones
Control de Excepciones

Exception
Exception

SystemException
SystemException

OutOfMemoryException
OutOfMemoryException

IOException
IOException
NullReferenceException
NullReferenceException

ApplicationException
ApplicationException

41
CEP "Lenguaje de Programación C#"- Curso 08/09
3. Gestión de Errores y Excepciones
Control de Excepciones

•Control de Excepciones

try {
// Código optimista .
} catch (System.Exception
(System.Exception ex1) {
// Codigo para gestionar la ex1
} catch (System.Exception
(System.Exception ex2) {
// Codigo para gestionar la ex2
}

finally {
// Código final aquí
}

42
CEP "Lenguaje de Programación C#"- Curso 08/09
3. Gestión de Errores y Excepciones
Definir Nuevas Excepciones
public class ValorNoValidoException : Exception {
public ValorNoValidoException () {}
public ValorNoValidoException (string message) {}
public ValorNoValidoException (string message,
System.Exception inner) {}
}

public
publicclass
classPersona
Persona
{{
private
privateint intnombre;
nombre;
public
publicintintNombre
Nombre
{{
get
get{{return
returnnombre;
nombre;}}
set
set{{
ifif(nombre
(nombre!=!=null)
null)nombre
nombre==value;
value;
else
elsethrow
thrownew
newValorNoValidoException();
ValorNoValidoException();
}}
}}
}}
43
CEP "Lenguaje de Programación C#"- Curso 08/09
Sesión 1.4.
Contenidos

1. POO con C #
2. Algunas Clases útiles.
3. Gestión de Errores y Excepciones
4. El proyecto de Hoy

44
CEP "Lenguaje de Programación C#"- Curso 08/09
4. El proyecto de Hoy
Versiones de un programa

• Proyecto de hoy: Versiones de la “Agenda”


 Consiste en la realización de varias versiones de
un programa utilizando características cada vez
más avanzadas del Lenguaje C#.
• V.1. Crear un programa que lea los datos referentes
persona y los imprima por pantalla
• V.2. Crear una estructura para almacenar los datos de
la persona.
• V.3. Crear una clase para almacenar los datos de la
persona. El programa debe proporcionar mecanismos
basados en arquitecturas de tres capas.
• V.4. Crear una matriz de objetos y proporcionar los
mecanismos para la inserción, borrado y actualización
de nuevos contactos en la agenda.
• V.5. Usar una clase de tipo colección para gestionar en
Memoria la lista de alumnos. Usa Clases genéricas.

45
CEP "Lenguaje de Programación C#"- Curso 08/09

También podría gustarte