Professional Documents
Culture Documents
Herencia
Caracterstica de la POO que permite
definir nuevas clases a partir de otras
ya existentes.
Herencia (cont.)
Puede usarse para:
Relaciones del tipo es un
Ejemplo: Un Gerente es un Empleado con
caractersticas propias adicionales.
Herencia
Aparato_Electrodomestico
(Propiedades:
Interruptor, CableElectrico
Mtodos:
Encender, Apagar)
Herendan caractersticas de
Aparato_Electrodomestico
e incorporan las suyas propias.
Lavadora
Propiedades:
(Interruptor, CableElectrico,
PerillaDeCiclosDeLavado, CapacidadDeCarga)
Mtodos:
(Encender, Apagar,
LlenarConAgua, TirarAgua)
Televisin
Propiedades:
(Interruptor, CableElectrico,
BotonDeCanales, BotonDeVolumen)
Mtodos:
(Encender, Apagar,
CambiarVolumen, CambiarCanal)
Uso de la Herencia
Beneficios:
Permte escribir menos cdigo.
Mejora la reusabilidad de los componentes.
Facilita el mantenimiento del sistema completo.
Herencia en C#
En C# solo se permite Herencia simple.
Ejemplo de Herencia en C#
class A
{
}
class B : A
{
}
Ejemplo de herencia
class Persona
{
.
}
class Empleado:Persona
{
.
}
class Administrador:Empleado
{
.
}
class Estudiante:Persona
{
.
}
class Profesor:Empleado
{
.
}
9
Ejercicio
Se deben modelar dos clases con las siguientes
caractersticas:
Automovil
PalaMecanica
CaballosDeFuerza: int
CantidadDePuertas: int
CaballosDeFuerza: int
PesoMaximoDeLevante: int
Arrancar() : void
Detener() : void
Acelerar(int cuanto): void
Arrancar() : void
Detener() : void
MoverPala(string direccion) : void
10
Mal Diseo
(No recomendable)
class Automovil
{
private int cf, cp;
public int CaballosDeFuerza
{
Iguales
get { return cf; }
set { cf = value; }
}
public int CantidadDePuertas
{
get { return cp; }
set { cp = value; }
}
public void Arrancar()
{
Iguales
}
public void Detener()
{
Iguales
}
public void Acelerar(int cuanto)
{
}
}
class PalaMecanica
{
private int cf, pml;
public int CaballosDeFuerza
{
get { return cf; }
set { cf = value; }
}
public int PesoMaximoDeLevante
{
get { return pml; }
set { pml = value; }
}
public void Arrancar()
{
}
public void Detener()
{
}
public void MoverPala(string direccion)
{
}
}
11
Automovil
Superclase
(Clase base)
(Clase padre)
(Clase madre)
Subclases
(Clases derivadas)
(Clases Hijas)
PalaMecanica
CantidadDePuertas : int
PesoMaximoDeLevante : int
12
class Programa
{
static void Main()
{
Automovil unAuto = new Automovil();
unAuto.Arrancar();
unAuto.Acelerar(10);
unAuto.Detener();
PalaMecanica unaPala = new PalaMecanica();
unaPala.Arrancar();
unaPala.MoverPala ("arriba");
unaPala.Detener();
System.Console.ReadLine();
}
}
14
Llamando mtodos de la
clase base
class Vehiculo
{
public void Arrancar()
{
System.Console.WriteLine("....Arrancando....Clase Vehiculo... ");
}
}
class Automovil : Vehiculo
{
public void Acelerar(int cuanto)
{
System.Console.WriteLine("Primero, hay que arrancar");
base.Arrancar();
System.Console.WriteLine("Despues, hay que acelerar...");
System.Console.WriteLine("Acelerando "+ cuanto + " km/hr");
}
}
class Programa
{
static void Main()
{
Automovil miCarro = new Automovil();
miCarro.Acelerar(10);
System.Console.ReadLine();
}
15
}
Secuencia de ejecucin de
constructores en la Herencia
Considerar el siguiente ejemplo Qu salida se obtiene?
class A
{
public A()
{
System.Console.WriteLine(" Constructor de la clase A");
}
}
class B : A
{
public B()
{
System.Console.WriteLine(" Constructor de la clase B");
}
}
class C : B
{
public C()
{
System.Console.WriteLine(" Constructor de la clase C ");
}
}
class programa
{
static void Main()
{
C miObjetoC = new C();
}
}
16
Secuencia de ejecucin de
constructores en la Herencia
Salida del programa
Constructor de la clase A
Constructor de la clase B
Constructor de la clase C
System.Object
A
Al crear una instancia de C,
Primero se ejecuta el constructor de la
clase padre (Que en realidad siempre es
Object), luego el constructor de la clase
A, despus el constructor de la clase
B, y finalmente el constructor de la
clase C
17
class programa
{
static void Main()
{
C miObjetoC = new C();
miObjetoC = null;
GC.Collect();
Console.ReadKey();
}
}
18
19
Invocando constructores de
la clase base
class Punto
{
public int x, y;
public Punto(int puntoX, int puntoY)
{
x = puntoX;
y = puntoY;
}
}
class Circulo : Punto
{
public double r;
public Circulo(int coordX, int coordY, double radio)
:base (coordX, coordY)
{
r = radio;
}
public string ConsultarDatos()
{
return string.Format("X={0} Y={1}
R ={2} ",x,y,r);
}
}
class Programa
{
public static void Main()
{
Circulo c = new Circulo(1, 2, 1);
System.Console.WriteLine(c.ConsultarDatos());
System.Console.ReadLine();
}
}
La salida del
programa es
X=1 Y=2 R =1
20
Evitando la herencia:
Clases sealed
ERROR!
class Persona
{
private string _nombre;
public string Nombre
{
get { return _nombre; }
set { _nombre = value; }
}
}
sealed class Empleado : Persona
{
private string _departamento;
public string Departamento
{
get { return _departamento; }
set { _departamento = value; }
}
}
class EmpleadoTiempoParcial:Empleado
{
private int _horasAsignadas;
public int HorasAsignadas
{
get { return _horasAsignadas; }
set { _horasAsignadas = value; }
}
21
}
Clases parametrizadas o
genricas
Ejemplo: Una empresa y una escuela
desean almacenar la clave y nombre de
sus personas:
Clave: Entero String
Nombre: String
Clases parametrizadas o
genricas (cont.)
Clases iguales
(excepto en el tipo de dato de la clave)
Escuela
Empresa
23
Clases parametrizadas o
genricas (cont.)
Disear una clase parametrizada que
sirva para ambos casos:
24
Codificacin de la clase
parametrizada
class Persona<Tipo> // Clase parametrizada o genrica
{
// Atributos privados
private Tipo clave; // Se define el tipo de dato de la clave
private string nombre;
// Propiedades pblicas
public Tipo Clave // Se define el tipo de dato de la propiedad
{
get { return clave; }
set { clave = value; }
}
public string Nombre
{
get { return nombre; }
set { nombre = value; }
}
}
25
Clases parametrizadas o
genricas (cont.)
// Declaracin y creacin de los objetos
Empleado.Clave = int.Parse(txtClave.Text);
Estudiante.Clave = txtClave.Text;
26
27
Empresa
28
Codificacin de la clase
parametrizada con varios tipos
class Persona<Tipo1, Tipo2> // Clase parametrizada con varios tipos
{
// Atributos privados
private Tipo1 clave;
private Tipo2 grupo;
// Propiedades pblicas
public Tipo1 Clave
{
get { return clave; }
set { clave = value; }
}
public Tipo2 Grupo
{
get { return grupo; }
set { grupo = value; }
}
}
29
Empleado.Clave = int.Parse(txtClave.Text);
Empleado.Grupo = int.Parse(txtGrupo.Text);
Estudiante.Clave = txtClave.Text;
Estudiante.Grupo =char.Parse(txtClave.Text);
30
Clases parametrizadas o
genricas (cont.)
Lecturas complementarias:
http://www.desarrolloweb.com/
articulos/generics-c.html
Captulo 13 (Tipos y mtodos
genricos) del libro
Microsoft C#. Curso de
Programacin. 2. ed
31
Colecciones genricas en C#
Incluidas en el namespace
System.Collection.Generic
Incorporadas a partir del .NET
Framework 2.0
Contiene clases e interfaces que
definen tipos genricos para instanciar
colecciones
Permite modelar estructuras de datos
32
Estructuras de datos en C#
33
34
35
Principales mtodos y
propiedades de la clase
genrica List
Mtodo o propiedad
Uso
Clear
Add
Remove
Contains
Count
Sort
36
Ejemplo de lista
Crear una clase
para modelar
objetos con datos
de empleados
Crear una lista que
almacene muchos
empleados
37
Creacin de un empleado
(nodo de la lista)
Crear un objeto con los datos de un
empleado para agregarlo a la lista
Empleado miEmpleado = new
Empleado();
Insertar un empleado
(agregar un nodo a la lista)
Insertar el empleado en la lista
miEmpresa.Add(miEmpleado);
Crear el dataGridView
dataGridView1.Columns.Add("Nmero", "Nmero");
dataGridView1.Columns.Add("Nombre", "Nombre");
dataGridView1.Columns.Add("Sueldo", "Sueldo");
// Inicializa las propiedades del dataGridView1
dataGridView1.ReadOnly = true;
dataGridView1.AllowUserToAddRows = false;
dataGridView1.AllowUserToDeleteRows = false;
dataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;
41
Iteradores
Es un conjunto de instrucciones que
devuelve una secuencia de valores del
mismo tipo.
Puede invocarse mediante un ciclo
foreach
P.ejem.
foreach(int Dato in X)
{
42
El ciclo foreach
Se utiliza para recorrer los elementos de
una coleccin y obtener la informacin
deseada.
No se debe utilizar para modificar el
contenido de la coleccin.
foreach repite un grupo de instrucciones
incluidas en el cuerpo del ciclo para cada
elemento de una estructura de datos.
43
44
46
El mtodo GetEnumerator()
Sirve para implementar iteradores
El mtodo GetEnumerator()
devuelve un enumerador que recorre en
iteraciones una coleccin.
Lo contiene System.Collections
Se utiliza por medio del ciclo foreach
47
Implementacin de un iterador a
travs del mtodo
GetEnumerator()
El mtodo GetEnumerator()
devuelve una secuencia de valores del
mismo tipo IEnumerator<T>.
Utiliza la instruccin yield return
para devolver cada elemento
Utiliza la instruccin yield break
para finalizar la iteracin (ciclo) cuando
sea necesario.
48
Ejemplo de
GetEnumerator()
public IEnumerator GetEnumerator()
{
if(Arreglo.Tamao == 0)
yield break;
for(i=0; i<Arreglo.Tamao; i++)
yield return Arreglo[i];
}
49
Composicin
Asociacin
Agregacin
50
Grados de dependencia
(cardinalidad o multiplicidad)
Representacin
1
Descripcin de la cardinalidad
Uno y slo uno
1..1
Uno a uno
0..1
Cero uno
M..N
Desde M hasta N
M,N
MN
Cero muchos
0..*
Cero muchos
1..*
Ejemplos
52
Composicin
Define una relacin fuerte entre clases
Se utiliza para modelar un " todo" y sus
" partes " donde
El " todo" no puede existir si no existen sus "
partes"
Las " partes" desaparecen cuando se elimina el
" todo "
53
54
Representacin de la
composicin
Grficamente se representa colocando un
rombo negro en el extremo de la clase
constituida (parte del todo).
55
Composicin
Un objeto puede tener como miembro otro objeto
definido previamente.
Cuando un objeto se encuentra compuesto por otros
objetos, se dice que hay Composicin.
La composicin permite implementar relaciones del
tipo tiene un.
Ejemplo: Un Auto tiene un Motor.
56
Composicin
ProcesosDeUsuario
Impresion
class Impresion
{
public void Imprimir(string Titulo, string mensaje)
{
System.Console.WriteLine(Titulo.ToUpper());
System.Console.WriteLine(mensaje);
}
}
class ProcesosDeUsuario
Composicin
{
private Impresion imp;
public void ImprimirInstrucciones()
{
imp = new Impresion();
imp.Imprimir("Bienvenido", "Presione Enter para continuar");
System.Console.ReadLine();
}
}
57
Relacin 1..1 en
Composicin
58
Implementacin de relacin
1..1 en composicin
class Todo
{
// Atributo (objeto componente del Todo)
private Parte Componente = new Parte();
// Mtodo para insertar un componente
public void Insertar(Parte P) {
Componente = P;
}
// Destructor (elimina el componente)
~Todo() {
Componente = null;
}
59
Representacin de la
relacin 1..1
objetoTodo
Atributos del objetoTodo
objetoParte
Atributos del
objetoParte
Mtodos del
objetoParte
Un objeto de la
clase del todo
tiene dentro un
objeto de la clase
parte
El objetoTodo
tiene un
objetoParte como
atributo
60
Relacin 1..* en
Composicin
61
Implementacin de relacin
1..* en composicin
class Todo
{
// Atributo (lista de componentes del Todo)
private List<Parte> ListaComponentes = new List<Parte>();
62
Representacin de la
relacin 1..*
objetoTodo
Atributos del objetoTodo
objetoParte
objetoParte
objetoParte
Atributos del
objetoParte
Atributos del
objetoParte
Atributos del
objetoParte
Mtodos del
objetoParte
Mtodos del
objetoParte
Mtodos del
objetoParte
Un objeto de
la clase del
todo tiene
dentro una
coleccin de
objetos de la
clase parte
El objetoTodo
tiene una lista
de
objetoParte
como atributo
63
64
Otra forma de
implementacin del iterador
class Todo
{
. . .
. . .
. . .
public IEnumerator<Parte> GetEnumerator()
{
return ListaComponentes.GetEnumerator();
}
}
66
(Es un)
Composicin
Cuando
Se desee incorporar en la clase las variables,
propiedades y mtodos de otra clase.
Se desee especializar una clase (agregando
caractersticas especficas).
Se desee ocultar, o encapsular un objeto bajo
una nueva interfaz.
Un objeto contenga otro objeto.
(Tiene un o unos)
67
Agregacin
Define una relacin donde una clase se
puede formar de otras clases
Sin embargo, la existencia de objetos de
dichas clases es independiente
Se utiliza para modelar un " todo" y sus "
partes " donde
El " todo" se forma agregando sus" partes"
Las " partes" pueden pertenecer a varios " todos "
Si se elimina el " todo" pueden seguir existiendo
68
sus" partes"
Representacin de la
agregacin
Grficamente se representa colocando un
rombo blanco en el extremo de la clase
constituida (parte del todo).
69
var1
var2
var3
var4
var5
70
objetoA .
var1
var2
var3
var4
var5
71
Composicin
Agregacin
Referencias adicionales
http://www.dcc.uchile.cl/~psalinas/uml/mo
delo.html
http://arodm.blogspot.com/2008/09/umlrelaciones-compocicion-agregacion.html
73