Tema6-Herencia
-
Upload
charlie-garcia -
Category
Documents
-
view
6 -
download
0
Transcript of Tema6-Herencia
04/12/2008
1
Tema 7 - HerenciaLuis Gonzaga Pérez Cordón
ÍndiceDefiniciónVentajasSituaciones en las que se aplica la herenciaSituaciones en las que se aplica la herenciaTipos de HerenciaHerencia en C#
DefiniciónLa herencia es un mecanismo de la P.D.O. que permite construir una clase incorporando de manera implícita todas las características de una clase previamente existente.
Ejemplo
AA es un ascendiente o superclase de B. Si laherencia entre A y B es directa decimos que A esla clase padre de B
B
B es un descendiente o subclase de A. Si laherencia entre A y B es directa decimos ademásque B es una clase hija de A
VentajasModelado de la realidad: las relaciones deespecialización/generalización entre lasentidades del mundo real.Evita redundanciasFacilita la reutilizaciónSirve de soporte para el polimorfismo
Situaciones en las que se aplica la herencia
Situaciones:EspecializaciónExtensiónEspecificaciónConstrucción ?????
04/12/2008
2
Situaciones en las que se aplica la herencia
Especialización: Dado un concepto B y otroconcepto A que representa unaespecialización de B, entonces puedeestablecerse una relación de herencia entre lasclases de objetos que representan a A y B.
Vehículo
Coche
A es un B: un Coche es un Vehículo
Situaciones en las que se aplica la herencia
Extensión: una clase puede servir paraextender la funcionalidad de una superclasesin que represente necesariamente unconcepto más específico.
Vendedor
VendedorConVehículo
Situaciones en las que se aplica la herencia
Especificación: Una superclase puede servirpara especificar la funcionalidad mínimacomún de un conjunto de descendientes.
ObjetoGrafico:seleccionar
moverescalar
cambiarColor
Texto Línea Cuadrado
Situaciones en las que se aplica la herencia
Construcción: Una clase puede construirse apartir de otra, simplemente porque la hijapuede aprovechar internamente parte o toda lafuncionalidad del padre, aunque representenentidades sin conexión alguna.
Lista
Pila
Situaciones en las que se aplica la herencia
Construcción: ¡¡MAL USO DE LAHERENCIA!!. No se debe emplear en estoscasos. Si necesita la funcionalidad de una listadebe USAR una lista, no HEREDAR de unalista.
Situaciones en las que se aplica la herencia
Ejemplo:Cuenta
------------------long numero;String titular;double saldo;
double interes;----------------
ingreso()ingresoInteresMes();
leerSaldo();transferirA();
CuentaCorriente-----------------Reintegro();
CuentaAhorroPFijo--------------------
Date vencimiento;--------------------
ingresoMes();
PlanPensiones----------------
Date vencimiento;float cotización;
String numCuentaOrigen;
04/12/2008
3
Tipos de HerenciaPrincipalmente existen dos tipos de herencia.
Herencia simple: una clase solo puede tener un padre, por lo tanto la estructura de clases será en f d b lforma de arbol.Herencia múltiple: Una clase puede tener uno o varios padres. La estructura de clases es un grafo
Tipos de HerenciaHerencia simple:
Muy fácil de entender y manejar tanto por ellenguaje como por el programador.Limitada puesto que en el mundo real un objetopuede pertenecer a varias clases y sin embargoaquí esta situación no se puede modelar
Tipos de HerenciaHerencia múltiple:
Es mas realista y da al programador más libertad y mas posibilidades de reutilización de código.Es mucho más difícil de utilizar por la posibilidad de ciclos y para los lenguajes de programación es muy costoso el permitirlo.
Tipos de HerenciaEjemplo de herencia múltiple
MedioComunicacion ObjetoFísico
ElAire
MedioComunicacion
Teléfono
ObjetoFísico
Tipos de HerenciaEjemplo herencia múltiple:
Constructor----------------------------
Colegio colegio;Co eg o co eg o;
Arquitecto--------------------
construir()
Aparejador--------------------
construir()
ArquitectoYAparejador----------------
Colegio colegio; ?????construir()??????
Herencia en C#CaracterísticasComo se utilizaRedefinición de métodos, constructores,…Redefinición de métodos, constructores,…Como funciona la gestión de tipos en C#Métodos y clases abstractasInterfacesEjemplos de herencia
04/12/2008
4
Herencia en C#Características
Herencia simpleEstructura jerárquica en árbol en donde en la raizpodemos encontrar la clase object, de las queheredan todas las clases.
Todas las clases tienen un padreTodos los objetos son “object”
C# no permite que una subclase elimine unmétodo o una variable de instancia aunque esta nola necesite
Herencia en C#Como se utiliza:
Herencia en C# Herencia en C#
Herencia en C#Redefinición de métodos,constructores,
…¿Qué pasa si en la superclase hay un métodoque funciona distinto a como nos gustaría quefuncionara en la subclase?¿Son las subclases responsables de inicializaren sus constructores las variables heredadasde las superclases?¿Qué pasa si un método de la superclase nodebiera aparecer en la subclase?
04/12/2008
5
Redefinición de métodosLos métodos que se puedan redefinir deben incluir la palabra reservada virtualCuando redefina un método este debe utilizar la palabra reservada override
Redefinición de métodosRedefinición de métodos
Redefinición de métodos Redefinición de métodos
ConstructoresLas subclases NO son responsables deinicializar las variables de instancia de lasvariables que heredaPara pasarle la responsabilidad de inicializaresas variables a las superclases puede llamaral constructor de estas mediante la sentencia:base()Hay una especia de “herencia” deconstructores
Constructores
04/12/2008
6
Acceso a método de la clase baseSe puede acceder mediante la palabra reservada base
Eliminación de métodosC# no lo permiteSolución: redefinir el método en las subclases para que se genero un error en caso de que se llame a un método no permitido
Gestión de tipo en C#Se permite asignar a una variable todos losobjetos de generados a partir de esta clase yde sus subclases pero a la inversa esto no escierto (no se cumple la condición de que unacosa ES otra)
Ave ave;
Gallina gallina = new Gallina();
ave = gallina /* todas las gallinas SON aves */
Ave ave=new Ave();
Gallina gallina;
gallina = ave /* NO todas las gallinas SON aves */
Métodos y clases abstractasUn método se dice que es abstracto si lodeclaramos pero no lo implementamos.Utilidad:
d ll ét d ú hpodemos llamar a métodos que aún no hemosimplementado o que se tienen que implementaren la subclases.Podemos declarar métodos que tendrán todas lassubclases pero que no se pueden implementar enla superclase
Útil en polimorfismo
Métodos y clases abstractas¿Qué pasa si tenemos tres clases quecomparten un mismo mensaje pero que suimplementación es distinta en las tres?
Métodos y clases abstractas
04/12/2008
7
Métodos y clases abstractasSi creamos una superclase vehículo:
¿Qué hacemos con el método moverse?¿Debe estar en la superclase? ¿es un método que tendrán todas subclases de vehículo?¿Qué implementación tendrá en la superclase?¿Me aporta alguna ventaja?
Métodos y clases abstractas
Métodos y clases abstractasMoverse en la superclase será un métodoabstracto:
Ventajas:Las subclases tarde o temprano tienen queimplementarlo.En la superclases en donde este definido puede serutilizado aunque no este implementado.
Métodos y clases abstractasUna clase abstracta es una clase en la que al menos tiene un método que es abstracto.
Este(os) método(s) abstracto(s) puede que lo haya definido el o que los haya heredadodefinido el o que los haya heredado.Un clase abstracta NO puede instanciar objetos ¿Qué pasaría si se llamara a un método abstracto? ¿y si se llamara a un método no abstracto pero que usa un método abstracto?
Para que una clase se declare como abstractatenemos que usar la palabra clave abstract
04/12/2008
8
Métodos y clases abstractasIMPORTANTE: Para que un clase que heredade una superclase abstracta pueda instanciarobjetos debe de implementar todos losmétodos abstractos que ha heredado, porquesi no lo hiciera, también sería una claseabstracta.
InterfacesDefinición informal:
Es una clase abstracta sin variables de instanciaen donde todos sus métodos son abstractos
Definición formal: Es un contrato que establece una clase en el cualesta clase asegura que implementará un conjuntode métodos
Interfaces InterfacesPara que una clase use un interfaz debe implementar todos sus métodos e indicar que está usando un interfaz.
InterfacesUtilidad de los interfaces: “simular” herenciamúltiple.Nota: los interfaces solo tienen sentido enlenguajes de programación que solo permitenusar la herencia simple
04/12/2008
9
EjercicioDiseñar un ecosistema donde podemos encontrarvarios tipos de animales (gatos, perros, leones,ratones,…). Algunos de estos animales sondepredadores (comen para obtener “energía”) ydepredadores (comen para obtener energía ) yotros presas (son comidos y proporcionan“energía”), y otros pueden actuar tanto comodepredadores como presas.
Diseñar este ecosistema empleando herencia múltipleDiseñar este ecosistema empleando herencia sencilla
EjercicioEcosistema con herencia múltiple
EjercicioEcosistema con herencia múltiple
Ventajas de esta representación:Es la más cercana al modelo realReutilizamos código de las superclases
Desventajas:Pocos lenguajes de programación admiten herenciamúltiple (C++)Es más difícil de implementar (ciclos, variablesdistintas de distintitas clases pero con el mismonombre,…)
EjercicioEcosistema con herencia sencilla
EjercicioEcosistema con herencia sencilla
Ventajas:Si lo implementamos bien puede simular el mismo
d lmodelo
Desventajas:Las clases dejan de representar lo que deberían derepresentarLas subclases deben anular métodos porque si no se hacepodrían hacer cosas raras (un ratón podría comerse unperro) -> ¿Qué pasa si tengo herencia múltiple conmuchas clases? problemas con los olvidos
EjercicioEcosistema con herencia sencilla y interfaces
04/12/2008
10
EjercicioEcosistema con herencia sencilla y interfaces
Ventajas:El modelo refleja bastante fielmente la situación realLas clases implementadas son conceptualmentecorrectas
Desventajas:Se deben implementar los interfaces. No hayreutilización de código.
EjercicioEcosistema con herencia sencilla y interfaces (segundo enfoque):
EjercicioEcosistema con herencia sencilla y interfaces (segundo enfoque):
VentajasEl modelo refleja bastante fielmente la situación realNo hay que implementar los interfaces
DesventajasLas clases implementadas no son del todoconceptualmente correctas pero evitamos un mal uso