Herencia yPolimorfismo
-
Upload
jose-d-pluas -
Category
Education
-
view
242 -
download
0
Transcript of Herencia yPolimorfismo
Polimorfismoy Herencia
en Java
Principios de la POO
Realizado por:José Daniel PluasCi 14.331.732
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."
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:
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
HerenciaA nivel de código tenemos lo siguiente tras ver el diagrama de clases
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
Herencia
HerenciaA nivel de código tenemos los siguientes cambios
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.
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.
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“.
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
Polimorfismo . Para este ejemplo nos vamos a basar en el siguiente diagrama de clases:
Polimorfismo Este sería el código
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”.
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.
PolimorfismoVamos a ver la implementación de las clases hijas:
Polimorfismo
Polimorfismo
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.
PolimorfismoEn la siguiente imagen vemos como hacemos estas especializaciones:
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.