Está en la página 1de 10

04/12/2008

ndice

Tema 7 - Herencia
Luis Gonzaga Prez Cordn

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

Definicin

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

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.

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

Situaciones en las que se aplica la herencia


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:

Especializacin Extensin Especificacin Construccin ?????

04/12/2008

Situaciones en las que se aplica la herencia


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

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


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

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


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.

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;

04/12/2008

Tipos de Herencia

Tipos de Herencia

Principalmente existen dos tipos de herencia.


Herencia simple:

Herencia simple: una clase solo puede tener un padre, por lo tanto la estructura de clases ser en f forma de d arbol. b l Herencia mltiple: Una clase puede tener uno o varios padres. La estructura de clases es un grafo

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

Tipos de Herencia

Herencia mltiple:

Ejemplo de herencia mltiple


MedioComunicacion ObjetoFsico

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.
ElAire

Telfono

Tipos de Herencia

Herencia en C#

Ejemplo herencia mltiple:


Constructor ---------------------------Colegio Co eg o colegio; co eg o;

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

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

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

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

04/12/2008

Herencia en C#

Herencia en C#

Caractersticas

Como se utiliza:

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

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

Herencia en C#

Herencia en C#

Herencia en C#

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?

04/12/2008

Redefinicin de mtodos

Redefinicin de mtodos

Los mtodos que se puedan redefinir deben incluir la palabra reservada virtual Cuando redefina un mtodo este debe utilizar la palabra reservada override

Redefinicin de mtodos

Redefinicin de mtodos

Redefinicin de mtodos

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

04/12/2008

Acceso a mtodo de la clase base


Eliminacin de mtodos

Se puede acceder mediante la palabra reservada base

C# 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

Gestin de tipo en C#

Mtodos y clases abstractas


Se permite asignar a una variable todos los objetos de generados a partir de esta clase y de sus subclases pero a la inversa esto no es cierto (no se cumple la condicin de que una cosa 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 */

Un mtodo se dice que es abstracto si lo declaramos pero no lo implementamos. Utilidad:


podemos d ll llamar a mtodos t d que an no hemos h 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


Mtodos y clases abstractas

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

04/12/2008

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


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. 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

04/12/2008

Mtodos y clases abstractas


Interfaces

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.

Definicin informal:

Es una clase abstracta sin variables de instancia en donde todos sus mtodos son abstractos Es un contrato que establece una clase en el cual esta clase asegura que implementar un conjunto de mtodos

Definicin formal:

Interfaces

Interfaces

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

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

04/12/2008

Ejercicio

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) energa ) y otros presas (son comidos y proporcionan energa), y otros pueden actuar tanto como depredadores como presas.

Ecosistema con herencia mltiple

Disear este ecosistema empleando herencia mltiple Disear este ecosistema empleando herencia sencilla

Ejercicio

Ejercicio

Ecosistema con herencia mltiple


Ecosistema con herencia sencilla

Ventajas de esta representacin:


Es la ms cercana al modelo real Reutilizamos cdigo de las superclases Pocos lenguajes de programacin admiten herencia mltiple (C++) Es ms difcil de implementar (ciclos, variables distintas de distintitas clases pero con el mismo nombre,)

Desventajas:

Ejercicio

Ejercicio

Ecosistema con herencia sencilla


Ecosistema con herencia sencilla y interfaces

Ventajas:

Si lo implementamos bien puede simular el mismo modelo d l 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

Desventajas:

04/12/2008

Ejercicio

Ejercicio

Ecosistema con herencia sencilla y interfaces


Ventajas:

Ecosistema con herencia sencilla y interfaces (segundo enfoque):

El modelo refleja bastante fielmente la situacin real Las clases implementadas son conceptualmente correctas Se deben implementar los interfaces. No hay reutilizacin de cdigo.

Desventajas:

Ejercicio

Ecosistema con herencia sencilla y interfaces (segundo enfoque):


Ventajas

El modelo refleja bastante fielmente la situacin real No hay que implementar los interfaces Las clases implementadas no son del todo conceptualmente correctas pero evitamos un mal uso

Desventajas

10

También podría gustarte