Está en la página 1de 26

POLIMORFISMO "una interfaz, mltiples mtodos".

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).

20/02/2007

Polimorfismo

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.

20/02/2007

Polimorfismo

POLIMORFISMO Definicion y caractersticas


Una variable referencia es polimrfica cuando su tipo de declaracin no coincide con el tipo del objeto al que referencia:

Figura f1 = new Figura(Estandar, Rojo);

Figura f2 = new Circulo(Verde, 5.0);

20/02/2007

Polimorfismo

POLIMORFISMO Definicion y caractersticas


El polimorfismo esta presente cuando se envia un mensaje a un objeto del que no se sabe su tipo, ejecutndose el mtodo adecuado de acuerdo con su tipo. Enlace dinmico: Se elige el mtodo a ejecutar en tiempo de ejecucin, en funcin de la clase del objeto; Es la implementacin del polimorfismo.

20/02/2007

Polimorfismo

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.

20/02/2007

Polimorfismo

POLIMORFISMO Definicion y caractersticas

Ejemplo upcasting polimorfismo (1)Project Polimorfismo,Polimorfismo2 (Mamifero).

20/02/2007

Polimorfismo

POLIMORFISMO Definicin 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.

20/02/2007

Polimorfismo

POLIMORFISMO Definicin 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

20/02/2007

Polimorfismo

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.


20/02/2007 Polimorfismo 10

POLIMORFISMO Objetivos Permite cdigo independiente del tipo.


Fcil de escribir y entender.

Al aadir nuevos tipos:


No hay que reescribir cdigo Programas extensibles

20/02/2007

Polimorfismo

11

POLIMORFISMO Objetivos

ANIMAL FELINO LEON TIGRE GATO LOBO CANINO PERRO

20/02/2007

Polimorfismo

12

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(); } } }

20/02/2007

Polimorfismo

13

POLIMORFISMO Objetivos
MATEMTICO CIRCULO

FIGURA CUADRADO TRIANGULO

20/02/2007

Polimorfismo

14

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()); } }

20/02/2007

Polimorfismo

15

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

20/02/2007

Polimorfismo

16

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; }

20/02/2007

Polimorfismo

17

POLIMORFISMO Clases y mtodos abstractos Clases abstractas: 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.
20/02/2007 Polimorfismo 18

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.

20/02/2007

Polimorfismo

19

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.
20/02/2007 Polimorfismo 20

POLIMORFISMO INTERFACES (herencia mltiple)


(3)Project HerenciaMultiple2 (Anfibio).

20/02/2007

Polimorfismo

21

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.

20/02/2007

Polimorfismo

22

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.

20/02/2007

Polimorfismo

23

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.

20/02/2007

Polimorfismo

24

POLIMORFISMO Ejemplos de polimorfismo

(4)Project Musica (Instrumentos).

20/02/2007

Polimorfismo

25

DIAGRAMA DE CLASES: MUSICA

20/02/2007

Polimorfismo

26

También podría gustarte