Vous êtes sur la page 1sur 26

POLIMORFISMO

"una interfaz, mltiples mtodos".








22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.2
POLIMORFISMO
Indice
Definicin y caracteristicas
Objetivos.
SOBRRESCRITURA-SOBRECARGA
Clases y mtodos abstractos
INTERFACES (herencia mltiple)
Subclase,Clase abstracta e Interface
Interface vs. Clase Abstracta
Ejemplo: (4)Project Musica (Instrumentos).


22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.3
POLIMORFISMO
Definicion y caractersticas


Son dos mecanismos (up,downcasting)
relacionados que otorgan a la OOP una gran
potencia frente a otros paradigmas de
programacin

nicamente tienen sentido por la existencia
de la herencia

El sentido del polimorfismo (up-casting) es realizar una
generalizacin, olvidar los detalles concretos de uno o
varios objetos de distintas clases y buscar un punto
comn a todos ellos en un ancestro.
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.4
POLIMORFISMO
Definicion y caractersticas
Figura f1 = new Figura(Estandar, Rojo);
Figura f2 = new Circulo(Verde, 5.0);
Una variable referencia es polimrfica cuando
su tipo de declaracin no coincide con el tipo del
objeto al que referencia:
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.5
POLIMORFISMO
Definicion y caractersticas
El polimorfismo esta presente cuando se envia un
mensaje a un objeto del que no se sabe su tipo,
ejecutnodse 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 Telecomunicacin - UPNA
.6
POLIMORFISMO
Definicion y caractersticas
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 parntesis.



22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.7
POLIMORFISMO
Definicion y caractersticas
Ejemplo upcasting polimorfismo

(1)Project Polimorfismo,Polimorfismo2
(Mamifero).
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.8
POLIMORFISMO
Definicion y caractersticas
Tras realizar una conexin polimorfa es frecuente la necesidad de
volver a recuperar el objeto original, para acceder a sus
operaciones propias.

Se trata de la operacin inversa al polimorfismo(upcasting),
denominada downcasting.

Si el polimorfismo implica una generalizacin, el downcasting
implica una especializacin.

Al contrario que el upcasting, el downcasting no puede realizarse
directamente mediante una conexin con una referencia de la clase
del objeto.

22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.9
POLIMORFISMO
Definicion y caractersticas

Utilizar instanceof para determinar si el objeto es de la
clase esperada antes de realizar el casting.



La operacin getClass () de Object devuelve un objeto
de la clase Class que permite obtener en tiempo de
ejecucin gran cantidad de informacin de la clase a la
que pertenece el objeto. El atributo esttico class de la
clase tambin devuelve una referencia a este objeto
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.10
POLIMORFISMO
Objetivos
Objetivo: reutilizacion y flexibilidad.
Facilidad para adaptarse a cambios
Cmo se consigue?
Interfaces
Clases abstractas
Mtodos polimrficos
Implementacin de colecciones y mtodos
genricos.

22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.11
POLIMORFISMO
Objetivos
Permite cdigo independiente del tipo.
Fcil de escribir y entender.
Al aadir nuevos tipos:
No hay que reescribir cdigo
Programas extensibles
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.12
POLIMORFISMO
Objetivos
ANIMAL
FELINO CANINO
LOBO PERRO LEON TIGRE GATO
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.13
POLIMORFISMO
Objetivos
EJEMPLO DE COLECCIN GENRICA

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 Telecomunicacin - UPNA
.14
POLIMORFISMO
Objetivos
FIGURA
CUADRADO TRIANGULO CIRCULO
MATEMTICO
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.15
POLIMORFISMO
Objetivos

EJEMPLO DE MTODO GENRICO

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 Telecomunicacin - UPNA
.16
POLIMORFISMO
SOBREESCRITURA-SOBRECARGA
SOBREESCRITURA: La subclase reimplementa el
mtodo heredado (cambian el comportamiento).
SOBRECARGA: Varias implementaciones del mismo
mtodo con distintos parmetros (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 conexin 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 travs de esta referencia

22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.17
POLIMORFISMO
SOBRRESCRITURA-SOBRECARGA

//Sobrecarga de constructores
class Box {
double width;
double height;
double depth;
//El siguiente es el constructor especfico
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 Telecomunicacin - UPNA
.18
POLIMORFISMO
Clases y mtodos abstractos
Clases abastractas: A menudo existen clases que sirven
para definir un tipo genrico pero que no tiene sentido
instanciar (crear objetos de ella).
Mtodos abstractos: Un mtodo abstracto significa que
tiene que ser sobrescrito. No est implementado.
Una clase con uno o varios mtodos abstractos tiene
que ser declarada abstracta.
No obstante una clase abstracta no tiene porque tener
mtodos abstractos.
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.19
POLIMORFISMO
INTERFACES (herencia mltiple)
Los interfaces en Java nos solucionan en parte la no
existencia de la herencia mltiple.
Los interfaces son un tipo de clase especial que no
implementa ninguno de sus mtodos. Todos son
abstractos. Por tanto no se pueden instanciar.
De los interfaces tambin 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 mtodos de este, deber ser definida como
abstracta.
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.20
POLIMORFISMO
INTERFACES (herencia mltiple)
Para qu se utiliza?

Para permitir la herencia mltiple (ya que la herencia en
Java slo permite heredar de una sola clase).

Definen un comportamiento (o funcionalidad) genrico,
ignorando los aspectos relacionados con su
implementacin.
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 Telecomunicacin - UPNA
.21
POLIMORFISMO
INTERFACES (herencia mltiple)

(3)Project HerenciaMultiple2 (Anfibio).
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.22
POLIMORFISMO
Subclase,Clase abstracta e Interface
Subclase: Necesitemos hacer una especializacin de la
superclase mediante sobreescritura o aadiendo nuevos mtodos.

Clase abstracta: Queremos definir un grupo genrico de clases y
adems tengamos algunos mtodos implementados que reutilizar.

Interface: Queremos definir un grupo genrico de clases y no
tengamos mtodos implementados que reutilizar. O cuando nos
veamos forzados por la falta de herencia mltiple en Java.
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.23
POLIMORFISMO
Interface vs. Clase Abstracta
Un interface no puede implementar ningn mtodo.
Un interface no forma parte de la jerarqua de clases.
Clases dispares pueden implementar el mismo interface.


Una clase puede implementar n interfaces pero solo una
clase.
El objetivo de un mtodo abstracto es forzar una interfaz
(API) pero no una implementacin.
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.24
POLIMORFISMO
Interface vs. Clase Abstracta

Haremos un interface cuando queramos definir un
grupo genrico de clases y no tengamos mtodos
implementados que reutilizar. O cuando nos
veamos forzados por la falta de herencia mltiple
en Java.
22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.25
POLIMORFISMO
Ejemplos de polimorfismo


(4)Project Musica (Instrumentos).


22/11/2005
E.T.S de Ingenieros de Telecomunicacin - UPNA
.26







DIAGRAMA DE CLASES: MUSICA

Vous aimerez peut-être aussi