Anda di halaman 1dari 38

El polimorfismo

Justificacin
La importancia de el tema de investigacin
acerca del polimorfismo radica
principalmente en conocer, aplicar y
desarrollar el paradigma de la POO en el
desarrollo de aplicaciones profesionales
para la solucin de problemas en el campo
laboral y educativo
Objetivo General
Adquirir y aplicar la base del concomimiento
sobre el polimorfismo.
Objetivos especficos
Comprender el concepto de polimorfismo

Conocer y saber utilizar los diferentes tipos de polimorfismo.

Comprender el concepto de enlazado esttico y dinmico en los


lenguajes OO.

Comprender la relacin entre polimorfismo y herencia en los lenguajes


fuertemente tipados.

Apreciar la manera en que el polimorfismo hace que los sistemas sean


extensibles y mantenibles.
Definicin 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.
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);


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.
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.
POLIMORFISMO
Definicion y caractersticas

Ejemplo upcasting polimorfismo

(1)Project Polimorfismo,Polimorfismo2
(Mamifero).
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.
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
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.
POLIMORFISMO
Objetivos

Permite cdigo independiente del tipo.


Fcil de escribir y entender.
Al aadir nuevos tipos:
No hay que reescribir cdigo
Programas extensibles
POLIMORFISMO
Objetivos
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();
}
}
}
POLIMORFISMO
Objetivos
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());
}
}
Tipos de Polimorfismo
Tipos de Polimorfismo
Sobrecarga (Overloading, polimorfismo ad-hoc )
Sobrecarga basada en mbito
Sobrecarga basada en signaturas de tipo
Sobrecarga basada en signaturas de tipo
Sobrecarga basada en signaturas de tipo
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
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;
}
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.
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.
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.
POLIMORFISMO
INTERFACES (herencia mltiple)

(3)Project HerenciaMultiple2 (Anfibio).


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.
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.
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.
POLIMORFISMO
Ejemplos de polimorfismo

(4)Project Musica (Instrumentos).


DIAGRAMA DE CLASES: MUSICA
Conclusin
Dicho de otra forma, el polimorfismo consiste en conseguir
que un objeto de una clase se comporte como un objeto
de cualquiera de sus subclases, dependiendo de la forma
de llamar a los mtodos de dicha clase o subclases. Una
forma de conseguir objetos polimrficos es mediante el
uso de punteros a la superclase. De esta forma podemos
tener dentro de una misma estructura (arrays, listas, pilas,
colas, ...) objetos de distintas subclases, haciendo que el
tipo base de dichas estructuras sea un puntero a la
superclase. Otros lenguajes nos dan la posibilidad de crear
objetos polimrficos con el operador new
Recomendaciones
Antes de ver el contenido del polimorfismo
es necesario conocer previamente
definiciones como clases, mtodos, objetos
etc.

Este mtodo de programacin no es propio


de un lenguaje en particular es necesario
estar abierto y con conocimiento previo de
otros lenguajes

Anda mungkin juga menyukai