Polimorfismo - Sobrecarga
Polimorfismo - Sobrecarga
Polimorfismo - Sobrecarga
POLIMORFISMO - SOBRECARGA
Integrantes:
- Barrios
- Bione
- Fernandez Pello
- Gamarra
- Ibaez
POLIMORFISMO
En programacin 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 funcin de los
parmetros utilizados
durante sugenerales:
invocacin.
En trminos
POLIMORFISMO
ENTIDAD
FORMASpuede
O sea
que, en la TOME
prctica, MUCHAS
un mismo identificador
tener distintas formas (distintos cuerpos de funcin, distintos
comportamientos) dependiendo, en general, del contexto en
el que se halle inserto.
POLIMORFISMO
POLIMORFISMO
POLIMORFISMO
1) - Funciones polimrficas:
- Son aquellas funciones que pueden evaluarse o ser aplicadas
a diferentes tipos de datos de forma indistinta.
- La implementacin de la funcin depende del objeto al que
se aplica.
- Cada objeto responde de manera distinta a la invocacin de
un mtodo, pero siempre de manera consistente con:
a) Lo que se espera de dicho mtodo.
b) La naturaleza del objeto mismo.
Ejemplo
Dos (o ms) objetos instanciados
de distintas clases (Por Ej.:
instancias de las clases
Cuadrado y Crculo, que
heredan de Figura) puedan
interpretar el mismo mensaje
(mtodo rea()), aunque lo que
realicen cuando reciben ese
mensaje sea distinto.
EJEMPLO
POLIMORFISMO
- Muchos lenguajes consiguen el polimorfismo por medio de la
herencia (ms comn).
- 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 mtodos virtuales sin
cdigos. En Smalltalk, Ruby, Python, Javascript, Objective-C y
otros, podemos enviar mensaje y dejar que el sistema de
mensajera del lenguaje resuelva la invocacin del mtodo
apropiado.
POLIMORFISMO
2) - Tipos polimrficos:
Son aquellos tipos de datos
completamente especificados.
generalizados
no
Ejemplo
Smalltalk:
|variable|
variable := 'hola'.
variable class. (String)
variable := 5.
EJEMPLO
TIPOS DE POLIMORFISMO
El polimorfismo se puede establecer mediante:
- SOBREESCRITURA (override o polimorfismo de inclusin)
- GENERICIDAD (polimorfismo paramtrico)
TIPOS DE POLIMORFISMO
TIPOS DE POLIMORFISMO
- SOBREESCRITURA (override o polimorfismo de inclusin)
TIPOS DE POLIMORFISMO
Los mtodos sobreescritos pueden suponer un reemplazo del
comportamiento o un refinamiento; pero los mtodos se encuentran en dos
clases distintas relacionadas mediante herencia. La eleccin de un mtodo
u otro se realiza en tiempo de ejecucin
Reemplazo: se sustituye completamente la implementacin del mtodo
heredado manteniendo la semntica.
Refinamiento: se aade nueva funcionalidad al comportamiento
heredado.
Es importante distinguir entre Sobreescritura y Redefinicin
Sobreescritura: la signatura de tipo para el mensaje es la misma en
clase base y derivada.
Redefinicin: La clase derivada define un mtodo con el mismo nombre
que en la clase base y con distinta signatura de tipos.
Ejemplos
En casi todos los aspectos, todos
los fantasmas se comportan
igual por lo que la mayor parte
de la implementacin ira en la
clase Fantasma. La nica
diferencia est en la direccin en
la que se mueve cada uno.
EJEMPLO
Ejemplos
JAVA: EJEMPLO 1
Ejemplos
JAVA: EJEMPLO 2
TIPOS DE POLIMORFISMO
- GENERICIDAD (polimorfismo paramtrico)
Consiste en que una misma funcin es aplicada sobre
una variedad de tipos distintos.
Se denomina paramtrico, porque las funciones
necesitan un parmetro para saber qu tipo debe ser
utilizado.
La principal ventaja de la genericidad, consiste en la
posibilidad de definir colecciones de objetos con
comprobacin de tipos en tiempo de compilacin.
Se evita el duplicado de funciones.
Ejemplo
EJEMPLO
TIPOS DE POLIMORFISMO
- VARIABLES POLIMRFICAS (polimorfismo de asignacin)
Es un tipo que tiene otro\s tipo\s como parmetros.
Una variable polimrfica es aqulla que puede
referenciar ms de un tipo de objeto. Es una variable
que se declara como de un tipo (esttico o en tiempo de
compilacin) pero que referencia en realidad un valor de
un tipo distinto (dinmico o en tiempo de ejecucin). Por
este motivo, puede mantener valores de distintos tipos o
hacer referencias a objetos de distintas clases en
distintos momentos de ejecucin del programa.
TIPOS DE POLIMORFISMO
El conjunto de clases a las que se puede hacer
referencia est restringido por la herencia
En un lenguaje dbilmente tipado todas las variables son
potencialmente polimrficas.
Una variable polimrfica est constituida por un tipo
esttico y un tipo dinmico
- Tipo esttico: Tipo asociado en la declaracin
- Tipo dinmico: Tipo correspondiente a la clase del
objeto conectado a la entidad en tiempo de ejecucin
Ejemplo
JAVA: EJEMPLO 1
EJEMPLO
TIPOS DE POLIMORFISMO
JAVA: EJEMPLO 1
Ejemplos
EJEMPLO
Ejemplos
En este caso, el polimorfismo puro decidir, segn de qu
objeto se trate, qu mtodo 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
Mamfero, se comprobar a qu subtipo pertenece para
tomar un mtodo u otro, por ejemplo en el codigo
siguiente (el mtodo esttico preguntarMamifero
devuelve un objeto de una subclase de Mamifero):
TIPOS DE POLIMORFISMO
- CONVERSIN DE TIPOS (casting)
TIPOS DE POLIMORFISMO
Ejemplos
TIPOS DE CASTEO EN JAVA
EJEMPLO
Ejemplos
EJEMPLO DE CASTEO EN JAVA
Si 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 ejecucin.
Ejemplos
Una funcin que acepta parmetros float
aceptar sin problemas que le pasemos un int,
simplemente convertir ese int en float en tiempo
de ejecucin
EJEMPLO
SOBRECARGA
- SOBRECARGA (overload o polimorfismo ad-hoc):
SOBRECARGA
SOBRECARGA
SOBRECARGA
SOBRECARGA
Si los nombres de una operacin se utilizan para nuevas
definiciones en clases de una jerarqua, la operacin a nivel
inferior se dice que anula la operacin a un nivel ms alto.
Ejemplo
EN PSEUDOCDIGO
EJEMPLO
Ejemplo
JAVA: EJEMPLO 1
Ejemplo
JAVA: EJEMPLO 2
Ejemplo
JAVA: EJEMPLO CONSTRUCTORES
SOBRECARGA
La sobrecarga no es una propiedad especfica de los lenguajes
orientados a objetos. Lenguajes tales como C y Pascal soportan
operaciones sobrecargadas.
Algunos ejemplos son los operadores aritmticos, operaciones de entrada
salida y operadores de asignacin de valores.
No todos los LOO permiten la sobrecarga:
-
Python, Perl
-
una
variedad
de
SOBRECARGA