programacion orientada a objetos - undiad 4 polimorfismo

32
Ingeniería en Sistemas Computacionales Programación Orientada a Objetos Unidad 4: Polimorfismo Este material está desarrollado para la asignatura Programación Orientada a Objetos, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224. PROGRAMACIÓN ORIENTADA A OBJETOS

Upload: jose-antonio-sandoval-acosta

Post on 13-Jan-2017

28 views

Category:

Engineering


5 download

TRANSCRIPT

Page 1: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Ingeniería en Sistemas ComputacionalesProgramación Orientada a Objetos

Unidad 4: Polimorfismo

Este material está desarrollado para la asignatura Programación Orientada a Objetos, de la carrera de Ingeniería en Sistemas Computacionales, plan de estudios ISIC-2010-224.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 2: Programacion Orientada a Objetos - Undiad 4 polimorfismo

2

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 3: Programacion Orientada a Objetos - Undiad 4 polimorfismo

INTRODUCCIÓN

Una de las tres mayores facetas de la programación orientada a objetos es el polimorfismo. Aplicado a C++, el término polimorfismo usado para describir el proceso en el cual diferentes implementaciones de una función pueden ser accedidas a través del mismo nombre.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 4: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Por esta razón, el polimorfismo es en ocasiones caracterizado por la frase "Una interface, múltiples métodos." Esto significa que cada miembro de una clase general de operaciones puede ser accedida del mismo modo, incluso cuando las acciones especificas con cada operación puedan diferir.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 5: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PolimorfismoEn programación orientada a objetos el polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea.

El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía. La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las obvias diferencias sintácticas.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 6: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Polimorfismo• Es la habilidad que poseen los objetos para reaccionar de modo

diferente ante los mismos mensajes.

• El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica, que pueden utilizarse de manera intercambiable mediante código cliente en tiempo de ejecución.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 7: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Ejemplo:

Dada una clase Vehiculo, es posible heredar nuevas clases, por ejemplo: {coche, camión, motocicleta}.

Sin importar que vehículo estemos invocando, si llamamos el método MostrarNumRuedas() se llamará el método de cada subclase, ya que cada objeto no deja de ser vehículo.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 8: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Dada la clase Persona, y la subclase Estudiante, añadimos la subclase Empleado.

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 9: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PRO

GRAM

ACIÓ

N O

RIEN

TADA

A O

BJET

OS

Page 10: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

Ejemplo de Polimorfismo Paramétrico:

• Una clase define varios métodos con el mismo nombre pero diferente firma (sobrecarga)

• Se elige el método de acuerdo a la firma aplicada

• La sobrecarga del constructor es un ejemplo de ello

Page 11: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

Ejemplo de Polimorfismo de Sobrecarga (Overload):

• Diferentes clases tienen un método con el mismo nombre, pero comportamiento diferente

• Se aplica el método de acuerdo al objeto en que se trabaje

Page 12: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOSEjemplo de Polimorfismo Subtipo (Override);• Las clases derivadas redefinen los métodos y/o

propiedades heredados mediante la sobre-escritura (override)

Page 13: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

Diferencia entre Sobrecarga y Polimorfismo

• La Sobrecarga hace referencia a un conjunto de Métodos con el mismo Nombre pero diferente Número de Parámetros y/o Tipos de estos, además que estos Métodos se encuentran definidos en una misma Clase.

• En tanto que Polimorfismo hace referencia a un conjunto de Métodos con el mismo Nombre e igual Número de Parámetros y Tipos, pero que se encuentran definidos en diferentes clases.

Page 14: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

Ejercicio: Hacer un programa que aplique herencia y polimorfismo en un vehículo con las subclases coche, camión y motocicleta; con las siguientes características:

• Contar con los atributos y métodos para conocer el número de cilindros del vehículo sin importar su tipo.

• Contar con los atributos y métodos para conocer el número de ruedas del vehículo sin importar su tipo.

• Conocer el número de puertas.

Page 15: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

• .

Page 16: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

• .

Page 17: Programacion Orientada a Objetos - Undiad 4 polimorfismo

PROGRAMACIÓN ORIENTADA A OBJETOS

• .

Page 18: Programacion Orientada a Objetos - Undiad 4 polimorfismo

• La fundación del polimorfismo en tiempo de ejecución es el puntero de la clase base. Punteros a la clase base y clases derivadas están relacionados en la manera en que otros tipos de puntero no lo están. Como aprendió al principio del libro, un puntero de un tipo generalmente no puede apuntar a un objeto de otro tipo. Sin embargo, los punteros de clase base y objetos derivados son la excepción a esta regla. En C++, un puntero de la clase base podría ser usado para apuntar a un objeto de cualquier clase derivada de esa base. Por ejemplo, asumiendo que usted tiene una clase base llamada 'clase B' y una clase llamada 'clase_D', la cual es derivada de 'clase_B'. En C++, cualquier puntero declarado como un puntero a 'clase_B' puede tambien ser un puntero a 'clase_D'. Entonces, dado

PUNTEROS A TIPOS DERIVADOS.

Page 19: Programacion Orientada a Objetos - Undiad 4 polimorfismo

REFERENCIAS A TIPOS DERIVADOS

• Similar a la acción de punteros ya descritas, una referencia a la clase base puede ser usada para referirse a un objeto de un tipo derivado. La mas común aplicación de esto es encontrada en los parámetros de la funciones. Una parámetro de referencia de la clase base puede recibir objetos de la base clase así como también otro tipo derivado de esa misma base.

