+ All Categories
Home > Design > polimorfismo

polimorfismo

Date post: 11-Jun-2015
Category:
Upload: mickie-net
View: 941 times
Download: 1 times
Share this document with a friend
Description:
polimorfismo java
Popular Tags:
26
POLIMORFISMO POLIMORFISMO "una interfaz, múltiples "una interfaz, múltiples métodos". métodos".
Transcript
Page 1: polimorfismo

POLIMORFISMOPOLIMORFISMO"una interfaz, múltiples "una interfaz, múltiples

métodos". métodos".

Page 2: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 22

POLIMORFISMOPOLIMORFISMOIndiceIndice

Definición y Definición y caracteristicascaracteristicasObjetivos.Objetivos.SOBRRESCRITURASOBRRESCRITURA--SOBRECARGASOBRECARGAClases y métodos abstractosClases y métodos abstractosINTERFACES (herencia múltiple)INTERFACES (herencia múltiple)Subclase,ClaseSubclase,Clase abstracta e abstracta e InterfaceInterfaceInterfaceInterface vs. Clase Abstracta vs. Clase Abstracta Ejemplo: (4)Ejemplo: (4)ProjectProject MusicaMusica (Instrumentos).(Instrumentos).

Page 3: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 33

POLIMORFISMOPOLIMORFISMODefinicionDefinicion y característicasy 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.

Page 4: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 44

POLIMORFISMOPOLIMORFISMODefinicionDefinicion y característicasy características

Figura f1 = new Figura(“Estandar”, “Rojo”);

Figura f2 = new Circulo(“Verde”, 5.0);

Una variable referencia es polimórfica cuando su tipo de declaración no coincide con el tipo del objeto al que referencia:

Page 5: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 55

POLIMORFISMOPOLIMORFISMODefinicionDefinicion y característicasy características

El polimorfismo esta presente cuando se El polimorfismo esta presente cuando se enviaenvia un un mensaje a un objeto del que no se sabe su tipo, mensaje a un objeto del que no se sabe su tipo, ejecutándose el método adecuado de acuerdo con su ejecutándose el método adecuado de acuerdo con su tipo.tipo.

Enlace dinámico: Se elige el método a ejecutar en Enlace dinámico: Se elige el método a ejecutar en tiempo de ejecución, en función de la clase del objeto; tiempo de ejecución, en función de la clase del objeto; Es la implementación del polimorfismo.Es la implementación del polimorfismo.

Page 6: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 66

POLIMORFISMOPOLIMORFISMODefinicionDefinicion y característicasy características

Moldes de Moldes de objetos(castingsobjetos(castings):):Realizan conversiones de tipo, no modifican al objeto, Realizan conversiones de tipo, no modifican al objeto, solo su tipo.solo su tipo.UpcastingUpcasting : Interpretar un objeto de una clase derivada : Interpretar un objeto de una clase derivada como del mismo tipo que la clase base.como del mismo tipo que la clase base.

No hace falta especificarloNo hace falta especificarloDowncastingDowncasting: Interpretar un objeto de una clase base : Interpretar un objeto de una clase base como del mismo tipo que una clase derivada suya.como del mismo tipo que una clase derivada suya.

Se especifica precediendo al objeto a convertir con el nuevo tipSe especifica precediendo al objeto a convertir con el nuevo tipo o entre paréntesis.entre paréntesis.

Page 7: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 77

POLIMORFISMOPOLIMORFISMODefinicionDefinicion y característicasy características

Ejemplo Ejemplo upcastingupcasting polimorfismopolimorfismo

(1)(1)ProjectProject Polimorfismo,Polimorfismo2Polimorfismo,Polimorfismo2((MamiferoMamifero).).

Page 8: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 88

POLIMORFISMOPOLIMORFISMODefinición y característicasDefinición y características

Tras realizar una conexión polimorfa es frecuente la necesidad dTras realizar una conexión polimorfa es frecuente la necesidad de e volver a recuperar el objeto original, para acceder a sus volver a recuperar el objeto original, para acceder a sus operaciones propias.operaciones propias.

Se trata de la operación inversa al Se trata de la operación inversa al polimorfismo(upcastingpolimorfismo(upcasting), ), denominada denominada downcastingdowncasting..

Si el polimorfismo implica una generalización, el Si el polimorfismo implica una generalización, el downcastingdowncastingimplica una especialización.implica una especialización.

Al contrario que el Al contrario que el upcastingupcasting, el , el downcastingdowncasting no puede realizarse no puede realizarse directamente mediante una conexión con una referencia de la clasdirectamente mediante una conexión con una referencia de la clase e del objeto.del objeto.

Page 9: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 99

POLIMORFISMOPOLIMORFISMODefinición y característicasDefinición y características

