You are on page 1of 36

Grupo 6

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

Implica la posibilidad de acceder a un variado rango de


ES
LA
PROPIEDAD
QUE
INDICA,
funciones distintas a travs del mismo interfaz, durante la
LITERALMENTE,
LA POSIBILIDAD DE QUE UNA
ejecucin del programa.

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

El concepto de polimorfismo se puede


aplicar tanto a las funciones como a los
tipos de datos. As surgen los conceptos de
funciones polimrficas y tipos polimrficos.
-

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

- Un objeto polimrfico es una entidad que puede contener


valores de diferentes tipos durante la ejecucin del
programa.
- En LOO sin comprobacin de tipos, el polimorfismo es
total. Cualquier identificador puede hacer referencia a
cualquier objeto.

Ejemplo
Smalltalk:
|variable|
variable := 'hola'.
variable class. (String)
variable := 5.

EJEMPLO

variable class. (SmallInteger)

TIPOS DE POLIMORFISMO
El polimorfismo se puede establecer mediante:
- SOBREESCRITURA (override o polimorfismo de inclusin)
- GENERICIDAD (polimorfismo paramtrico)

TIPOS DE POLIMORFISMO

- VARIABLES POLIMRFICAS (polimorfismo de asignacin)


- CONVERSIN DE TIPOS (casting)
- SOBRECARGA (overload o polimorfismo ad-hoc)

TIPOS DE POLIMORFISMO
- SOBREESCRITURA (override o polimorfismo de inclusin)

Se consigue a travs de la herencia.


En este caso, un objeto pertenece a una determinada
clase, pero tambin 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 despus de
los atributos y mtodos propios de las subclases.
En este caso la signatura es EXACTAMENTE la misma
(Nombre, tipo de retorno, lista de argumentos)

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

Aunque la clase base Figura


tiene los mtodos calcularArea
y calcularPerimetro, las
subclases Circulo, Cuadrado,
Triangulo y Rectangulo
redefinen estos mtodos ya que
el calculo del rea y el permetro
de cada uno de ellos es
diferente.

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

Cuando una variable polimrfica se utiliza como argumento, la


funcin resultante se dice que exhibe un polimorfismo puro.

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)

Tambin llamado coercin.


Es una operacin semntica por la cual se convierte un argumento
al tipo esperado por una funcin para evitar que se produzca un
error de tipos.
P.ej: Coercin implcita entre reales y enteros: su adicin puede ser
interpretada al menos de tres formas distintas:
Cuatro funciones distintas: integer+integer, integer+real,
real+integer, real+real: slo sobrecarga
Dos funciones distintas: integer+integer, real+real (si alguno es
real, el otro se coerciona a real): coercin+sobrecarga
Una sola funcin: real+real: slo hay coercin y no sobrecarga

TIPOS DE POLIMORFISMO

Las coerciones pueden hacerse estticamente,


insertndolas entre los argumentos y las funciones en
tiempo de compilacin (seran los conocidos type cast o
conversiones de tipos), o pueden ser determinadas
dinmicamente por tests en tiempo de ejecucin sobre
los argumentos.

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):

Si para cada funcionalidad necesitada fuese necesario escribir un


mtodo, el cdigo resultante sera inmanejable; por ejemplo, si en Java
se hubiese creado un mtodo para escribir en pantalla una cadena de
texto, otro diferente para escribir un entero, otro para escribir un doble,
etc., sera casi imposible conocer dichos mtodos en totalidad; en
cambio sabemos que
conSystem.out.print()oSystem.out.println()podemos escribir
cualquier mensaje en pantalla.

SOBRECARGA

Este tipo de codificacin nos es permitido gracias a la sobrecarga, la


cual se aplica a mtodos y constructores. De hecho, la de
constructores, es la aplicacin ms habitual de la sobrecarga.

SOBRECARGA

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 mtodos que reciben distintos
parmetros (no coinciden en el nmero de argumentos o
aunque tenga el mismo nmero de argumentos el tipo de
los datos de los mismos cambia) y que, aplicados a un
mismo objeto, produciran efectos diferentes. El mtodo a
usar lo decide automticamente el compilador segn el
nmero y tipo de parmetros con el que se invoque.

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.

Por otra parte la sobrecarga puede estar situada entre dos


clases que no estn relacionadas jerrquicamente.

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:
-

Permiten sobrecarga de mtodos y operadores: C++

Permiten sobrecarga de mtodos pero no de operadores: Java,

Python, Perl
-

Permiten sobrecarga de operadores pero no de mtodos: Eiffel

POLIMORFISMO PURO VS. SOBRECARGA


FUNCIONES POLIMRFICAS

-Una nica funcin que puede recibir


argumentos (comportamiento uniforme).

una

variedad

de

-La ejecucin correcta se determina dinmicamente en tiempo


de ejecucin.

SOBRECARGA

-Dos o ms funciones comparten el nombre y distintos


argumentos (n y tipo). El nombre es polimrfico.
-Distintas definiciones y tipos (distintos comportamientos).
-Funcin correcta se determina en tiempo de compilacin segn
la signatura

You might also like