Page 20: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Se puede clasificar el polimorfismo en dos grandes clases:• Polimorfismo dinámico (o polimorfismo paramétrico) es

aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.

• Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.

Clasificación

Page 21: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Diferencia entre polimorfismo y sobre carga

El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante ventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sin necesidad de tocar las clases ya existentes (imaginemos que deseamos añadir una clase Multiplicar), basta con recompilar todo el código que incluye los nuevos tipos añadidos

La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas.Un método está sobrecargado si dentro de una clase existen dos o más declaraciones de dicho método con el mismo nombre pero con parámetros distintos, por lo que no hay que confundirlo con polimorfismo.

En definitiva: La sobrecarga se resuelve en tiempo de compilación utilizando los nombres de los métodos y los tipos de sus parámetros; el polimorfismo se resuelve en tiempo de ejecución del programa, esto es, mientras se ejecuta, en función de la clase a la que pertenece el objeto.

Page 22: Programacion Orientada a Objetos - Undiad 4 polimorfismo

• El polimorfismo en tiempo de ejecución es logrado por una combinación de dos características: 'Herencia y funciones virtuales". Aprendió sobre la herencia en el capitulo precedente. Aquí, aprenderá sobre función virtual.

• Una función virtual es una función que es declarada como 'virtual' en una clase base y es redefinida en una o mas clases derivadas. Además, cada clase derivada puede tener su propia versión de la función virtual. Lo que hace interesantes a las funciones virtuales es que sucede cuando una es llamada a través de un puntero de clase base ( o referencia ). En esta situación, C++ determina a cual versión de la función llamar basándose en el tipo de objeto apuntado por el puntero. Y, esta determinación es hecha en 'tiempo de ejecución'. Además, cuando diferentes objetos son apuntados, diferentes versiones de la función virtual son ejecutadas.

FUNCIONES VIRTUALES

Page 23: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Como se declaraba en el inicio de este capítulo, las funciones virtuales en combinación con tipos derivados le permiten a C++ soportar polimorfismo en tiempo de ejecución. El polimorfismo es esencial para la programación orientada a objetos por una razón: Esta permite a una clase generalizada especificar aquellas funciones que serán comunes a todas las derivadas de esa clase, mientras que permite a una clase derivada definir la implementación específica de algunos o todas de esas funciones. A veces esta idea es expresada como: La clase base dicta la 'interface' general que cualquier objeto derivado de esa clase tendrá, pero permite a la clase derivada definir el método actual usado para implementar esa interface. De ahí que la frase "una interface múltiples métodos" sea usada a menudo para describir el polimorfismo.

PORQUE FUNCIONES VIRTUALES

Page 24: Programacion Orientada a Objetos - Undiad 4 polimorfismo

Parte del truco de aplicar el polimorfismo de una manera satisfactoria es comprender que la clase base y derivada forman una jerarquía, la cual se mueve de mayor a menor generalización (base a derivada). Diseñada correctamente, la clase base provee todos los elementos que una clase derivada puede usar directamente. También define cuales funciones la clase derivada debe implementar por su cuenta. Esto permite a la clase derivada la flexibilidad para definir sus propios métodos, y aun mantener un interface consistente. Eso es, como la forma de la interface es definida por la clase base, cualquier clase derivada compartirá esa interface común. Además, el uso de funciones virtuales hace posible para la clase base definir interfaces genéricas que serán usada por todas las clases derivadas. En este punto, usted debe preguntarse a si mismo porque una consistente interface con múltiples implementaciones es importante. La respuesta, nuevamente, no lleva a la fuerza central manejadora detrás de la programación orientada a objetos: Esta ayuda al programador a manejar programas de complejidad creciente.

Page 25: Programacion Orientada a Objetos - Undiad 4 polimorfismo

• Como se ha visto, cuando una funcion virtual que no es redefinida en una clase derivada es llamada por un objeto de esa clase derivada, la version de la funcion como se ha definido en la clase base es utilizada. Sin embargo, en muchas circunstancias, no habra una declaracion con significado en una funcion virtual dentro de la clase base. Por ejemplo, en la clase base 'figura' usada en el ejemplo anterior, la definicion de 'mostrar_area()' es simplemente un sustituto sintetico. No computara ni mostrara el area de ningun tipo de objeto. Como vera cuando cree sus propias librerias de clases no es poco comun para una funcion virtual tener una definicion sin significado en el contexto de su clase base.

FUNCIONES VIRTUALES PURAS Y CLASES ABSTRACTAS

Page 26: Programacion Orientada a Objetos - Undiad 4 polimorfismo

26

• .

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 27: Programacion Orientada a Objetos - Undiad 4 polimorfismo

27

• .

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 28: Programacion Orientada a Objetos - Undiad 4 polimorfismo

28

• .

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 29: Programacion Orientada a Objetos - Undiad 4 polimorfismo

29

• .

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 30: Programacion Orientada a Objetos - Undiad 4 polimorfismo

30

• .

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 31: Programacion Orientada a Objetos - Undiad 4 polimorfismo

31

• .

PROGRAMACIÓN ORIENTADA A OBJETOS

Page 32: Programacion Orientada a Objetos - Undiad 4 polimorfismo

32

• .

PROGRAMACIÓN ORIENTADA A OBJETOS