Utilizar Utilizar instanceofinstanceof para determinar si el objeto es de la para determinar si el objeto es de la clase esperada antes de realizar el clase esperada antes de realizar el castingcasting..

La operación La operación getClassgetClass () de () de ObjectObject devuelve un objeto devuelve un objeto de la clase de la clase ClassClass que permite obtener en tiempo de que permite obtener en tiempo de ejecución gran cantidad de información de la clase a la ejecución gran cantidad de información de la clase a la que pertenece el objeto. El atributo estático que pertenece el objeto. El atributo estático classclass de la de la clase también devuelve una referencia a este objeto clase también devuelve una referencia a este objeto

Page 10: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1010

POLIMORFISMOPOLIMORFISMOObjetivosObjetivos

Objetivo: Objetivo: reutilizacionreutilizacion y flexibilidad.y flexibilidad.Facilidad para adaptarse a cambiosFacilidad para adaptarse a cambios¿Cómo se consigue?¿Cómo se consigue?

InterfacesInterfacesClases abstractasClases abstractasMétodos polimórficosMétodos polimórficos

Implementación de colecciones y métodos Implementación de colecciones y métodos genéricos.genéricos.

Page 11: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1111

POLIMORFISMOPOLIMORFISMOObjetivosObjetivos

Permite código independiente del tipo.Permite código independiente del tipo.Fácil de escribir y entender.Fácil de escribir y entender.

Al añadir nuevos tipos:Al añadir nuevos tipos:•• No hay que reescribir códigoNo hay que reescribir código•• Programas extensiblesProgramas extensibles

Page 12: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1212

POLIMORFISMOPOLIMORFISMOObjetivosObjetivos

ANIMAL

FELINO CANINO

LOBO PERROLEON TIGRE GATO

Page 13: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1313

POLIMORFISMOPOLIMORFISMOObjetivosObjetivos

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

Page 14: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1414

POLIMORFISMOPOLIMORFISMOObjetivosObjetivos

FIGURA

CUADRADO TRIANGULO CIRCULO

MATEMÁTICO

Page 15: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1515

POLIMORFISMOPOLIMORFISMOObjetivosObjetivos

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

} }

Page 16: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1616

POLIMORFISMOPOLIMORFISMOSOBREESCRITURASOBREESCRITURA--SOBRECARGASOBRECARGA

SOBREESCRITURA: La subclase SOBREESCRITURA: La subclase reimplementareimplementa el el método heredado (cambian el comportamiento).método heredado (cambian el comportamiento).SOBRECARGA: Varias implementaciones del mismo SOBRECARGA: Varias implementaciones del mismo método con distintos parámetros (cambio de interfaz). método con distintos parámetros (cambio de interfaz). Muy habitual en Muy habitual en constructoresconstructores. .

Es aquí donde realmente se aprecia los beneficios del polimorfisEs aquí donde realmente se aprecia los beneficios del polimorfismo.mo.Sobrecargando el constructor conseguimos dotar a la clase de Sobrecargando el constructor conseguimos dotar a la clase de flexibilidad. flexibilidad. Pero siempre debe quedar claro que tras la conexión polimorfa Pero siempre debe quedar claro que tras la conexión polimorfa únicamente podemos acceder a las operaciones pertenecientes a laúnicamente podemos acceder a las operaciones pertenecientes a laclase asociada a la referencia. El resto de operaciones del objeclase asociada a la referencia. El resto de operaciones del objeto no to no son accesibles a través de esta referenciason accesibles a través de esta referencia

Page 17: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1717

POLIMORFISMOPOLIMORFISMOSOBRRESCRITURASOBRRESCRITURA--SOBRECARGASOBRECARGA

//Sobrecarga de constructoresclass Box {double width;double height;double depth;//El siguiente es el constructor específicoBox(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;

}

Page 18: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1818

POLIMORFISMO POLIMORFISMO Clases y métodos abstractosClases y métodos abstractos

Clases Clases abstractasabstractas:: A menudo existen clases que A menudo existen clases que sirven para definir un tipo genérico pero que no sirven para definir un tipo genérico pero que no tiene sentido tiene sentido instanciarinstanciar (crear objetos de ella). (crear objetos de ella). Métodos abstractos:Métodos abstractos: Un método abstracto Un método abstracto significa que tiene que ser sobrescrito. No está significa que tiene que ser sobrescrito. No está implementado. implementado. Una clase con uno o varios métodos abstractos Una clase con uno o varios métodos abstractos tiene que ser declarada abstracta.tiene que ser declarada abstracta.No obstante una clase abstracta no tiene porque No obstante una clase abstracta no tiene porque tener métodos abstractos.tener métodos abstractos.

Page 19: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 1919

