Tema6-Herencia

10
04/12/2008 1 Tema 7 - Herencia Luis Gonzaga Pérez Cordón Índice Definición Ventajas Situaciones en las que se aplica la herencia Situaciones en las que se aplica la herencia Tipos de Herencia Herencia en C# Definición La 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 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 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 Ventajas Modelado de la realidad: las relaciones de especialización/generalización entre las entidades del mundo real. Evita redundancias Facilita la reutilización Sirve de soporte para el polimorfismo Situaciones en las que se aplica la herencia Situaciones: Especialización Extensión Especificación Construcción ?????

Transcript of Tema6-Herencia

Page 1: 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 ?????

Page 2: Tema6-Herencia

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;

Page 3: Tema6-Herencia

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

Page 4: Tema6-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?

Page 5: Tema6-Herencia

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

Page 6: Tema6-Herencia

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

Page 7: Tema6-Herencia

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

Page 8: Tema6-Herencia

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

Page 9: Tema6-Herencia

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

Page 10: Tema6-Herencia

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