Sie sind auf Seite 1von 26

POLIMORFISMO

POLIMORFISMO
"una interfaz, mltiples
"una interfaz, mltiples
mtodos".
mtodos".
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 2 2
POLIMORFISMO
POLIMORFISMO
Indice
Indice

Definicin y
Definicin y
caracteristicas
caracteristicas

Objetivos.
Objetivos.

SOBRRESCRITURA
SOBRRESCRITURA
-
-
SOBRECARGA
SOBRECARGA

Clases y mtodos abstractos
Clases y mtodos abstractos

INTERFACES (herencia mltiple)
INTERFACES (herencia mltiple)

Subclase,Clase
Subclase,Clase
abstracta e
abstracta e
Interface
Interface

Interface
Interface
vs. Clase Abstracta
vs. Clase Abstracta

Ejemplo: (4)
Ejemplo: (4)
Project
Project
Musica
Musica
(Instrumentos).
(Instrumentos).
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 3 3
POLIMORFISMO
POLIMORFISMO
Definicion
Definicion
y caractersticas
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 20/02/2007 Polimorfismo Polimorfismo 4 4
POLIMORFISMO
POLIMORFISMO
Definicion
Definicion
y caractersticas
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:
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 5 5
POLIMORFISMO
POLIMORFISMO
Definicion
Definicion
y caractersticas
y caractersticas
El polimorfismo esta presente cuando se
El polimorfismo esta presente cuando se
envia
envia
un
un
mensaje a un objeto del que no se sabe su tipo,
mensaje a un objeto del que no se sabe su tipo,
ejecutndose el mtodo adecuado de acuerdo con su
ejecutndose el mtodo adecuado de acuerdo con su
tipo.
tipo.
Enlace dinmico: Se elige el mtodo a ejecutar en
Enlace dinmico: Se elige el mtodo a ejecutar en
tiempo de ejecucin, en funcin de la clase del objeto;
tiempo de ejecucin, en funcin de la clase del objeto;
Es la implementacin del polimorfismo.
Es la implementacin del polimorfismo.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 6 6
POLIMORFISMO
POLIMORFISMO
Definicion
Definicion
y caractersticas
y caractersticas

Moldes de
Moldes de
objetos(castings
objetos(castings
):
):

Realizan conversiones de tipo, no modifican al objeto,
Realizan conversiones de tipo, no modifican al objeto,
solo su tipo.
solo su tipo.

Upcasting
Upcasting
: 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 especificarlo No hace falta especificarlo

Downcasting
Downcasting
: 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 tip Se especifica precediendo al objeto a convertir con el nuevo tipo o
entre parntesis. entre parntesis.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 7 7
POLIMORFISMO
POLIMORFISMO
Definicion
Definicion
y caractersticas
y caractersticas

Ejemplo
Ejemplo
upcasting
upcasting
polimorfismo
polimorfismo

(1)
(1)
Project
Project
Polimorfismo,Polimorfismo2
Polimorfismo,Polimorfismo2
(
(
Mamifero
Mamifero
).
).
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 8 8
POLIMORFISMO
POLIMORFISMO
Definicin y caractersticas
Definicin y caractersticas
Tras realizar una conexin polimorfa es frecuente la necesidad d Tras realizar una conexin 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 operacin inversa al Se trata de la operacin inversa al polimorfismo(upcasting polimorfismo(upcasting), ),
denominada denominada downcasting downcasting. .
Si el polimorfismo implica una generalizacin, el Si el polimorfismo implica una generalizacin, el downcasting downcasting
implica una especializacin. implica una especializacin.
Al contrario que el Al contrario que el upcasting upcasting, el , el downcasting downcasting no puede realizarse no puede realizarse
directamente mediante una conexin con una referencia de la clas directamente mediante una conexin con una referencia de la clase e
del objeto. del objeto.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 9 9
POLIMORFISMO
POLIMORFISMO
Definicin y caractersticas
Definicin y caractersticas
Utilizar
Utilizar
instanceof
instanceof
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
casting
casting
.
.

