polimorfismo - sobrecarga

36
POLIMORFISMO - SOBRECARGA Integrantes: - Barrios - Bione - Fernandez Pello - Gamarra - Ibañez Grupo 6

Upload: leandro-bione

Post on 01-Feb-2016

241 views

Category:

Documents


0 download

DESCRIPTION

Presentación en la cual se exponen estas dos características presentes en la POO, clasificándolas y diferenciándolas una de la otra.En programación orientada a objetos (POO), el polimorfismo se refiere a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación. Implica la posibilidad de acceder a un variado rango de funciones distintas a través del mismo interfaz, durante la ejecución del programa. O sea que, en la práctica, un mismo identificador puede tener distintas formas (distintos cuerpos de función, distintos comportamientos) dependiendo, en general, del contexto en el que se halle inserto.

TRANSCRIPT

Page 1: POLIMORFISMO - SOBRECARGA

POLIMORFISMO - SOBRECARGA

Integrantes:

- Barrios

- Bione

- Fernandez Pello

- Gamarra

- Ibañez

Grupo 6

Page 2: POLIMORFISMO - SOBRECARGA

En programación orientada a objetos (POO), el polimorfismo se refiere a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación. Implica la posibilidad de acceder a un variado rango de funciones distintas a través del mismo interfaz, durante la ejecución del programa. O sea que, en la práctica, un mismo identificador puede tener distintas formas (distintos cuerpos de función, distintos comportamientos) dependiendo, en general, del contexto en el que se halle inserto.

En términos generales:ES LA PROPIEDAD QUE INDICA, LITERALMENTE, LA

POSIBILIDAD DE QUE UNA ENTIDAD TOME MUCHAS FORMASPOLIMORFISMO

POLIMORFISMO

Page 3: POLIMORFISMO - SOBRECARGA

- El concepto de polimorfismo se puede aplicar tanto a las funciones como a los tipos de datos. Así surgen los conceptos de funciones polimórficas y tipos polimórficos.

POLIMORFISMOPOLIMORFISMO

Page 4: POLIMORFISMO - SOBRECARGA

1) - Funciones polimórficas:- Son aquellas funciones que pueden evaluarse o ser aplicadas a

diferentes tipos de datos de forma indistinta.

- La implementación de la función depende del objeto al que se aplica.

- Cada objeto responde de manera distinta a la invocación de un método, pero siempre de manera consistente con:

a) Lo que se espera de dicho método.b) La naturaleza del objeto mismo.

POLIMORFISMO

Page 5: POLIMORFISMO - SOBRECARGA

EJEMPLO

EjemploDos (o más) objetos instanciados de

distintas clases (Por Ej.: instancias de las clases “Cuadrado” y “Círculo”, que heredan de “Figura”) puedan interpretar el mismo

mensaje (método “Área()”), aunque lo que realicen cuando reciben ese mensaje sea

distinto.

Page 6: POLIMORFISMO - SOBRECARGA

- Muchos lenguajes consiguen el polimorfismo por medio de la herencia (más común).

- Pero éste puede operar de forma independiente a la herencia.

- Si estamos trabajando en Java o .NET, es posible utilizar una interface. En C++ y Visual Basic 5 o 6, usamos una clase abstracta, es decir que solo contiene métodos virtuales sin códigos. En Smalltalk, Ruby, Python, Javascript, Objective-C y otros, podemos enviar mensaje y dejar que el sistema de mensajería del lenguaje resuelva la invocación del método apropiado.

POLIMORFISMO

Page 7: POLIMORFISMO - SOBRECARGA

2) - Tipos polimórficos:Son aquellos tipos de datos generalizados o no completamente

especificados. - Un objeto polimórfico es una entidad que puede contener valores de

diferentes tipos durante la ejecución del programa.

- En LOO sin comprobación de tipos, el polimorfismo es total. Cualquier identificador puede hacer referencia a cualquier objeto.

POLIMORFISMO

Page 8: POLIMORFISMO - SOBRECARGA

Smalltalk:|variable|

variable := 'hola'.variable class. (String)variable := 5.variable class. (SmallInteger)EJEMPLO

Ejemplo

Page 9: POLIMORFISMO - SOBRECARGA

TIPOS DE POLIMORFISMO

TIPOS DE POLIMORFISMO

El polimorfismo se puede establecer mediante:

- SOBREESCRITURA (override o polimorfismo de inclusión)

- GENERICIDAD (polimorfismo paramétrico)

- VARIABLES POLIMÓRFICAS (polimorfismo de asignación)

- CONVERSIÓN DE TIPOS (casting)

- SOBRECARGA (overload o polimorfismo ad-hoc)

Page 10: POLIMORFISMO - SOBRECARGA

