Escolar Documentos
Profissional Documentos
Cultura Documentos
}
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