Está en la página 1de 14

ndice

Tema 7 - Herencia
Luis Gonzaga Prez Cordn

Definicin Ventajas Situaciones en las que se aplica la herencia Tipos de Herencia Herencia en Java

Definicin
La herencia es un mecanismo de la P.D.O. que permite construir una clase incorporando de manera implcita todas las caractersticas de una clase previamente existente.

Ejemplo
A A es un ascendiente o superclase de B. Si la herencia entre A y B es directa decimos que A es la clase padre de B

B es un descendiente o subclase de A. Si la herencia entre A y B es directa decimos adems que B es una clase hija de A B

Ventajas
Modelado de la realidad: las relaciones de especializacin/generalizacin entre las entidades del mundo real. Evita redundancias Facilita la reutilizacin Sirve de soporte para el polimorfismo

Situaciones en las que se aplica la herencia


Situaciones:
Especializacin Extensin Especificacin Construccin ?????

Situaciones en las que se aplica la herencia


Especializacin: Dado un concepto B y otro concepto A que representa una especializacin de B, entonces puede establecerse una relacin de herencia entre las clases de objetos que representan a A y B.
Vehculo A es un B: un Coche es un Vehculo Coche

Situaciones en las que se aplica la herencia


Extensin: una clase puede servir para extender la funcionalidad de una superclase sin que represente necesariamente un concepto ms especfico.
Vendedor

VendedorConVehculo

Situaciones en las que se aplica la herencia


Especificacin: Una superclase puede servir para especificar la funcionalidad mnima comn de un conjunto de descendientes.
ObjetoGrafico: seleccionar mover escalar cambiarColor

Situaciones en las que se aplica la herencia


Construccin: Una clase puede construirse a partir de otra, simplemente porque la hija puede aprovechar internamente parte o toda la funcionalidad del padre, aunque representen entidades sin conexin alguna.
Lista

Texto

Lnea

Cuadrado

Pila

Situaciones en las que se aplica la herencia


Construccin: MAL USO DE LA HERENCIA!!. No se debe emplear en estos casos. Si necesita la funcionalidad de una lista debe USAR una lista, no HEREDAR de una lista.

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 cotizacin; String numCuentaOrigen;

Tipos de Herencia
Principalmente existen dos tipos de herencia.
Herencia simple: una clase solo puede tener un padre, por lo tanto la estructura de clases ser en forma de arbol. Herencia mltiple: Una clase puede tener uno o varios padres. La estructura de clases es un grafo

Tipos de Herencia
Herencia simple:
Muy fcil de entender y manejar tanto por el lenguaje como por el programador. Limitada puesto que en el mundo real un objeto puede pertenecer a varias clases y sin embargo aqu esta situacin no se puede modelar

Tipos de Herencia
Herencia mltiple:
Es mas realista y da al programador ms libertad y mas posibilidades de reutilizacin de cdigo. Es mucho ms difcil de utilizar por la posibilidad de ciclos y para los lenguajes de programacin es muy costoso el permitirlo.

Tipos de Herencia
Ejemplo de herencia mltiple
MedioComunicacion ObjetoFsico

ElAire

Telfono

Tipos de Herencia
Ejemplo herencia mltiple:
Constructor ---------------------------Colegio colegio;

Herencia en Java
Caractersticas Como se utiliza Redefinicin de mtodos, constructores, Como funciona la gestin de tipos en java Mtodos y clases abstractas Interfaces Ejemplos de herencia

Arquitecto -------------------construir()

Aparejador -------------------construir()

ArquitectoYAparejador ---------------Colegio colegio; ????? construir()??????

Herencia en Java
Caractersticas
Herencia simple Estructura jerrquica 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

Herencia en Java
Como se utiliza:

Java no permite que una subclase elimine un mtodo o una variable de instancia aunque esta no la necesite

Herencia en Java

Herencia en Java

Herencia en Java

Redefinicin de mtodos,constructores,
Qu pasa si en la superclase hay un mtodo que funciona distinto a como nos gustara que funcionara en la subclase? Son las subclases responsables de inicializar en sus constructores las variables heredadas de las superclases? Qu pasa si un mtodo de la superclase no debiera aparecer en la subclase?

Redefinicin de mtodos
Redefinicin de mtodos

Redefinicin de mtodos

Redefinicin de mtodos

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 super() Hay una especia de herencia de constructores

Constructores