- SOBREESCRITURA (override o polimorfismo de inclusión)Se consigue a través de la herencia. En este caso, un objeto pertenece a una determinada clase, pero también puede utilizarse en aquellos lugares en los que se requiere un objeto de sus superclases.Es posible porque las subclases tienen, en primer lugar, la misma estructura que las superclases, seguida después de los atributos y métodos propios de las subclases.En este caso la signatura es EXACTAMENTE la misma (Nombre, tipo de retorno, lista de argumentos)

TIPOS DE POLIMORFISMO

Page 11: POLIMORFISMO - SOBRECARGA

Los métodos sobreescritos pueden suponer un reemplazo del comportamiento o un refinamiento; pero los métodos se encuentran en dos clases distintas relacionadas mediante herencia. La elección de un método u otro se realiza en tiempo de ejecución• Reemplazo: se sustituye completamente la implementación del método

heredado manteniendo la semántica.• Refinamiento: se añade nueva funcionalidad al comportamiento heredado.

Es importante distinguir entre Sobreescritura y Redefinición • Sobreescritura: la signatura de tipo para el mensaje es la misma en clase base y

derivada. • Redefinición: La clase derivada define un método con el mismo nombre que en

la clase base y con distinta signatura de tipos.

TIPOS DE POLIMORFISMO

Page 12: POLIMORFISMO - SOBRECARGA

EJEMPLO

EjemplosEn casi todos los aspectos, todos los

fantasmas se comportan igual por lo que la mayor parte de la implementación iría en la clase Fantasma. La única diferencia está en la dirección en la que se mueve

cada uno.

Page 13: POLIMORFISMO - SOBRECARGA

EjemplosJAVA: EJEMPLO 1

Page 14: POLIMORFISMO - SOBRECARGA

EjemplosJAVA: EJEMPLO 2

Aunque la clase base “Figura” tiene los métodos “calcularArea” y “calcularPerimetro”, las subclases “Circulo”, “Cuadrado”, “Triangulo” y “Rectangulo” redefinen estos métodos ya que el calculo del área y el perímetro de cada uno de ellos es diferente.

Page 15: POLIMORFISMO - SOBRECARGA

- GENERICIDAD (polimorfismo paramétrico)Consiste en que una misma función es aplicada sobre una variedad de tipos distintos.Se denomina paramétrico, porque las funciones necesitan un parámetro para saber qué tipo debe ser utilizado.La principal ventaja de la genericidad, consiste en la posibilidad de definir colecciones de objetos con comprobación de tipos en tiempo de compilación. Se evita el duplicado de funciones.

TIPOS DE POLIMORFISMO

Page 16: POLIMORFISMO - SOBRECARGA

EJEMPLO

Ejemplo

Page 17: POLIMORFISMO - SOBRECARGA

- VARIABLES POLIMÓRFICAS (polimorfismo de asignación)Es un tipo que tiene otro\s tipo\s como parámetros. Una variable polimórfica es aquélla que puede referenciar más de un tipo de objeto. Es una variable que se declara como de un tipo (estático o en tiempo de compilación) pero que referencia en realidad un valor de un tipo distinto (dinámico o en tiempo de ejecución). Por este motivo, puede mantener valores de distintos tipos o hacer referencias a objetos de distintas clases en distintos momentos de ejecución del programa.

TIPOS DE POLIMORFISMO

Page 18: POLIMORFISMO - SOBRECARGA

El conjunto de clases a las que se puede hacer referencia está restringido por la herenciaEn un lenguaje débilmente tipado todas las variables son potencialmente polimórficas.Una variable polimórfica está constituida por un tipo estático y un tipo dinámico - Tipo estático: Tipo asociado en la declaración - Tipo dinámico: Tipo correspondiente a la clase del objeto conectado a la entidad en tiempo de ejecución

TIPOS DE POLIMORFISMO

Page 19: POLIMORFISMO - SOBRECARGA

JAVA: EJEMPLO 1

EJEMPLO

Ejemplo

Page 20: POLIMORFISMO - SOBRECARGA

TIPOS DE POLIMORFISMO

Cuando una variable polimórfica se utiliza como argumento, la función resultante se dice que exhibe un polimorfismo puro.

Page 21: POLIMORFISMO - SOBRECARGA

JAVA: EJEMPLO 1

Ejemplos

EJEMPLO

Page 22: POLIMORFISMO - SOBRECARGA

EjemplosEn este caso, el polimorfismo puro decidirá, según de qué objeto se trate, qué método emplear. Incluso aunque no sea conocido de antemano. Por ejemplo, ambas clases pueden ser subclases de “Mamifero”. Si un usuario nos reclama mostrar los datos de un objeto de clase “Mamífero”, se comprobará a qué subtipo pertenece para tomar un método u otro, por ejemplo en el codigo siguiente (el método estático “preguntarMamifero” devuelve un objeto de una subclase de “Mamifero”):

Page 23: POLIMORFISMO - SOBRECARGA

- CONVERSIÓN DE TIPOS (casting)

