POLIMORFISMO
"una interfaz, múltiples métodos".
POLIMORFISMO
Indice
•
•
•
•
•
•
•
•
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).
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.2
POLIMORFISMO
Definicion 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.3
POLIMORFISMO
Definicion 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);
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.4
POLIMORFISMO
Definicion 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.5
POLIMORFISMO
Definicion 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.6
POLIMORFISMO
Definicion y características
• Ejemplo upcasting polimorfismo
• (1)Project Polimorfismo,Polimorfismo2
(Mamifero).
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.7
POLIMORFISMO
Definicion 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.8
POLIMORFISMO
Definicion 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
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.9
POLIMORFISMO
Objetivos
• 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.10
POLIMORFISMO
Objetivos
• 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
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.11
POLIMORFISMO
Objetivos
ANIMAL
FELINO
LEON
22/11/2005
TIGRE
CANINO
GATO
LOBO
E.T.S de Ingenieros de Telecomunicación - UPNA
PERRO
.12
POLIMORFISMO
Objetivos
EJEMPLO DE COLECCIÓN GENÉRICA
public class TestPolimorfismo{
public static void main(String[] args) {
Animal[] animales = new Animal[4];
animales[0] = new Lobo();
animales[1] = new Perro();
animales[2] = new Leon();
animales[3] = new Tigre();
for(int i=0; i<animales.length; i++) {
animales[i].dormir();
animales[i].comer();
}
}
}
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.13
POLIMORFISMO
Objetivos
MATEMÁTICO
FIGURA
CUADRADO
22/11/2005
TRIANGULO
CIRCULO
E.T.S de Ingenieros de Telecomunicación - UPNA
.14
POLIMORFISMO
Objetivos
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());
}
}
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.15
POLIMORFISMO
SOBREESCRITURA-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
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.16
POLIMORFISMO
SOBRRESCRITURA-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;
}
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.17
POLIMORFISMO
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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.18
POLIMORFISMO
INTERFACES (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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.19
POLIMORFISMO
INTERFACES (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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.20
POLIMORFISMO
INTERFACES (herencia múltiple)
• (3)Project HerenciaMultiple2 (Anfibio).
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.21
POLIMORFISMO
Subclase,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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.22
POLIMORFISMO
Interface 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.23
POLIMORFISMO
Interface 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.
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.24
POLIMORFISMO
Ejemplos de polimorfismo
• (4)Project Musica (Instrumentos).
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.25
DIAGRAMA DE CLASES: MUSICA
22/11/2005
E.T.S de Ingenieros de Telecomunicación - UPNA
.26
Descargar

POLIMORFISMO