Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Índice
Definición
Ventajas
Tema 7 - Herencia Situaciones en las que se aplica la herencia
Luis Gonzaga Pérez Cordón Tipos de Herencia
Herencia en C#
Definición Ejemplo
La herencia es un mecanismo de la P.D.O. A es un ascendiente o superclase de B. Si la
que permite construir una clase incorporando A herencia entre A y B es directa decimos que A es
la clase padre de B
de manera implícita todas las características
de una clase previamente existente.
B es un descendiente o subclase de A. Si la
herencia entre A y B es directa decimos además
que B es una clase hija de A
B
1
04/12/2008
A es un B: un Coche es un Vehículo
Coche VendedorConVehículo
CuentaAhorroPFijo PlanPensiones
CuentaCorriente -------------------- ----------------
----------------- Date vencimiento; Date vencimiento;
Reintegro(); -------------------- float cotización;
ingresoMes(); String numCuentaOrigen;
2
04/12/2008
ElAire Teléfono
3
04/12/2008
Herencia en C# Herencia en C#
Características Como se utiliza:
Herencia simple
Estructura jerárquica en árbol en donde en la raiz
podemos encontrar la clase object, de las que
heredan todas las clases.
Todas las clases tienen un padre
Todos los objetos son “object”
C# no permite que una subclase elimine un
método o una variable de instancia aunque esta no
la necesite
Herencia en C# Herencia en C#
Redefinición de métodos,constructores,
Herencia en C# …
¿Qué pasa si en la superclase hay un método
que funciona distinto a como nos gustaría que
funcionara en la subclase?
¿Son las subclases responsables de inicializar
en sus constructores las variables heredadas
de las superclases?
¿Qué pasa si un método de la superclase no
debiera aparecer en la subclase?
4
04/12/2008
Constructores Constructores
Las subclases NO son responsables de
inicializar las variables de instancia de las
variables que hereda
Para pasarle la responsabilidad de inicializar
esas variables a las superclases puede llamar
al constructor de estas mediante la sentencia
:base()
Hay una especia de “herencia” de
constructores
5
04/12/2008
6
04/12/2008
7
04/12/2008
Interfaces Interfaces
Para que una clase use un interfaz debe
implementar todos sus métodos e indicar que
está usando un interfaz.
Interfaces
Utilidad de los interfaces: “simular” herencia
múltiple.
Nota: los interfaces solo tienen sentido en
lenguajes de programación que solo permiten
usar la herencia simple
8
04/12/2008
Ejercicio Ejercicio
Diseñar un ecosistema donde podemos encontrar Ecosistema con herencia múltiple
varios tipos de animales (gatos, perros, leones,
ratones,…). Algunos de estos animales son
depredadores (comen para obtener “energía”)
energía ) y
otros presas (son comidos y proporcionan
“energía”), y otros pueden actuar tanto como
depredadores como presas.
Diseñar este ecosistema empleando herencia múltiple
Diseñar este ecosistema empleando herencia sencilla
Ejercicio Ejercicio
Ecosistema con herencia múltiple Ecosistema con herencia sencilla
Ventajas de esta representación:
Es la más cercana al modelo real
Reutilizamos código de las superclases
Desventajas:
Pocos lenguajes de programación admiten herencia
múltiple (C++)
Es más difícil de implementar (ciclos, variables
distintas de distintitas clases pero con el mismo
nombre,…)
Ejercicio Ejercicio
Ecosistema con herencia sencilla Ecosistema con herencia sencilla y interfaces
Ventajas:
Si lo implementamos bien puede simular el mismo
modelo
d l
Desventajas:
Las clases dejan de representar lo que deberían de
representar
Las subclases deben anular métodos porque si no se hace
podrían hacer cosas raras (un ratón podría comerse un
perro) -> ¿Qué pasa si tengo herencia múltiple con
muchas clases? problemas con los olvidos
9
04/12/2008
Ejercicio Ejercicio
Ecosistema con herencia sencilla y interfaces Ecosistema con herencia sencilla y interfaces
Ventajas: (segundo enfoque):
El modelo refleja bastante fielmente la situación real
Las clases implementadas son conceptualmente
correctas
Desventajas:
Se deben implementar los interfaces. No hay
reutilización de código.
Ejercicio
Ecosistema con herencia sencilla y interfaces
(segundo enfoque):
Ventajas
El modelo refleja bastante fielmente la situación real
No hay que implementar los interfaces
Desventajas
Las clases implementadas no son del todo
conceptualmente correctas pero evitamos un mal uso
10