También llamado “coerción”.Es una operación semántica por la cual se convierte un argumento al tipo esperado por una función para evitar que se produzca un error de tipos.P.ej: Coerción implícita entre reales y enteros: su adición puede ser interpretada al menos de tres formas distintas:• Cuatro funciones distintas: integer+integer, integer+real, real+integer,

real+real: sólo sobrecarga• Dos funciones distintas: integer+integer, real+real (si alguno es real, el

otro se coerciona a real): coerción+sobrecarga• Una sola función: real+real: sólo hay coerción y no sobrecarga

TIPOS DE POLIMORFISMO

Page 24: POLIMORFISMO - SOBRECARGA

Las coerciones pueden hacerse estáticamente, insertándolas entre los argumentos y las funciones en tiempo de compilación (serían los conocidos type cast o conversiones de tipos), o pueden ser determinadas dinámicamente por tests en tiempo de ejecución sobre los argumentos.

TIPOS DE POLIMORFISMO

Page 25: POLIMORFISMO - SOBRECARGA

TIPOS DE CASTEO EN JAVA

EJEMPLO

Ejemplos

Page 26: POLIMORFISMO - SOBRECARGA

EJEMPLO DE CASTEO EN JAVASi en en el ejemplo, no se realiza el casteo “Jefe m = (Jefe) e” y se intenta acceder a “e.departamento” el compilador no encuentra el miembro departamento en la clase Empleado y se produce una falla en tiempo de ejecución.

Ejemplos

Page 27: POLIMORFISMO - SOBRECARGA

Una función que acepta parámetros “float” aceptará sin problemas que le pasemos un “int”, simplemente convertirá ese int en float en tiempo de ejecución

EJEMPLO

Ejemplos

Page 28: POLIMORFISMO - SOBRECARGA

- SOBRECARGA (overload o polimorfismo ad-hoc):

Si para cada funcionalidad necesitada fuese necesario escribir un método, el código resultante sería inmanejable; por ejemplo, si en Java se hubiese creado un método para escribir en pantalla una cadena de texto, otro diferente para escribir un entero, otro para escribir un doble, etc., sería casi imposible conocer dichos métodos en totalidad; en cambio sabemos que con “System.out.print()” o“System.out.println()” podemos escribir cualquier mensaje en pantalla.

Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores. De hecho, la de constructores, es la aplicación más habitual de la sobrecarga.

SOBRECARGA

SOBRECARGA

Page 29: POLIMORFISMO - SOBRECARGA

Entonces… en qué consiste la sobrecarga? Consiste en el uso de un mismo identificador u operador para denotar funciones distintas, es decir, en distintos contextos y con distintos significados. La sobrecarga permite dar nombres iguales a métodos que reciben distintos parámetros (no coinciden en el número de argumentos o aunque tenga el mismo número de argumentos el tipo de los datos de los mismos cambia) y que, aplicados a un mismo objeto, producirían efectos diferentes. El método a usar lo decide automáticamente el compilador según el número y tipo de parámetros con el que se invoque.

SOBRECARGASOBRECARGA

Page 30: POLIMORFISMO - SOBRECARGA

Si los nombres de una operación se utilizan para nuevas definiciones en clases de una jerarquía, la operación a nivel inferior se dice que anula la operación a un nivel más alto.

Por otra parte la sobrecarga puede estar situada entre dos clases que no están relacionadas jerárquicamente.

SOBRECARGA

Page 31: POLIMORFISMO - SOBRECARGA

EN PSEUDOCÓDIGO

Ejemplo

EJEMPLO

Page 32: POLIMORFISMO - SOBRECARGA

JAVA: EJEMPLO 1

Ejemplo

Page 33: POLIMORFISMO - SOBRECARGA

EjemploJAVA: EJEMPLO 2

Page 34: POLIMORFISMO - SOBRECARGA

JAVA: EJEMPLO CONSTRUCTORES

Ejemplo

Page 35: POLIMORFISMO - SOBRECARGA

La sobrecarga no es una propiedad específica de los lenguajes orientados a objetos. Lenguajes tales como C y Pascal soportan operaciones sobrecargadas.

Algunos ejemplos son los operadores aritméticos, operaciones de entrada – salida y operadores de asignación de valores.

No todos los LOO permiten la sobrecarga:- Permiten sobrecarga de métodos y operadores: C++- Permiten sobrecarga de métodos pero no de operadores: Java,Python, Perl- Permiten sobrecarga de operadores pero no de métodos: Eiffel

SOBRECARGA

Page 36: POLIMORFISMO - SOBRECARGA

POLIMORFISMO PURO VS. SOBRECARGA

FUNCIONES POLIMÓRFICAS

-Una única función que puede recibir una variedad de argumentos (comportamiento uniforme).-La ejecución correcta se determina dinámicamente en tiempo de ejecución.

SOBRECARGA-Dos o más funciones comparten el nombre y distintos argumentos (nº y tipo). El nombre es polimórfico.-Distintas definiciones y tipos (distintos comportamientos).-Función correcta se determina en tiempo de compilación según la signatura