Herencia yPolimorfismo

22
Polimorfismo y Herencia en Java Principios de la POO Realizado por: José Daniel Pluas Ci 14.331.732

Transcript of Herencia yPolimorfismo

Page 1: Herencia yPolimorfismo

Polimorfismoy Herencia

en Java

Principios de la POO

Realizado por:José Daniel PluasCi 14.331.732

Page 2: Herencia yPolimorfismo

Herencia

"La herencia es un mecanismo que permite la definición de una clase a partir de la definición de otra ya existente. La herencia permite compartir automáticamente métodos y datos entre clases, subclases y objetos."

Page 3: Herencia yPolimorfismo

Herencia

El siguiente ejemplo es un caso en el que vamos a simular el comportamiento que tendrían los diferentes integrantes de la selección española de futbol; definiendo tres clases que van a representar objetos Futbolista, Entrenador y Masajista. De cada unos de ellos vamos a necesitar algunos datos que reflejaremos en los atributos y una serie de acciones que reflejaremos en sus métodos. Estos atributos y métodos los mostramos en el siguiente diagrama de clases:

Page 4: Herencia yPolimorfismo

Herencia

En las tres clases tenemos atributos y métodos que son iguales ya que los tres tienen los atributosid, Nombre, Apellidos y Edad; y los tres tienen los métodos de Viajar y Concentrarse

Page 5: Herencia yPolimorfismo

HerenciaA nivel de código tenemos lo siguiente tras ver el diagrama de clases

Page 6: Herencia yPolimorfismo

HerenciaEn este punto es que estamos escribiendo mucho código repetido ya que las tres clases tienen métodos y atributos comunes, de ahí y como veremos enseguida, decimos que la herencia consiste en "sacar factor común" para no escribir código de más, por tanto lo que haremos sera crearnos una clase con el "código que es común a las tres clases" (a esta clase se le denomina en la herencia como"Clase Padre o SuperClase") y el código que es especifico de cada clase, lo dejaremos en ella, siendo denominadas estas clases como"Clases Hijas", las cuales heredan de la clase padre todos los atributos y métodos públicos o protegidos. Es muy importante decir que las clases hijas no van a heredar nunca los atributos y métodos privados de la clase padre

Page 7: Herencia yPolimorfismo

Herencia

Page 8: Herencia yPolimorfismo

HerenciaA nivel de código tenemos los siguientes cambios

Page 9: Herencia yPolimorfismo

HerenciaComo se puede observar queda un código más limpio, estructurado y con menos líneas de código, lo que lo hace más legible, y es un código reutilizable, lo que significa que ahora si queremos añadir más clases a nuestra aplicación como por ejemplo una clase Médico, Utiller@, Jefe/a de prensa etc. que pertenezcan también al equipo técnico de la selección, lo podemos hacer de forma muy sencilla ya que en la clase padre (SeleccionFutbol) tenemos implementado parte de sus datos y de su comportamiento y solo habrá que implementar los atributos y métodos propios de esa clase.

Page 10: Herencia yPolimorfismo

HerenciaEn el código que se ha escrito hay dos palabras reservadas que son "extends", "protected" y "super". El significado de ellas es el siguiente:extends: Esta palabra reservada, indica a la clase hija cual va a ser su clase padre, es decir que por ejemplo en la clase Futbolista al poner "public class Futbolista extends SeleccionFutbol" le estamos indicando a la clase 'Futbolista' que su clase padre es la clase 'SeleccionFutbol' o dicho de otra manera le decimos a la clase 'Futbolista' que se 'copie' todos los atributos y métodos públicos o protegidos de la clase 'SeleccionFutbol'.

protected: sirve para indicar un tipo de visibilidad de los atributos y métodos de la clase padre y significa que cuando un atributo es 'protected' o protegido, solo es visible ese atributo o método desde una de las clases hijas y no desde otra clase.

super: sirve para llamar al constructor de la clase padre.

Page 11: Herencia yPolimorfismo

Polimorfismo

El Polimorfismo es uno de los 4 pilares de la programación orientada a objetos (POO) junto con la Abstracción, Encapsulación y Herencia. Este termino se utiliza en la POO para “referirse a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos“.

Page 12: Herencia yPolimorfismo

Polimorfismo El Polimorfismo es uno de los 4 pilares de la programación

orientada a objetos (POO) junto con la Abstracción, Encapsulación y Herencia. Este termino se utiliza en la POO para “referirse a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos“. Vamos a colocar el ejemplo anterior en la que queríamos simular el comportamiento que tendrían los diferentes integrantes de la selección española de fútbol

Page 13: Herencia yPolimorfismo

Polimorfismo . Para este ejemplo nos vamos a basar en el siguiente diagrama de clases:

Page 14: Herencia yPolimorfismo

Polimorfismo Este sería el código

Page 15: Herencia yPolimorfismo

Polimorfismo Al ver este código notamos que se utiliza dos veces la palabra reservada

“abstract“. Esta palabra nos indica que la clase “SeleccionFutbol” es una clase abstracta y las clases abstractas no se pueden instanciar, por tanto nunca podremos hacer un “new SeleccionFutbol()”. Otra cosa que vemos es que también utilizamos la palabra reservada abstract en un método (en el método entrenamiento). Esto quiere decir que todas las clases hijas de la clase “SeleccionFubol” tienen que tener implementado ese método obligatoriamente. Por tanto con esto que se acaba de contar y diciendo que la palabra “Polimorfismo” significa “muchas formas”, podéis deducir que la clase “SeleccionFutbol” es una clase que puede adoptar diferentes formas y en este ejemplo puede adoptar las formas de“Futbolista”, “Entrenador” y “Masajista”.

Page 16: Herencia yPolimorfismo

Polimorfismo Una cosa muy buena que tiene la herencia y el

polimorfismo, es que las clases hijas no solo heredan los métodos (o la implementación de los métodos) de las clases padre, sino que las clases hijas se pueden especializar. Esto significa que una clase hija puede “redefinir” los métodos de su clase padre; es decir, que se puede volver a escribir ese método y de ahi la especialización.

Page 17: Herencia yPolimorfismo

PolimorfismoVamos a ver la implementación de las clases hijas:

Page 18: Herencia yPolimorfismo

Polimorfismo

Page 19: Herencia yPolimorfismo

Polimorfismo

Page 20: Herencia yPolimorfismo

Polimorfismo Como vemos en el código todas las clases hijas tienen implementada el

método “entrenamiento()” ya que al tenerlo en la clase padre como método abstracto, es obligatorio que todas las clases hijas tengan ese método. Por otro lado observamos en el código que encima del método “entrenamiento()” y otros métodos, tenemos la etiqueta “@Override“. Esta etiqueta sirve para indicar en el código que estamos“re-escribiendo o especializando” un método que se encuentra en la clase padre y que queremos redefinir en la clase hija. Esta etiqueta solo y exclusivamente esta en los métodos de las clases hijas que tenemos definida en la clase padre, por tanto cuando se llame a esos métodos, las clases hijas ejecutaran el método redefinido en la clase hija y las que no lo hayan redefinido se ejecutará es método de la clase padre.

Page 21: Herencia yPolimorfismo

PolimorfismoEn la siguiente imagen vemos como hacemos estas especializaciones:

Page 22: Herencia yPolimorfismo

Polimorfismo El polimorfismo es un concepto un poco más avanzado

que la herencia y puede ser muy útil a la hora de jerarquizar y querer dar un patrón de comportamiento común a una serie de objetos que heredan de la misma clase.