La operacin
La operacin
getClass
getClass
() de
() de
Object
Object
devuelve un objeto
devuelve un objeto
de la clase
de la clase
Class
Class
que permite obtener en tiempo de
que permite obtener en tiempo de
ejecucin gran cantidad de informacin de la clase a la
ejecucin gran cantidad de informacin de la clase a la
que pertenece el objeto. El atributo esttico
que pertenece el objeto. El atributo esttico
class
class
de la
de la
clase tambin devuelve una referencia a este objeto
clase tambin devuelve una referencia a este objeto
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 10 10
POLIMORFISMO
POLIMORFISMO
Objetivos
Objetivos

Objetivo:
Objetivo:
reutilizacion
reutilizacion
y flexibilidad.
y flexibilidad.

Facilidad para adaptarse a cambios


Facilidad para adaptarse a cambios

Cmo se consigue?
Cmo se consigue?
Interfaces
Interfaces
Clases abstractas
Clases abstractas
Mtodos polimrficos
Mtodos polimrficos

Implementacin de colecciones y mtodos


Implementacin de colecciones y mtodos
genricos.
genricos.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 11 11
POLIMORFISMO
POLIMORFISMO
Objetivos
Objetivos

Permite cdigo independiente del tipo.


Permite cdigo independiente del tipo.
Fcil de escribir y entender.
Fcil de escribir y entender.

Al aadir nuevos tipos:


Al aadir nuevos tipos:

No hay que reescribir cdigo


No hay que reescribir cdigo

Programas extensibles
Programas extensibles
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 12 12
POLIMORFISMO
POLIMORFISMO
Objetivos
Objetivos
ANIMAL
FELINO CANINO
LOBO PERRO LEON TIGRE GATO
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 13 13
POLIMORFISMO
POLIMORFISMO
Objetivos
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 20/02/2007 Polimorfismo Polimorfismo 14 14
POLIMORFISMO
POLIMORFISMO
Objetivos
Objetivos
FIGURA
CUADRADO TRIANGULO CIRCULO
MATEMTICO
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 15 15
POLIMORFISMO
POLIMORFISMO
Objetivos
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 20/02/2007 Polimorfismo Polimorfismo 16 16
POLIMORFISMO
POLIMORFISMO
SOBREESCRITURA
SOBREESCRITURA
-
-
SOBRECARGA
SOBRECARGA

SOBREESCRITURA: La subclase
SOBREESCRITURA: La subclase
reimplementa
reimplementa
el
el
mtodo heredado (cambian el comportamiento).
mtodo heredado (cambian el comportamiento).

SOBRECARGA: Varias implementaciones del mismo
SOBRECARGA: Varias implementaciones del mismo
mtodo con distintos parmetros (cambio de interfaz).
mtodo con distintos parmetros (cambio de interfaz).
Muy habitual en
Muy habitual en
constructores
constructores
.
.
Es aqu donde realmente se aprecia los beneficios del polimorfis Es 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 conexin polimorfa Pero siempre debe quedar claro que tras la conexin polimorfa
nicamente podemos acceder a las operaciones pertenecientes a la nicamente podemos acceder a las operaciones pertenecientes a la
clase asociada a la referencia. El resto de operaciones del obje clase asociada a la referencia. El resto de operaciones del objeto no to no
son accesibles a travs de esta referencia son accesibles a travs de esta referencia
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 17 17
POLIMORFISMO
POLIMORFISMO
SOBRRESCRITURA
SOBRRESCRITURA
-
-
SOBRECARGA
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 20/02/2007 Polimorfismo Polimorfismo 18 18
POLIMORFISMO
POLIMORFISMO
Clases y mtodos abstractos
Clases y mtodos abstractos

Clases
Clases
abstractas
abstractas
:
:
A menudo existen clases que
A menudo existen clases que
sirven para definir un tipo genrico pero que no
sirven para definir un tipo genrico pero que no
tiene sentido
tiene sentido
instanciar
instanciar
(crear objetos de ella).
(crear objetos de ella).

Mtodos abstractos:
Mtodos abstractos:
Un mtodo abstracto
Un mtodo 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 mtodos abstractos


Una clase con uno o varios mtodos 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 mtodos abstractos.
tener mtodos abstractos.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 19 19
POLIMORFISMO
POLIMORFISMO
INTERFACES (herencia mltiple)
INTERFACES (herencia mltiple)

