Title: POLIMORFISMO "una interfaz, m
1POLIMORFISMO"una interfaz, múltiples métodos".
2POLIMORFISMOIndice
- Definición y caracteristicas
- Objetivos.
- SOBRRESCRITURA-SOBRECARGA
- Clases y métodos abstractos
- INTERFACES (herencia múltiple)
- Subclase,Clase abstracta e Interface
- Interface vs. Clase Abstracta
- Ejemplo (4)Project Musica (Instrumentos).
3POLIMORFISMODefinicion y características
Son dos mecanismos (up,downcasting) relacionados
que otorgan a la OOP una gran potencia frente a
otros paradigmas de programación
Únicamente tienen sentido por la existencia de
la herencia
El sentido del polimorfismo (up-casting) es
realizar una generalización, olvidar los detalles
concretos de uno o varios objetos de distintas
clases y buscar un punto común a todos ellos en
un ancestro.
4POLIMORFISMODefinicion y características
Una variable referencia es polimórfica cuando su
tipo de declaración no coincide con el tipo del
objeto al que referencia
Figura f1 new Figura(Estandar, Rojo)
Figura f2 new Circulo(Verde, 5.0)
5POLIMORFISMODefinicion y características
- El polimorfismo esta presente cuando se envia un
mensaje a un objeto del que no se sabe su tipo,
ejecutánodse el metodo adecuado de acuerdo con su
tipo. -
- Enlace dinamico Se elige el metodo a ejecutar
en tiempo de ejecucion, en funcion de la clase
del objeto Es la implementacion del
polimorfismo.
6POLIMORFISMODefinicion y características
- Moldes de objetos(castings)
- Realizan conversiones de tipo, no modifican al
objeto, solo su tipo. - Upcasting Interpretar un objeto de una clase
derivada como del mismo tipo que la clase base. - No hace falta especificarlo
- Downcasting Interpretar un objeto de una clase
base como del mismo tipo que una clase derivada
suya. - Se especifica precediendo al objeto a convertir
con el nuevo tipo entre paréntesis. -
7POLIMORFISMODefinicion y características
- Ejemplo upcasting polimorfismo
- (1)Project Polimorfismo,Polimorfismo2 (Mamifero).
8POLIMORFISMODefinicion y características
- Tras realizar una conexión polimorfa es
frecuente la necesidad de volver a recuperar el
objeto original, para acceder a sus operaciones
propias. -
- Se trata de la operación inversa al
polimorfismo(upcasting), denominada downcasting. -
- Si el polimorfismo implica una generalización,
el downcasting implica una especialización. -
- Al contrario que el upcasting, el downcasting no
puede realizarse directamente mediante una
conexión con una referencia de la clase del
objeto. -
9POLIMORFISMODefinicion y características
- Utilizar instanceof para determinar si el
objeto es de la clase esperada antes de realizar
el casting. - La operación getClass () de Object devuelve un
objeto de la clase Class que permite obtener en
tiempo de ejecución gran cantidad de información
de la clase a la que pertenece el objeto. El
atributo estático class de la clase también
devuelve una referencia a este objeto
10POLIMORFISMOObjetivos
- Objetivo reutilizacion y flexibilidad.
- Facilidad para adaptarse a cambios
- Cómo se consigue?
- Interfaces
- Clases abstractas
- Métodos polimórficos
- Implementación de colecciones y métodos
genéricos.
11POLIMORFISMOObjetivos
- Permite código independiente del tipo.
- Fácil de escribir y entender.
- Al añadir nuevos tipos
- No hay que reescribir código
- Programas extensibles
12POLIMORFISMOObjetivos
13POLIMORFISMOObjetivos
EJEMPLO DE COLECCIÓN GENÉRICA public class
TestPolimorfismo public static void
main(String args) Animal animales new
Animal4 animales0 new Lobo()
animales1 new Perro() animales2 new
Leon() animales3 new Tigre() for(int
i0 iltanimales.length i) animalesi.dormir
() animalesi.comer()
14POLIMORFISMOObjetivos
15POLIMORFISMOObjetivos
EJEMPLO DE MÉTODO GENÉRICO public class
Matematico public double calcularArea(Figura
param) return param.calcularArea()
public class TestPolimorfismo public static
void main(String args) Matematico m new
Matematico() m.calcularArea(new Circulo())
m.calcularArea(new Triangulo())
16POLIMORFISMOSOBREESCRITURA-SOBRECARGA
- SOBREESCRITURA La subclase reimplementa el
método heredado (cambian el comportamiento). - SOBRECARGA Varias implementaciones del mismo
método con distintos parámetros (cambio de
interfaz). Muy habitual en constructores. - Es aquí donde realmente se aprecia los beneficios
del polimorfismo. - Sobrecargando el constructor conseguimos dotar a
la clase de flexibilidad. - Pero siempre debe quedar claro que tras la
conexión polimorfa únicamente podemos acceder a
las operaciones pertenecientes a la clase
asociada a la referencia. El resto de operaciones
del objeto no son accesibles a través de esta
referencia
17POLIMORFISMOSOBRRESCRITURA-SOBRECARGA
//Sobrecarga de constructores class Box
double width double height double depth
//El siguiente es el constructor específico
Box(double w, double h, double d) width
w height h depth d Box () width
height depth -1 //-1 indica volumen no
existente //Cubo,entonces, por qué introducir
3 valores? Box (double valor) width
height depth valor double volume()
return width height depth
18POLIMORFISMO Clases y métodos abstractos
- Clases abastractas A menudo existen clases que
sirven para definir un tipo genérico pero que no
tiene sentido instanciar (crear objetos de ella).
- Métodos abstractos Un método abstracto significa
que tiene que ser sobrescrito. No está
implementado. - Una clase con uno o varios métodos abstractos
tiene que ser declarada abstracta. - No obstante una clase abstracta no tiene porque
tener métodos abstractos.
19POLIMORFISMOINTERFACES (herencia múltiple)
- Los interfaces en Java nos solucionan en parte la
no existencia de la herencia múltiple. - Los interfaces son un tipo de clase especial que
no implementa ninguno de sus métodos. Todos son
abstractos. Por tanto no se pueden instanciar. - De los interfaces también se hereda, aunque se
Suele decir implementa. Y se realiza mediante la
keyword implements. - Si una clase que hereda de un interface, no
implementa todos los métodos de este, deberá ser
definida como abstracta.
20POLIMORFISMOINTERFACES (herencia múltiple)
- Para qué se utiliza?
- Para permitir la herencia múltiple (ya que la
herencia en Java sólo permite heredar de una sola
clase). - Definen un comportamiento (o funcionalidad)
genérico, ignorando los aspectos relacionados con
su implementación. - Las interfaces que implementa una clase se
comportan igual que las superclases en lo que
respecta al uso del polimorfismo.
21POLIMORFISMOINTERFACES (herencia múltiple)
- (3)Project HerenciaMultiple2 (Anfibio).
22POLIMORFISMOSubclase,Clase abstracta e Interface
- Subclase Necesitemos hacer una especialización
de la superclase mediante sobreescritura o
añadiendo nuevos métodos. - Clase abstracta Queremos definir un grupo
genérico de clases y además tengamos algunos
métodos implementados que reutilizar. - Interface Queremos definir un grupo genérico de
clases y no tengamos métodos implementados que
reutilizar. O cuando nos veamos forzados por la
falta de herencia múltiple en Java.
23POLIMORFISMOInterface vs. Clase Abstracta
- Un interface no puede implementar ningún método.
- Un interface no forma parte de la jerarquía de
clases. Clases dispares pueden implementar el
mismo interface. - Una clase puede implementar n interfaces pero
solo una clase. - El objetivo de un método abstracto es forzar una
interfaz (API) pero no una implementación.
24POLIMORFISMOInterface vs. Clase Abstracta
- Haremos un interface cuando queramos definir un
grupo genérico de clases y no tengamos métodos
implementados que reutilizar. O cuando nos
veamos forzados por la falta de herencia
múltiple en Java.
25POLIMORFISMOEjemplos de polimorfismo
- (4)Project Musica (Instrumentos).
26DIAGRAMA DE CLASES MUSICA