4 Polimorfismo

21
Polimorfismo Polimorfismo Tecnología de Objetos Tecnología de Objetos Raúl Herrera A. Raúl Herrera A.

description

Polimorfismo en la orientación de objetos

Transcript of 4 Polimorfismo

Page 1: 4  Polimorfismo

PolimorfismoPolimorfismo

Tecnología de ObjetosTecnología de Objetos

Raúl Herrera A.Raúl Herrera A.

Page 2: 4  Polimorfismo

EjemploEjemplo

Suponga que queremos construir una Suponga que queremos construir una biblioteca gráfica. biblioteca gráfica.

Queremos tener básicamente: Queremos tener básicamente: puntos, segmentos, vectores, puntos, segmentos, vectores, círculos, elipses, polígonos círculos, elipses, polígonos generales, triángulos, rectángulos, generales, triángulos, rectángulos, cuadrados y otros.cuadrados y otros.

Page 3: 4  Polimorfismo

Ejemplo (2)Ejemplo (2)

Considere la clase polígono:Considere la clase polígono: class Poligonoclass Poligono {{ int cantidad; // Número de vértices Puntoint cantidad; // Número de vértices Punto vertices[]; // Lista de vérticesvertices[]; // Lista de vértices public double perimetro() {public double perimetro() { // longitud del perímetro // longitud del perímetro // A partir del primer punto, se recorre el polígono sumando las // A partir del primer punto, se recorre el polígono sumando las // distancias entre cada par de puntos.// distancias entre cada par de puntos. } } public void visualizar() {public void visualizar() { // Muestra el polígono en pantalla// Muestra el polígono en pantalla }} public void rotar(Punto centro, double angulo) { public void rotar(Punto centro, double angulo) { }} public void trasladar(int a, int b) {public void trasladar(int a, int b) { // Desplaza a horizontalmente y b verticalmente// Desplaza a horizontalmente y b verticalmente }} } }

Page 4: 4  Polimorfismo

Ejemplo: Clase RectanguloEjemplo: Clase Rectangulo

class Rectangulo extends Poligono class Rectangulo extends Poligono {{ int lado1; int lado2; Rectangulo(Punto centro, double int lado1; int lado2; Rectangulo(Punto centro, double

l1, double l2, double angulo) l1, double l2, double angulo) {{ // Crear con centro en "centro", orientación "angulo", // Crear con centro en "centro", orientación "angulo", // y lados de longitud "l1" y "l2". // y lados de longitud "l1" y "l2". }} public double perimetro () public double perimetro () {{ return (lado1 + lado2) * 2 return (lado1 + lado2) * 2 }} } }

Page 5: 4  Polimorfismo

¿Como sería la jerarquia para el ¿Como sería la jerarquia para el ejemplo anterior?ejemplo anterior?

Page 6: 4  Polimorfismo

¿Que es una asignación ¿Que es una asignación polimorfica?polimorfica?

Supongamos que tenemos las siguientes declaraciones:Supongamos que tenemos las siguientes declaraciones: Poligono p; Poligono p;

Rectangulo r; Rectangulo r; Triangulo t;Triangulo t;

Entonces, las siguientes asignaciones son válidas:Entonces, las siguientes asignaciones son válidas: p = r; p = r;

p = t; p = t;

Estas asignaciones se llaman Estas asignaciones se llaman asignaciones polimórficasasignaciones polimórficas..

Lo que ocurre en la primera asignación, es que la variable pLo que ocurre en la primera asignación, es que la variable pque antes apuntaba a un objeto de tipo polígono, ahora punta a un objeto de que antes apuntaba a un objeto de tipo polígono, ahora punta a un objeto de

tipo rectángulo:tipo rectángulo:

Page 7: 4  Polimorfismo

Estructuras de Datos PolimorficasEstructuras de Datos Polimorficas

Supongamos que tenemos la siguiente clase:Supongamos que tenemos la siguiente clase:

class PoliArray class PoliArray {{ Poligono poli_array[];Poligono poli_array[]; ...... public put(Poligono p, int indice) public put(Poligono p, int indice) { { // Pone p en la posición i del vector // Pone p en la posición i del vector } } } }

Entonces las siguientes asignaciones son correctas:Entonces las siguientes asignaciones son correctas:

Page 8: 4  Polimorfismo

Estructuras de Datos PolimorficasEstructuras de Datos Polimorficas

Poligono p; Poligono p; Rectangulo r; Rectangulo r; Cuadrado c; Cuadrado c; Triangulo t; Triangulo t; PoliArray a;PoliArray a; ... ... a.put(p,1); a.put(p,1); a.put(r,2);a.put(r,2); a.put(c,3); a.put(c,3); a.put(t,4); a.put(t,4);

Page 9: 4  Polimorfismo

Estructuras de Datos PolimorficasEstructuras de Datos Polimorficas

Dada la jerarquía de clases de la figura anterior, Dada la jerarquía de clases de la figura anterior, las siguientes referencias a características de las siguientes referencias a características de objetos también son correctas:objetos también son correctas:

Poligono p; Poligono p; Rectangulo r; Rectangulo r; p.area ... p.area ... p.vertices ... p.vertices ... p.rotar ... p.rotar ... r.diagonal ... r.diagonal ... r.lado1 ... r.lado1 ... r.vertices ... r.vertices ... r.perimetro ... r.perimetro ...

Page 10: 4  Polimorfismo

Estructuras de Datos PolimorficasEstructuras de Datos Polimorficas

Las siguientes referencias son Las siguientes referencias son incorrectas:incorrectas:

p.lado1 ... p.lado1 ... p.diagonal ... p.diagonal ...

Page 11: 4  Polimorfismo

¿Cuales son las Reglas de ¿Cuales son las Reglas de llamadas?llamadas?

Regla de llamadas a características:Regla de llamadas a características: En una llamada a una En una llamada a una característica x.f donde el tipo de x se basa en una clase C, la característica x.f donde el tipo de x se basa en una clase C, la característica f debe estar definida en uno de los antecesores de C.característica f debe estar definida en uno de los antecesores de C.

Un tipo U es Un tipo U es compatiblecompatible con un tipo T sólo si la clase de U es un con un tipo T sólo si la clase de U es un descendiente de la clase base de T. Además, todo parámetro de U descendiente de la clase base de T. Además, todo parámetro de U debe ser compatible con el correspondiente parámetro formal en T.debe ser compatible con el correspondiente parámetro formal en T.

Regla de compatibilidad:Regla de compatibilidad: Una asignación x = y (o el uso de y Una asignación x = y (o el uso de y como un argumento real de la llamada a una rutina donde el como un argumento real de la llamada a una rutina donde el correspondiente argumento formal es x) es válida solamente si el correspondiente argumento formal es x) es válida solamente si el tipo de y es compatible con el tipo de xtipo de y es compatible con el tipo de x..

Page 12: 4  Polimorfismo

ComposiciónComposición

Page 13: 4  Polimorfismo

¿Que es la Composición de ¿Que es la Composición de Objetos?Objetos?

Agregar o componer varios objetos para obtener Agregar o componer varios objetos para obtener una mayor funcionalidaduna mayor funcionalidad

Un objeto se puede construir a partir de otros Un objeto se puede construir a partir de otros objetosobjetos

Page 14: 4  Polimorfismo

¿Herencia o Composición?¿Herencia o Composición?

Herencia: permite definir una clase a partir de Herencia: permite definir una clase a partir de otraotra• Reutilización de caja blanca: los aspectos internos de la Reutilización de caja blanca: los aspectos internos de la

superclase son visibles a las subclasessuperclase son visibles a las subclases• Soportada por el lenguaje de programaciónSoportada por el lenguaje de programación• Estática: se define en tiempo de compilaciónEstática: se define en tiempo de compilación

Composición: nueva funcionalidad mediante Composición: nueva funcionalidad mediante composición de objetoscomposición de objetos• Reutilización de caja negra: no hay visibilidad de los Reutilización de caja negra: no hay visibilidad de los

aspectos internos de los objetos (objetos como cajas aspectos internos de los objetos (objetos como cajas negras)negras)

• Requiere interfaces bien definidasRequiere interfaces bien definidas• Dinámica: se define en tiempo de ejecuciónDinámica: se define en tiempo de ejecución

Page 15: 4  Polimorfismo

¿Herencia o Composición?¿Herencia o Composición?

La herencia no permite cambios en tiempo de ejecuciónLa herencia no permite cambios en tiempo de ejecución

La herencia rompe la encapsulaciónLa herencia rompe la encapsulación• La herencia impone al menos una parte de la representación La herencia impone al menos una parte de la representación

física a las subclasesfísica a las subclases• Cambios en la superclase pueden afectar a las subclasesCambios en la superclase pueden afectar a las subclases• Las implementaciones de superclase y subclases están ligadasLas implementaciones de superclase y subclases están ligadas• Si hacen falta cambios para reutilizar una clase en nuevos Si hacen falta cambios para reutilizar una clase en nuevos

dominios de aplicación habrá que cambiarladominios de aplicación habrá que cambiarla• Limita la flexibilidad y al final la reutilizaciónLimita la flexibilidad y al final la reutilización

Por ello es más práctico utilizar interfaces y clases Por ello es más práctico utilizar interfaces y clases abstractasabstractas• Ya que proporcionan menos o ninguna implementaciónYa que proporcionan menos o ninguna implementación

Page 16: 4  Polimorfismo

Herencia VS ComposiciónHerencia VS Composición

La composición es dinámica, en tiempo de La composición es dinámica, en tiempo de ejecuciónejecución

• Los objetos adquieren referencias de otros objetosLos objetos adquieren referencias de otros objetos• Los objetos tienen que respetar las interfaces de los Los objetos tienen que respetar las interfaces de los

otros objetosotros objetos Exige un diseño cuidadoso de las interfacesExige un diseño cuidadoso de las interfaces

• Hay menos dependencias de implementaciónHay menos dependencias de implementación• Habrá más objetos en el sistema y por tanto el Habrá más objetos en el sistema y por tanto el

comportamiento del sistema dependerá de las comportamiento del sistema dependerá de las interacciones entre objetos en vez de estar definido en interacciones entre objetos en vez de estar definido en una claseuna clase

Page 17: 4  Polimorfismo

¿Herencia o Composición?¿Herencia o Composición?

Por tanto,Por tanto,es preferible la composición de objetos a la es preferible la composición de objetos a la

herencia de clasesherencia de clases

Sin embargo,Sin embargo,• El conjunto de componentes (objetos) no suele El conjunto de componentes (objetos) no suele

ser lo suficientemente rico en la prácticaser lo suficientemente rico en la práctica• Mediante herencia se pueden crear nuevos Mediante herencia se pueden crear nuevos

componentes que componer con los existentescomponentes que componer con los existentes

La herencia y la composición trabajan La herencia y la composición trabajan juntasjuntas

Page 18: 4  Polimorfismo

¿Que es la delegación?¿Que es la delegación?

Delegación de objetos como alternativa a la Delegación de objetos como alternativa a la herenciaherencia

• En la delegación un objeto que recibe una petición En la delegación un objeto que recibe una petición delega la ejecución del método a otro objeto (el delega la ejecución del método a otro objeto (el delegado) delegado)

En el fondo esto es lo que hace una subclase respecto a la En el fondo esto es lo que hace una subclase respecto a la superclase (al objeto this)superclase (al objeto this)

• Ejemplo: la clase Ventana, en vez de heredar de Ejemplo: la clase Ventana, en vez de heredar de Rectangulo (aunque las ventanas son rectangulares) Rectangulo (aunque las ventanas son rectangulares) tiene una referencia a un objeto asociado de esa clase y tiene una referencia a un objeto asociado de esa clase y delega algunas operaciones en elladelega algunas operaciones en ella

Si hiciera falta cambiar la forma de la ventana en tiempo Si hiciera falta cambiar la forma de la ventana en tiempo de ejecución, por ejemplo a Circulo, bastaría con cambiar de ejecución, por ejemplo a Circulo, bastaría con cambiar la referencia del objeto correspondientela referencia del objeto correspondiente

Page 19: 4  Polimorfismo

Herencia VS ComposiciónHerencia VS Composición

Ejemplo de delegación de objetos como alternativa a la herencia

Page 20: 4  Polimorfismo

¿Agregacion o Asociación?¿Agregacion o Asociación?

Agregación: un objeto es propietario o responsable de otro Agregación: un objeto es propietario o responsable de otro objeto objeto • Relación es parte deRelación es parte de• Implica que ambos objetos tienen el mismo tiempo de vidaImplica que ambos objetos tienen el mismo tiempo de vida

Asociación: un objeto conoce otro (tiene una referencia)Asociación: un objeto conoce otro (tiene una referencia)• Un objeto puede solicitar una operación en otro objeto pero no Un objeto puede solicitar una operación en otro objeto pero no

es responsable de éles responsable de él• La relación de asociación es más débil que la de agregaciónLa relación de asociación es más débil que la de agregación

La diferencia es más de intención que de implementaciónLa diferencia es más de intención que de implementación

Normalmente hay menos agregaciones que asociaciones Normalmente hay menos agregaciones que asociaciones pero son más duraderaspero son más duraderas• Hay asociaciones que sólo existen durante la ejecución de un Hay asociaciones que sólo existen durante la ejecución de un

métodométodo

Page 21: 4  Polimorfismo

PolimorfismoPolimorfismo

Tecnología de ObjetosTecnología de Objetos

Raúl Herrera A.Raúl Herrera A.