POLIMORFISMOPOLIMORFISMOINTERFACES (herencia múltiple)INTERFACES (herencia múltiple)

Los interfaces en Java nos solucionan en parte la no Los interfaces en Java nos solucionan en parte la no existencia de la herencia múltiple.existencia de la herencia múltiple.Los interfaces son un tipo de clase especial que no Los interfaces son un tipo de clase especial que no implementa ninguno de sus métodos. Todos son implementa ninguno de sus métodos. Todos son abstractos. Por tanto no se pueden abstractos. Por tanto no se pueden instanciarinstanciar. . De los interfaces también se hereda, aunque se Suele De los interfaces también se hereda, aunque se Suele decir implementa. Y se realiza mediante la decir implementa. Y se realiza mediante la keywordkeyword: : implementsimplements. . Si una clase que hereda de un Si una clase que hereda de un interfaceinterface, no implementa , no implementa todos los métodos de este, deberá ser definida como todos los métodos de este, deberá ser definida como abstracta.abstracta.

Page 20: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2020

POLIMORFISMOPOLIMORFISMOINTERFACES INTERFACES (herencia múltiple)(herencia múltiple)

¿Para qué se utiliza? ¿Para qué se utiliza?

Para permitir la herencia múltiple (ya que la herencia en Para permitir la herencia múltiple (ya que la herencia en Java sólo permite heredar de una sola clase).Java sólo permite heredar de una sola clase).

Definen un comportamiento (o funcionalidad) genérico, Definen un comportamiento (o funcionalidad) genérico, ignorando los aspectos relacionados con su ignorando los aspectos relacionados con su implementación.implementación.Las interfaces que implementa una clase se comportan Las interfaces que implementa una clase se comportan igual que las superclases en lo que respecta al uso del igual que las superclases en lo que respecta al uso del polimorfismo. polimorfismo.

Page 21: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2121

POLIMORFISMOPOLIMORFISMOINTERFACES INTERFACES (herencia múltiple)(herencia múltiple)

(3)(3)ProjectProject HerenciaMultiple2HerenciaMultiple2 (Anfibio).(Anfibio).

Page 22: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2222

POLIMORFISMOPOLIMORFISMOSubclase,ClaseSubclase,Clase abstracta e abstracta e InterfaceInterface

Subclase:Subclase: Necesitemos hacer una especialización de la Necesitemos hacer una especialización de la superclase mediante superclase mediante sobreescriturasobreescritura o añadiendo nuevos métodos.o añadiendo nuevos métodos.

Clase abstracta:Clase abstracta: Queremos definir un grupo genérico de clases y Queremos definir un grupo genérico de clases y

además tengamos algunos métodos implementados que reutilizar.además tengamos algunos métodos implementados que reutilizar.

InterfaceInterface:: Queremos definir un grupo genérico de clases y no Queremos definir un grupo genérico de clases y no tengamos métodos implementados que reutilizar. O cuando nos tengamos métodos implementados que reutilizar. O cuando nos veamos forzados por la falta de herencia múltiple en Java. veamos forzados por la falta de herencia múltiple en Java.

Page 23: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2323

POLIMORFISMOPOLIMORFISMOInterfaceInterface vs. Clase Abstractavs. Clase Abstracta

Un Un interfaceinterface no puede implementar ningún método. no puede implementar ningún método. Un Un interfaceinterface no forma parte de la jerarquía de clases. no forma parte de la jerarquía de clases. Clases dispares pueden implementar el mismo Clases dispares pueden implementar el mismo interfaceinterface..

Una clase puede implementar n interfaces pero solo una Una clase puede implementar n interfaces pero solo una clase. clase. El objetivo de un método abstracto es forzar una interfaz El objetivo de un método abstracto es forzar una interfaz (API) pero no una implementación. (API) pero no una implementación.

Page 24: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2424

POLIMORFISMOPOLIMORFISMOInterfaceInterface vs. Clase Abstractavs. Clase Abstracta

Haremos un Haremos un interfaceinterface cuando queramos definir un cuando queramos definir un grupo genérico de clases y no tengamos métodos grupo genérico de clases y no tengamos métodos implementados que reutilizar. O cuando nos implementados que reutilizar. O cuando nos veamos forzados por la falta de herencia múltiple veamos forzados por la falta de herencia múltiple en Java. en Java.

Page 25: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2525

POLIMORFISMOPOLIMORFISMOEjemplos de polimorfismo Ejemplos de polimorfismo

(4)(4)ProjectProject MusicaMusica (Instrumentos).(Instrumentos).

Page 26: polimorfismo

20/02/200720/02/2007 PolimorfismoPolimorfismo 2626

DIAGRAMA DE CLASES: MUSICA


Recommended