Você está na página 1de 42

Programacin Orientada a Objetos con C#

Dr. Ramn V. Roque Hernndez


Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
1
Programacin Orientada
a Objetos en C#
Autor:
Dr. Ramn Roque Hernndez
http://ramonroque.com/Materias/pooTec.htm
ramonroque@yahoo.com
Colaborador:
Ing. Bruno Lpez Takeyas, M.C.
www.itnuevolaredo.edu.mx/takeyas
takeyas@itnuevolaredo.edu.mx
Unidad 3.- Herencia
2
Relaciones entre clases:
Herencia, Composicin
y Agregacin
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
3
4
Herencia
Caracterstica de la POO que permite
definir nuevas clases a partir de otras
ya existentes.
Las clases existentes transmiten sus
caractersticas.
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
5
Herencia (cont.)
Puede usarse para:
Relaciones del tipo es un
Ejemplo: Un Gerente es un Empleado con
caractersticas propias adicionales.
Objetivo: Reutilizacin de cdigo.
6
Herencia
Lavadora
Aparato_Electrodomestico
(Propiedades:
Interruptor, CableElectrico
Mtodos:
Encender, Apagar)
Propiedades:
(Interruptor, CableElectrico,
PerillaDeCiclosDeLavado, CapacidadDeCarga)
Mtodos:
(Encender, Apagar,
LlenarConAgua, TirarAgua)
Propiedades:
(Interruptor, CableElectrico,
BotonDeCanales, BotonDeVolumen)
Mtodos:
(Encender, Apagar,
CambiarVolumen, CambiarCanal)
Televisin
Herendan caractersticas de
Aparato_Electrodomestico
e incorporan las suyas propias.
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
7
so de la Herencia
Beneficios:
Permte escribir menos cdigo.
Mejora la reusabilidad de los componentes.
Facilita el mantenimiento del sistema completo.
Util para un buen diseo del programa.
Un diseo pobre sin herencia implementara las
clases involucradas de manera independiente.
8
Herencia en C#
En C# solo se permite Herencia simple.
Ejemplo de Herencia en C#
class A
{
}
class B : A
{
}
Todos los objetos heredan de System.Object
Indica que B Hereda de A
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!jemplo de "erencia
9
class Persona
{
.
}
class Empleado:Persona
{
.
}
class Estudiante:Persona
{
.
}
class Profesor:Empleado
{
.
}
class Administrador:Empleado
{
.
}
10 10
!jercicio
Se deben modelar dos clases con las siguientes
caractersticas:
Automovil
CaballosDeFuerza: int
CantidadDePuertas: int
Arrancar() : void
Detener() : void
Acelerar(int cuanto): void
PalaMecanica
CaballosDeFuerza: int
PesoMaximoDeLevante: int
Arrancar() : void
Detener() : void
MoverPala(string direccion) : void
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
11 11
#al $ise%o
(&o recomendable)
Modelarlas de manera independiente.
class Automovil
{
private int cf, cp;
public int CaballosDeFuerza
{
get { return cf; }
set { cf = value; }
}
public int CantidadDePuertas
{
get { return cp; }
set { cp = value; }
}
public void Arrancar()
{
}
public void Detener()
{
}
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)
{
}
}
Iguales
Iguales
Iguales
12 12
$ise%o 'sando Herencia
(Recomendado)
Vehiculo
CaballosDeFuerza : int
Arrancar() : void
Detener() : void
Automovil
CantidadDePuertas : int
Acelerar(int cuanto) : void
PalaMecanica
PesoMaximoDeLevante : int
MoverPala(string direccion) : void
Superclase
(Clase base)
(Clase padre)
(Clase madre)
Subclases
(Clases derivadas)
(Clases Hijas)
Herencia
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
13 13
$ise%o de las clases 'sando
"erencia en C#
class Vehiculo
{
private int cf;
public int CaballosDeFuerza
{
get { return cf; }
set { cf = value; }
}
public void Arrancar()
{
}
public void Detener()
{
}
}
class Automovil : Vehiculo
{ private int cp;
public int CantidadDePuertas
{ get { return cp; }
set { cp = value; }
}
public void Acelerar(int cuanto)
{
}
}
class PalaMecanica : Vehiculo
{
private int pml;
public int PesoMaximoDeLevante
{
get { return pml; }
set { pml = value; }
}
public void MoverPala(string direccion)
{
}
}
14 14
&otas sobre el ejemplo(
Todas las variables, mtodos y propiedades que no sean privadas, sern
heredadas.
Los elementos heredados se accesan igual que si estuvieran presentes en
esa clase.
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();
}
}
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
15
)lamando m*todos de la
clase base
Una subclase puede llamar los mtodos de su superclase con
la palabra reservada 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();
}
}
16
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();
}
}
+ec'encia de ejec'cin de
constr'ctores en la Herencia
Considerar el siguiente ejemplo Qu salida se obtiene?
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
17
+ec'encia de ejec'cin de
constr'ctores en la Herencia
Constructor de la clase A
Constructor de la clase B
Constructor de la clase C
Salida del programa
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
System.Object
A
B
C
18
+ec'encia de ejec'cin de los
destr'ctores 'sando "erencia
class A
{ public A()
{ System.Console.WriteLine("Constructor de la clase A");
}
~A()
{ System.Console.WriteLine("Destructor de la clase A");
}
}
class B : A
{ public B()
{ System.Console.WriteLine("Constructor de la clase B");
}
~B()
{ System.Console.WriteLine("Destructor de la clase B");
}
}
class C : B
{ public C()
{ System.Console.WriteLine("Constructor de la clase C ");
}
~C()
{ System.Console.WriteLine("Destructor de la clase C");
}
}
class programa
{
static void Main()
{
C miObjetoC = new C();
miObjetoC = null;
GC.Collect();
Console.ReadKey();
}
}
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
19
+ec'encia de ejec'cin de los
destr'ctores 'sando "erencia
Constructor de la clase A
Constructor de la clase B
Constructor de la clase C
Destructor de la clase C
Destructor de la clase B
Destructor de la clase A
La salida del programa es
Los destructores son
invocados en orden inverso a
los constructores.
20
,n-ocando constr'ctores 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();
}
}
X=1 Y=2 R =1
La salida del
programa es
La palabra reservada base( )
hace referencia a la clase
padre inmediata desde la
cual se invoca.
Entre parntesis se
especifican
los parmetros requeridos.
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
21
!-itando la "erencia:
Clases sealed
Las clases sealed
(selladas) pueden
ser instanciadas
pero NO heredadas.
Se utiliza la palabra
sealed para
indicarlo.
Usar sealed
simultneamente
con abstract
produce un 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; }
}
}
ERROR!
Clases parametri.adas o
gen*ricas
Ejemplo: Una empresa y una escuela
desean almacenar la clave y nombre de
sus personas:
Clave: Entero String
Nombre: String
Pero en la empresa la clave es
numrica entera y en la escuela es una
cadena.
22
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Clases parametri.adas o
gen*ricas (cont.)
Clases iguales
(excepto en el tipo de dato de la clave)
23
Escuela
Empresa
Clases parametri.adas o
gen*ricas (cont.)
Disear una clase parametrizada que
sirva para ambos casos:
24
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Codi/icacin de la clase
parametri.ada
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 #ombre
{
get { return nombre; !
set { nombre " value; !
!
!
25
Clases parametri.adas o
gen*ricas (cont.)
// $eclaraci%n & creaci%n de los ob'etos
Persona<int> (mpleado " ne) Persona<int>*+;
Persona<string> (studiante " ne) Persona<string>*+;
// ,so de los ob'etos
(mpleado-Clave " int-Parse*t.tClave-Te.t+;
(studiante-Clave " t.tClave-Te.t;
26
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Clases parametri.adas con
-arios tipos
Ejemplo: Una empresa y una escuela
desean almacenar la clave y grupo de
sus personas:
Clave: Entero String
Nombre: Entero caracter
27
Clases parametri.adas con
-arios tipos
Clases iguales
(excepto en los tipos de datos)
28
Escuela
Empresa
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Codi/icacin de la clase
parametri.ada con -arios tipos
class Persona<Tipo/0 Tipo1> // Clase parametrizada con varios tipos
{
// Atributos privados
private Tipo/ clave;
private Tipo1 grupo;
// Propiedades pblicas
public Tipo/ Clave
{
get { return clave; !
set { clave " value; !
!
public Tipo1 2rupo
{
get { return grupo; !
set { grupo " value; !
!
!
29
Clases parametri.adas con
-arios tipos (cont.)
// $eclaraci%n & creaci%n de los ob'etos
Persona<int0 int> (mpleado " ne) Persona<int0 int>*+;
Persona<string0 c3ar> (studiante " ne) Persona<string0 c3ar>*+;
// ,so de los ob'etos
(mpleado-Clave " int-Parse*t.tClave-Te.t+;
(mpleado-2rupo " int-Parse*t.t2rupo-Te.t+;
(studiante-Clave " t.tClave-Te.t;
(studiante-2rupo "c3ar-Parse*t.tClave-Te.t+;
30
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Clases parametri.adas o
gen*ricas (cont.)
Lecturas complementarias:
4 3ttp5//)))-desarrollo)eb-com/
articulos/generics6c-3tml
4 Cap7tulo /8 *Tipos & mtodos
genricos+ del libro
9:icrosoft C;- Curso de
Programaci%n- 1<- ed=
31
Colecciones gen*ricas 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
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!str'ct'ras de datos en C#
Coleccin (clase genrica) Estructura de datos
ArrayList
Arreglos
Stack
Pilas
Queue
Colas
List
Listas enlazadas simples
LinkedList
Listas enlazadas dobles
33
)istas enla.adas simples
Estructura de datos compuesta de nodos en
secuencia enlazados a travs de una referencia
(apuntador).
Cada nodo se compone de 2 partes:
Datos
Referencia al siguiente nodo
Adems, hay una referencia al primer nodo de
la lista y el ltimo nodo apunta a nulo
34
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
)a clase gen*rica )ist
Modela listas enlazadas en C#
Requiere un parmetro adicional para
definir el tipo de dato que almacena
El parmetro se coloca entre < y >
P. ejem.
List <int> ListaSimpleEnteros;
List <double> ListaReales;
35
Principales m*todos y
propiedades de la clase
gen*rica )ist
Mtodo o propiedad Uso
Clear() Elimina todos los nodos de la lista
Add() Agrega un nodo al final de la lista
Remove() Elimina la primera ocurrencia de un nodo de la
lista y devuelve un valor booleano para confirmar
la operacin
Contains() Determina si un nodo se encuentra almacenado
en la lista
Count Devuelve la cantidad de nodos almacenados en
la lista
Sort() Ordena en forma ascendente los nodos de la lista
GetEnumerator() Recorre los nodos de la lista y devuelve un
enumerador.
36
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!jemplo de lista
Crear una clase
para modelar
objetos con datos
de empleados
Crear una lista que
almacene muchos
empleados
37
Creacin de 'n objeto de 'na
lista gen*rica
Creacin de un objeto de una lista
genrica
List<Empleado> miEmpresa = new
List<Empleado>();
El objeto miEmpresa es una lista genrica
que almacena objetos de la clase
Empleado
38
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Capt'ra de datos de 'n nodo
de la lista gen*rica
Capturar los datos de
un empleado en
textBoxes
Al oprimir el botn
insertar, crear un
objeto de la clase
Empleado e insertarlo
en la lista genrica
Mostrar los datos en
un dataGridView
39
Creacin de 'n empleado
(nodo de la lista)
Crear un objeto con los datos de un
empleado para agregarlo a la lista
Empleado miEmpleado = new
Empleado();
Llenar los datos del empleado
miEmpleado.Numero = int.Parse(textBox1.Text);
miEmpleado.Nombre = textBox2.Text;
miEmpleado.Sueldo = double.Parse(textBox3.Text);
40
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
,nsertar 'n empleado
(agregar 'n 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
,teradores
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
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!l ciclo /oreac"
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
so de 'n iterador para
limpiar los te0t1o0es
foreach(Control x in groupBox1.Controls)
if(x is TextBox)
x.Text=;
44
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!jemplo de 'n iterador en 'na
coleccin gen*rica de 'na lista
Para recorrer los nodos de una lista
foreach(Empleado Nodo in miEmpresa)
Donde:
Empleado: Clase que define los datos de
los empleados
Nodo: Objeto de tipo Empleado que
contiene los datos de un empleado
miEmpresa: Objeto de la coleccin genrica
45
#ostrar los datos de 'na
lista en 'n data2rid3ie4
foreach(Empleado miEmpleado in miEmpresa)
{
dataGridView1.Rows.Add(miEmpleado.Numero,
miEmpleado.Nombre, miEmpleado.Sueldo)
}
46
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!l m*todo 2et!n'merator()
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
,mplementacin de 'n iterador a
tra-*s del m*todo
2et!n'merator()
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
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
!jemplo de
2et!n'merator()
public IEnumerator GetEnumerator()
{
if(Arreglo.Tamao == 0)
yield break;
for(i=0; i<Arreglo.Tamao; i++)
yield return Arreglo[i];
}
49
Relaciones entre clases
50
Relaciones
Composicin
Agregacin
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
2rados de dependencia
(cardinalidad o m'ltiplicidad)
51
Representacin Descripcin de la cardinalidad
1 Uno y slo uno
1..1 Uno a uno
0..1 Cero uno
M..N Desde M hasta N
M,N M N
* Cero muchos
0..* Cero muchos
1..* Uno muchos (al menos uno)
!jemplos
52
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
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
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Representacin de la
composicin
Grficamente se representa colocando un
rombo negro en el extremo de la clase
constituida (parte del todo).
55
56
Composicin
Un objeto puede tener como miembro a 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.
Una caracterstica importante de la composicin es
que la clase del todo regularmente contiene un
destructor para eliminar sus partes
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
57
Reglas para 5'e e0ista
composicin
Existen tres reglas para que se presente la relacin
de composicin entre dos clases:
1. La clase del todo DEBE tener un atributo de tipo
parte
a) Un objeto cuando es relacin 1..1
b) Una coleccin genrica si es relacin 1..*
2. La clase del todo DEBE tener un mtodo para
insertarle objetos de tipo parte
3. La clase del todo DEBE tener el destructor
a) Al eliminar el objeto del todo, tambin se deben
eliminar sus partes
58
Composicin
ProcesosDeUsuario Impresion
class Impresion
{
public void Imprimir(string Titulo, string mensaje)
{
System.Console.WriteLine(Titulo.ToUpper());
System.Console.WriteLine(mensaje);
}
}
class ProcesosDeUsuario
{
private Impresion imp;
public void ImprimirInstrucciones()
{
imp = new Impresion();
imp.Imprimir("Bienvenido", "Presione Enter para continuar");
System.Console.ReadLine();
}
}
Composicin
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Relacin 6..6 en
Composicin
59
,mplementacin de relacin
6..6 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;
}
}
60
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Representacin de la
relacin 6..6
Un objeto de la
clase del todo
tiene dentro un
objeto de la clase
parte
El objetoTodo
tiene un
objetoParte como
atributo
61
objetoTodo
Atributos del objetoTodo
Mtodos del objetoTodo
objetoParte
Atributos del
objetoParte
Mtodos del
objetoParte
Relacin 6..7 en
Composicin
62
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
,mplementacin de relacin
6..7 en composicin
class Todo
{
// Atributo (lista de componentes del Todo)
private List<Parte> ListaComponentes = new List<Parte>();
// Mtodo para insertar una parte a la lista
public void Insertar(Parte P) {
ListaComponentes.Add(P);
}
// Destructor (elimina el componente)
~Todo() {
ListaComponentes.Clear();
}
}
63
Representacin de la
relacin 6..7
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
64
objetoTodo
Atributos del objetoTodo
Mtodos del objetoTodo
objetoParte
Atributos del
objetoParte
Mtodos del
objetoParte
objetoParte
Atributos del
objetoParte
Mtodos del
objetoParte
objetoParte
Atributos del
objetoParte
Mtodos del
objetoParte
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
8Cmo recorrer todas las partes
de la )istaComponentes9
Implementar un iterador por medio del mtodo
2et(numerator*+
65
,mplementacin del iterador
class Todo
{
- - -
- - -
- - -
public >(numerator<Parte> 2et(numerator*+
{
foreac3 *Parte p in ?istaComponentes+
&ield return p;
!
!
66
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Otra /orma de
implementacin del iterador
class Todo
{
- - -
- - -
- - -
public >(numerator<Parte> 2et(numerator*+
{
return ?istaComponentes-2et(numerator*+;
!
!
67
68
#odelo #) con -arias
composiciones
Un objeto de tipo todo puede componerse de
objetos de diferentes tipos de partes
El todo tiene un atributo de cada tipo de parte
El todo tiene un mtodo para agregar cada tipo de
parte
El todo tiene un destructor para eliminar todas sus
partes
El todo tiene varios iteradores (uno para cada tipo
de parte).
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
#odelo #) con -arias
composiciones (cont.)
69
70
$ise%o de 'na clase con
-arios iteradores
Cuando una clase requiere varios iteradores, estos
no pueden implementarse a travs del mtodo
GetEnumerator().
Una clase no puede implementar varios mtodos
GetEnumerator().
Se recomienda implementar una propiedad de solo
lectura para cada iterador.
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
,mplementacin de iteradores a
tra-*s de propiedades
class Todo
{
- - -
public IEnumerable<Parte/> ?istaPartes/
{
get
{
foreac3*Parte/ p in listaPartes/+
&ield return p;
&ield brea@;
!
!
!
71
72 72
Composicin -s. Herencia
Usar Cuando
Herencia
(Es un)
Se desee incorporar en la clase las variables,
propiedades y mtodos de otra clase.
Se desee especializar una clase (agregando
caractersticas especficas).
Composicin
(Tiene un o unos)
Se desee ocultar, o encapsular un objeto bajo
una nueva interfaz.
Un objeto contenga otro objeto.
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
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
sus" partes"
73
74
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Representacin de la
agregacin
Grficamente se representa colocando un
rombo blanco en el extremo de la clase
constituida (parte del todo).
75
76
Reglas para 5'e e0ista
agregacin
Existen dos reglas para que se presente la relacin
de agregacin entre dos clases:
1. La clase del todo DEBE tener un atributo de tipo
parte
a) Un objeto cuando es relacin 1..1
b) Una coleccin genrica si es relacin 1..*
2. La clase del todo DEBE tener un mtodo para
insertarle objetos de tipo parte
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
77
#odelo #) con -arias
agregaciones
A un objeto de tipo todo pueden agregarse objetos
de diferentes tipos de partes
El todo tiene un atributo de cada tipo de parte
El todo tiene un mtodo para agregar cada tipo de
parte
El todo tiene varios iteradores (uno para cada tipo
de parte).
Los iteradores se implementan a travs de
propiedades de solo lectura
78
Reglas para 5'e e0ista
agregacin (cont.)
En la agregacin, la clase del todo NO es necesario
que tenga el destructor, ya que si se elimina un
objeto del todo sus partes siguen existiendo porque
pueden pertenecer a otros todos.
En pocas palabras
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
79
Agregacin -s. Herencia
class A
{ public int var1;
public int var2;
public int var3;
}
class B : A
{ public int var4;
public int var5;
}
class Programa
{ static void Main()
{ B objetoB = new B();
objetoB.
}
}
Mapa de memoria para objetoB
objetoB . var1
var2
var3
var4
var5
a) HERENCIA
80
Agregacin -s. Herencia
class A
{ public int var1;
public int var2;
public int var3;
}
class B
{ public A objetoA = new A();
public int var4;
public int var5;
}
class Programa
{ static void Main()
{ B objetoB = new B();
objetoB.
}
}
Mapa de memoria para objetoB
objetoB . objetoA . var1
var2
var3
var4
var5
b) AGREGACIN
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Composicin -s. Agregacin
81
Criterio de comparacin Composicin Agregacin
Es una relacin entre clases de un todo y sus
partes
El todo depende de la existencia de sus partes
Las partes pueden pertenecer a varios todos
Si se elimina el todo tambin se eliminan sus
partes
La clase del todo contiene atributo(s) que
representa(n) las partes
La clase del todo contiene mtodo(s) para insertar
sus partes
La clase del todo tiene un destructor para eliminar
sus partes





82
Composicin -s.
agregacin (cont.)
Programacin Orientada a Objetos con C#
Dr. Ramn V. Roque Hernndez
Ing. Bruno Lpez Takeyas, M.C.
http://www.itnuevolaredo.edu.mx/Takeyas
Re/erencias adicionales
http://www.dcc.uchile.cl/~psalinas/uml/mo
delo.html
http://arodm.blogspot.com/2008/09/uml-
relaciones-compocicion-agregacion.html
83

Você também pode gostar