Eliminacin de mtodos
Java no lo permite Solucin: redefinir el mtodo en las subclases para que se genero un error en caso de que se llame a un mtodo no permitido

Tipos

Mtodos y clases abstractas


Un mtodo se dice que es abstracto si lo declaramos pero no lo implementamos. Utilidad:
podemos llamar a mtodos que an no hemos implementado o que se tienen que implementar en la subclases. Podemos declarar mtodos que tendrn todas las subclases pero que no se pueden implementar en la superclase

til en polimorfismo

Mtodos y clases abstractas


Qu pasa si tenemos tres clases que comparten un mismo mensaje pero que su implementacin es distinta en las tres?

Mtodos y clases abstractas

Mtodos y clases abstractas


Si creamos una superclase vehculo:
Qu hacemos con el mtodo moverse? Debe estar en la superclase? es un mtodo que tendrn todas subclases de vehculo? Qu implementacin tendr en la superclase? Me aporta alguna ventaja?

Mtodos y clases abstractas

Mtodos y clases abstractas


Moverse en la superclase ser un mtodo abstracto:
Ventajas:
Las subclases tarde o temprano tienen que implementarlo. En la superclases en donde este definido puede ser utilizado aunque no este implementado.

Mtodos y clases abstractas


Una clase abstracta es una clase en la que al menos tiene un mtodo que es abstracto.
Este(os) mtodo(s) abstracto(s) puede que lo haya definido el o que los haya heredado. Un clase abstracta NO puede instanciar objetos Qu pasara si se llamara a un mtodo abstracto? y si se llamara a un mtodo no abstracto pero que usa un mtodo abstracto?

Para que una clase se declare como abstracta tenemos que usar la palabra clave abstract

10

Mtodos y clases abstractas


IMPORTANTE: Para que un clase que hereda de una superclase abstracta pueda instanciar objetos debe de implementar todos los mtodos abstractos que ha heredado, porque si no lo hiciera, tambin sera una clase abstracta.

Interfaces
Definicin informal:
Es una clase abstracta sin variables de instancia en donde todos sus mtodos son abstractos

Definicin formal:
Es un contrato que establece una clase en el cual esta clase asegura que implementar un conjunto de mtodos

Interfaces

Interfaces
Para que una clase use un interfaz debe implementar todos sus mtodos e indicar que est usando un interfaz.

11

Interfaces
Utilidad de los interfaces: simular herencia mltiple. Nota: los interfaces solo tienen sentido en lenguajes de programacin que solo permiten usar la herencia simple

Ejercicio
Disear un ecosistema donde podemos encontrar varios tipos de animales (gatos, perros, leones, ratones,). Algunos de estos animales son depredadores (comen para obtener energa) y otros presas (son comidos y proporcionan energa), y otros pueden actuar tanto como depredadores como presas.
Disear este ecosistema empleando herencia mltiple Disear este ecosistema empleando herencia sencilla

Ejercicio
Ecosistema con herencia mltiple

12

Ejercicio
Ecosistema con herencia mltiple
Ventajas de esta representacin:
Es la ms cercana al modelo real Reutilizamos cdigo de las superclases

Ejercicio
Ecosistema con herencia sencilla

Desventajas:
Pocos lenguajes de programacin admiten herencia mltiple (C++) Es ms difcil de implementar (ciclos, variables distintas de distintitas clases pero con el mismo nombre,)

Ejercicio
Ecosistema con herencia sencilla
Ventajas:
Si lo implementamos bien puede simular el mismo modelo

Ejercicio
Ecosistema con herencia sencilla y interfaces

Desventajas:
Las clases dejan de representar lo que deberan de representar Las subclases deben anular mtodos porque si no se hace podran hacer cosas raras (un ratn podra comerse un perro) -> Qu pasa si tengo herencia mltiple con muchas clases? problemas con los olvidos

13

Ejercicio
Ecosistema con herencia sencilla y interfaces
Ventajas:
El modelo refleja bastante fielmente la situacin real Las clases implementadas son conceptualmente correctas

Ejercicio
Ecosistema con herencia sencilla y interfaces (segundo enfoque):

Desventajas:
Se deben implementar los interfaces. No hay reutilizacin de cdigo.

Ecosistema con herencia sencilla y interfaces (segundo enfoque):


Ventajas
El modelo refleja bastante fielmente la situacin real No hay que implementar los interfaces

Desventajas
Las clases implementadas no son del todo conceptualmente correctas pero evitamos un mal uso

14