Tema7 herencia

262 views

Published on

Tutorial de Herencia en java

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
262
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tema7 herencia

  1. 1. 1Tema 7 - HerenciaLuis Gonzaga Pérez CordónÍndiceDefiniciónVentajasSituaciones en las que se aplica la herenciaTipos de HerenciaHerencia en JavaDefiniciónLa herencia es un mecanismo de la P.D.O.que permite construir una clase incorporandode manera implícita todas las característicasde una clase previamente existente.EjemploABA es un ascendiente o superclase de B. Si laherencia entre A y B es directa decimos que A esla clase padre de BB 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
  2. 2. 2VentajasModelado de la realidad: las relaciones deespecialización/generalización entre lasentidades del mundo real.Evita redundanciasFacilita la reutilizaciónSirve de soporte para el polimorfismoSituaciones en las que se aplica laherenciaSituaciones:EspecializaciónExtensiónEspecificaciónConstrucción ?????Situaciones en las que se aplica laherenciaEspecializació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ículoCocheA es un B: un Coche es un VehículoSituaciones en las que se aplica laherenciaExtensión: una clase puede servir paraextender la funcionalidad de una superclasesin que represente necesariamente unconcepto más específico.VendedorVendedorConVehículo
  3. 3. 3Situaciones en las que se aplica laherenciaEspecificación: Una superclase puede servirpara especificar la funcionalidad mínimacomún de un conjunto de descendientes.ObjetoGrafico:seleccionarmoverescalarcambiarColorTexto Línea CuadradoSituaciones en las que se aplica laherenciaConstrucció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.ListaPilaSituaciones en las que se aplica laherenciaConstrucció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 laherenciaEjemplo: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;
  4. 4. 4Tipos de HerenciaPrincipalmente existen dos tipos de herencia.Herencia simple: una clase solo puede tener unpadre, por lo tanto la estructura de clases será enforma de arbol.Herencia múltiple: Una clase puede tener uno ovarios padres. La estructura de clases es un grafoTipos 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 modelarTipos de HerenciaHerencia múltiple:Es mas realista y da al programador más libertady mas posibilidades de reutilización de código.Es mucho más difícil de utilizar por la posibilidadde ciclos y para los lenguajes de programación esmuy costoso el permitirlo.Tipos de HerenciaEjemplo de herencia múltipleElAireMedioComunicacionTeléfonoObjetoFísico
  5. 5. 5Tipos de HerenciaEjemplo herencia múltiple:Constructor----------------------------Colegio colegio;Arquitecto--------------------construir()Aparejador--------------------construir()ArquitectoYAparejador----------------Colegio colegio; ?????construir()??????Herencia en JavaCaracterísticasComo se utilizaRedefinición de métodos, constructores,…Como funciona la gestión de tipos en javaMétodos y clases abstractasInterfacesEjemplos de herenciaHerencia en JavaCaracterísticasHerencia 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”Java no permite que una subclase elimine unmétodo o una variable de instancia aunque esta nola necesiteHerencia en JavaComo se utiliza:
  6. 6. 6Herencia en Java Herencia en JavaHerencia en JavaRedefinició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?
  7. 7. 7Redefinición de métodosRedefinición de métodosRedefinición de métodosRedefinició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 sentenciasuper()Hay una especia de “herencia” deconstructores
  8. 8. 8Constructores Eliminación de métodosJava no lo permiteSolución: redefinir el método en las subclasespara que se genero un error en caso de que sellame a un método no permitidoTipos Métodos y clases abstractasUn método se dice que es abstracto si lodeclaramos pero no lo implementamos.Utilidad:podemos 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
  9. 9. 9Mé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 abstractasMé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 quetendrán todas subclases de vehículo?¿Qué implementación tendrá en la superclase?¿Me aporta alguna ventaja?Métodos y clases abstractas
  10. 10. 10Mé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 almenos tiene un método que es abstracto.Este(os) método(s) abstracto(s) puede que lo hayadefinido 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 queusa un método abstracto?Para que una clase se declare como abstractatenemos que usar la palabra clave abstract
  11. 11. 11Mé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 abstractosDefinición formal:Es un contrato que establece una clase en el cualesta clase asegura que implementará un conjuntode métodosInterfaces InterfacesPara que una clase use un interfaz debeimplementar todos sus métodos e indicar queestá usando un interfaz.
  12. 12. 12InterfacesUtilidad de los interfaces: “simular” herenciamúltiple.Nota: los interfaces solo tienen sentido enlenguajes de programación que solo permitenusar la herencia simpleEjercicioDiseñar un ecosistema donde podemos encontrarvarios tipos de animales (gatos, perros, leones,ratones,…). Algunos de estos animales sondepredadores (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 sencillaEjercicioEcosistema con herencia múltiple
  13. 13. 13EjercicioEcosistema con herencia múltipleVentajas de esta representación:Es la más cercana al modelo realReutilizamos código de las superclasesDesventajas: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 sencillaEjercicioEcosistema con herencia sencillaVentajas:Si lo implementamos bien puede simular el mismomodeloDesventajas: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 olvidosEjercicioEcosistema con herencia sencilla y interfaces
  14. 14. 14EjercicioEcosistema con herencia sencilla y interfacesVentajas:El modelo refleja bastante fielmente la situación realLas clases implementadas son conceptualmentecorrectasDesventajas:Se deben implementar los interfaces. No hayreutilización de código.EjercicioEcosistema con herencia sencilla y interfaces(segundo enfoque):Ecosistema con herencia sencilla y interfaces(segundo enfoque):VentajasEl modelo refleja bastante fielmente la situación realNo hay que implementar los interfacesDesventajasLas clases implementadas no son del todoconceptualmente correctas pero evitamos un mal uso

×