Los interfaces en Java nos solucionan en parte la no
Los interfaces en Java nos solucionan en parte la no
existencia de la herencia mltiple.
existencia de la herencia mltiple.

Los interfaces son un tipo de clase especial que no
Los interfaces son un tipo de clase especial que no
implementa ninguno de sus mtodos. Todos son
implementa ninguno de sus mtodos. Todos son
abstractos. Por tanto no se pueden
abstractos. Por tanto no se pueden
instanciar
instanciar
.
.

De los interfaces tambin se hereda, aunque se Suele
De los interfaces tambin se hereda, aunque se Suele
decir implementa. Y se realiza mediante la
decir implementa. Y se realiza mediante la
keyword
keyword
:
:
implements
implements
.
.

Si una clase que hereda de un
Si una clase que hereda de un
interface
interface
, no implementa
, no implementa
todos los mtodos de este, deber ser definida como
todos los mtodos de este, deber ser definida como
abstracta.
abstracta.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 20 20
POLIMORFISMO
POLIMORFISMO
INTERFACES
INTERFACES
(herencia mltiple)
(herencia mltiple)

Para qu se utiliza?
Para qu se utiliza?

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

Definen un comportamiento (o funcionalidad) genrico,
Definen un comportamiento (o funcionalidad) genrico,
ignorando los aspectos relacionados con su
ignorando los aspectos relacionados con su
implementacin.
implementacin.

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.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 21 21
POLIMORFISMO
POLIMORFISMO
INTERFACES
INTERFACES
(herencia mltiple)
(herencia mltiple)

(3)
(3)
Project
Project
HerenciaMultiple2
HerenciaMultiple2
(Anfibio).
(Anfibio).
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 22 22
POLIMORFISMO
POLIMORFISMO
Subclase,Clase
Subclase,Clase
abstracta e
abstracta e
Interface
Interface

Subclase:
Subclase: Necesitemos hacer una especializacin de la Necesitemos hacer una especializacin de la
superclase mediante superclase mediante sobreescritura sobreescritura o aadiendo nuevos mtodos. o aadiendo nuevos mtodos.

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

Interface
Interface
:
: Queremos definir un grupo genrico de clases y no Queremos definir un grupo genrico de clases y no
tengamos mtodos implementados que reutilizar. O cuando nos tengamos mtodos implementados que reutilizar. O cuando nos
veamos forzados por la falta de herencia mltiple en Java. veamos forzados por la falta de herencia mltiple en Java.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 23 23
POLIMORFISMO
POLIMORFISMO
Interface
Interface
vs. Clase Abstracta
vs. Clase Abstracta

Un
Un
interface
interface
no puede implementar ningn mtodo.
no puede implementar ningn mtodo.

Un
Un
interface
interface
no forma parte de la jerarqua de clases.
no forma parte de la jerarqua de clases.
Clases dispares pueden implementar el mismo
Clases dispares pueden implementar el mismo
interface
interface
.
.

Una clase puede implementar n interfaces pero solo una
Una clase puede implementar n interfaces pero solo una
clase.
clase.

El objetivo de un mtodo abstracto es forzar una interfaz
El objetivo de un mtodo abstracto es forzar una interfaz
(API) pero no una implementacin.
(API) pero no una implementacin.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 24 24
POLIMORFISMO
POLIMORFISMO
Interface
Interface
vs. Clase Abstracta
vs. Clase Abstracta

Haremos un
Haremos un
interface
interface
cuando queramos definir un
cuando queramos definir un
grupo genrico de clases y no tengamos mtodos
grupo genrico de clases y no tengamos mtodos
implementados que reutilizar. O cuando nos
implementados que reutilizar. O cuando nos
veamos forzados por la falta de herencia mltiple
veamos forzados por la falta de herencia mltiple
en Java.
en Java.
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 25 25
POLIMORFISMO
POLIMORFISMO
Ejemplos de polimorfismo
Ejemplos de polimorfismo

(4)
(4)
Project
Project
Musica
Musica
(Instrumentos).
(Instrumentos).
20/02/2007 20/02/2007 Polimorfismo Polimorfismo 26 26
DIAGRAMA DE CLASES: MUSICA

Das könnte Ihnen auch gefallen