herencia agregacion composicion
Post on 13-Sep-2015
20 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
Programacin Orientada a Objetos con C#
3
4
Herencia
Caracterstica de la POO que permitedefinir nuevas clases a partir de otrasya existentes.
Las clases existentes transmiten suscaractersticas.
-
Programacin Orientada a Objetos con C#
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#
7
Uso 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#
Ejemplo de herencia
9
class Persona{.
}
class Empleado:Persona{.
}
class Estudiante:Persona{.
}
class Profesor:Empleado{.
}
class Administrador:Empleado{.
}
1010
Ejercicio
Se deben modelar dos clases con las siguientes caractersticas:
Automovil
CaballosDeFuerza: intCantidadDePuertas: int
Arrancar() : voidDetener() : voidAcelerar(int cuanto): void
PalaMecanica
CaballosDeFuerza: intPesoMaximoDeLevante: int
Arrancar() : voidDetener() : voidMoverPala(string direccion) : void
-
Programacin Orientada a Objetos con C#
1111
Mal Diseo
(No 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
1212
Diseo usando Herencia
(Recomendado)
Vehiculo
CaballosDeFuerza : int
Arrancar() : voidDetener() : 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#
1313
Diseo de las clases usando
herencia 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){}
}
1414
Notas 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#
15
Llamando mtodos 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();}
}
Secuencia de ejecucin de
constructores en la Herencia
Considerar el siguiente ejemplo Qu salida se obtiene?
-
Programacin Orientada a Objetos con C#
17
Secuencia de ejecucin de
constructores en la Herencia
Constructor de la clase AConstructor de la clase BConstructor 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
Secuencia de ejecucin de los
destructores usando herencia
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#
19
Secuencia de ejecucin de los
destructores usando herencia
Constructor de la clase AConstructor de la clase BConstructor de la clase CDestructor de la clase CDestructor de la clase BDestructor de la clase A
La salida del programa es
Los destructores son invocados en orden inverso a
los constructores.
20
Invocando constructores de
la clase baseclass 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 clasepadre inmediata desde la
cual se invoca.Entre parntesis se
especificanlos parmetros requeridos.
-
Programacin Orientada a Objetos con C#
21
Evitando la herencia:
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 parametrizadas o
genricas
Ejemplo: Una empresa y una escueladesean almacenar la clave y nombre desus personas: Clave: Entero String Nombre: String
Pero en la empresa la clave esnumrica entera y en la escuela es unacadena.
22
-
Programacin Orientada a Objetos con C#
Clases parametrizadas o
genricas (cont.)
Clases iguales (excepto en el tipo de dato de la clave)
23
Escuela
Empresa
Clases parametrizadas o
genricas (cont.)
Disear una clase parametrizada quesirva para ambos casos:
24
-
Programacin Orientada a Objetos con C#
Codificacin de la clase
parametrizadaclass Persona // 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
Persona Empleado = new Persona();
Persona Estudiante = new Persona();
// Uso de los objetos
Empleado.Clave = int.Parse(txtClave.Text);
Estudiante.Clave = txtClave.Text;
26
-
Programacin Orientada a Objetos con C#
Clases parametrizadas con
varios tipos
Ejemplo: Una empresa y una escueladesean almacenar la clave y grupo desus personas: Clave: Entero String Nombre: Entero caracter
27
Clases parametrizadas con
varios tipos
Clases iguales (excepto en los tipos de datos)
28
Escuela
Empresa
-
Programacin Orientada a Objetos con C#
Codificacin de la clase
parametrizada con varios tipos
class Persona // 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
Clases parametrizadas con
varios tipos (cont.)
// Declaracin y creacin de los objetos
Persona Empleado = new Persona();
Persona Estudiante = new Persona();
// Uso de los objetos
Empleado.Clave = int.Parse(txtClave.Text);
Empleado.Grupo = int.Parse(txtGrupo.Text);
Estudiante.Clave = txtClave.Text;
Estudiante.Grupo =char.Parse(txtClave.Text);
30
-
Programacin Orientada a Objetos con C#
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 namespaceSystem.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 datos32
-
Programacin Orientada a Objetos con C#
Estructuras de datos en C#
Coleccin (clase genrica) Estructura de datosArrayList ArreglosStack PilasQueue ColasList Listas enlazadas simplesLinkedList Listas enlazadas dobles
33
Listas enlazadas 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#
La clase genrica List
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 ListaSimpleEnteros; List ListaReales;
35
Principales mtodos y
propiedades de la clase
genrica List
Mtodo o propiedad UsoClear Elimina todos los nodos de la listaAdd Agrega un nodo al final de la listaRemove Elimina la primera ocurrencia de un nodo de la
lista y devuelve un valor booleano para confirmarla 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
36
-
Programacin Orientada a Objetos con C#
Ejemplo de lista
Crear una clase para modelar objetos con datos de empleados
Crear una lista que almacene muchos empleados
37
Creacin de un objeto de una
lista genrica
Creacin de un objeto de una lista genrica List miEmpresa = new List();
El objeto miEmpresa es una lista genrica que almacena objetos de la clase Empleado
38
-
Programacin Orientada a Objetos con C#
Captura de datos de un nodo
de la lista genrica
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 un 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#
Insertar un empleado
(agregar un nodo a la lista)
Insertar el empleado en la lista miEmpresa.Add(miEmpleado);
Crear el dataGridViewdataGridView1.Columns.Add("Nmero", "Nmero");dataGridView1.Columns.Add("Nombre", "Nombre");dataGridView1.Columns.Add("Sueldo", "Sueldo");
// Inicializa las propiedades del dataGridView1dataGridView1.ReadOnly = true;dataGridView1.AllowUserToAddRows = false;dataGridView1.AllowUserToDeleteRows = false;dataGridView1.AutoSizeColumnsMode =
DataGridViewAutoSizeColumnsMode.Fill;41
Iteradores
Es un conjunto de instrucciones quedevuelve una secuencia de valores del mismo tipo.
Puede invocarse mediante un cicloforeach
P.ejem.foreach(int Dato in X){
} 42
-
Programacin Orientada a Objetos con C#
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 instruccionesincluidas en el cuerpo del ciclo para cadaelemento de una estructura de datos.
43
Uso de un iterador para
limpiar los textBoxes
foreach(Control x in groupBox1.Controls)if(x is TextBox)
x.Text=;
44
-
Programacin Orientada a Objetos con C#
Ejemplo de un iterador en una
coleccin genrica de una lista
Para recorrer los nodos de una listaforeach(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
Mostrar los datos de una
lista en un dataGridView
foreach(Empleado miEmpleado in miEmpresa){ dataGridView1.Rows.Add(miEmpleado.Numero, miEmpleado.Nombre, miEmpleado.Sueldo)
}
46
-
Programacin Orientada a Objetos con C#
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 foreach47
Implementacin de un iterador a
travs del mtodo
GetEnumerator()
El mtodo GetEnumerator()devuelve una secuencia de valores del mismo tipo IEnumerator.
Utiliza la instruccin yield returnpara devolver cada elemento
Utiliza la instruccin yield break para finalizar la iteracin (ciclo) cuando sea necesario.
48
-
Programacin Orientada a Objetos con C#
Ejemplo de
GetEnumerator()
public IEnumerator GetEnumerator(){if(Arreglo.Tamao == 0)
yield break;for(i=0; i
-
Programacin Orientada a Objetos con C#
Grados de dependencia
(cardinalidad o multiplicidad)
51
Representacin Descripcin de la cardinalidad1 Uno y slo uno
1..1 Uno a uno0..1 Cero unoM..N Desde M hasta NM,N M N
* Cero muchos0..* Cero muchos1..* Uno muchos (al menos uno)
Ejemplos
52
-
Programacin Orientada a Objetos con C#
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#
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 otro objetodefinido previamente.
Cuando un objeto se encuentra compuesto por otrosobjetos, 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 esque la clase del todo regularmente contiene un destructor para eliminar sus partes
-
Programacin Orientada a Objetos con C#
57
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
Relacin 1..1 en
Composicin
58
-
Programacin Orientada a Objetos con C#
Implementacin de relacin
1..1 en composicin
class Todo{
// Atributo (objeto componente del Todo)private Parte Componente = new Parte();
// Mtodo para insertar un componentepublic void Insertar(Parte P) {
Componente = P;}// Destructor (elimina el componente)~Todo() {
Componente = null;}
} 59
Representacin de la
relacin 1..1
Un objeto de la clase del todo tiene dentro un objeto de la clase parte
El objetoTodotiene un objetoParte como atributo
60
objetoTodoAtributos del objetoTodo
Mtodos del objetoTodo
objetoParte
Atributos delobjetoParte
Mtodos delobjetoParte
-
Programacin Orientada a Objetos con C#
Relacin 1..* en
Composicin
61
Implementacin de relacin
1..* en composicin
class Todo{
// Atributo (lista de componentes del Todo)private List ListaComponentes = new List();
// Mtodo para insertar una parte a la listapublic void Insertar(Parte P) {
ListaComponentes.Add(P);}// Destructor (elimina el componente)~Todo() {
ListaComponentes.Clear();}
} 62
-
Programacin Orientada a Objetos con C#
Representacin de la
relacin 1..*
Un objeto de la clase del todo tiene dentro una coleccin de objetos de la clase parte
El objetoTodotiene una lista de objetoPartecomo atributo
63
objetoTodoAtributos del objetoTodo
Mtodos del objetoTodo
objetoParte
Atributos delobjetoParte
Mtodos delobjetoParte
objetoParte
Atributos delobjetoParte
Mtodos delobjetoParte
objetoParte
Atributos delobjetoParte
Mtodos delobjetoParte
Cmo recorrer todas las partes
de la ListaComponentes?
Implementar un iterador por medio del mtodoGetEnumerator()
64
-
Programacin Orientada a Objetos con C#
Implementacin del iterador
class Todo
{
. . .
. . .
. . .
public IEnumerator GetEnumerator()
{
foreach (Parte p in ListaComponentes)
yield return p;
}
}65
Otra forma de
implementacin del iteradorclass Todo
{
. . .
. . .
. . .
public IEnumerator GetEnumerator()
{
return ListaComponentes.GetEnumerator();
}
}
66
-
Programacin Orientada a Objetos con C#
6767
Composicin vs. 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 bajouna nueva interfaz. Un objeto contenga otro objeto.
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" 68
-
Programacin Orientada a Objetos con C#
Representacin de la
agregacin
Grficamente se representa colocando un rombo blanco en el extremo de la clase constituida (parte del todo).
69
70
Agregacin vs. 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 objetoBobjetoB . var1
var2
var3
var4
var5
a) HERENCIA
-
Programacin Orientada a Objetos con C#
71
Agregacin vs. 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 objetoBobjetoB . objetoA . var1
var2
var3
var4
var5
b) AGREGACIN
Composicin vs. Agregacin
72
Criterio de comparacin Composicin Agregacin
Es una relacin entre clases de un todo y sus partesEl todo depende de la existencia de sus partes
Las partes pueden pertenecer a varios todos
Si se elimina el todo tambin se eliminan sus partesLa clase del todo contiene atributo(s) que representa(n) las partesLa clase del todo contiene mtodo(s) para insertar sus partesLa clase del todo tiene un destructor para eliminar sus partes
-
Programacin Orientada a Objetos con C#
Referencias adicionales
http://www.dcc.uchile.cl/~psalinas/uml/modelo.html
http://arodm.blogspot.com/2008/09/uml-relaciones-compocicion-agregacion.html
73
top related