Sie sind auf Seite 1von 2

Descripcin

En lenguajes basados en clases y con un sistema de tipos de datos fuerte (indepe


ndientemente de si la verificacin se realiza en tiempo de compilacin o de ejecucin)
, es posible que el nico modo de poder utilizar objetos de manera polimrfica sea q
ue compartan una raz comn, es decir, una jerarqua de clases, ya que esto proporcion
a la compatibilidad de tipos de datos necesaria para que sea posible utilizar un
a misma variable de referencia (que podr apuntar a objetos de diversas subclases
de dicha jerarqua) para enviar el mismo mensaje (o un grupo de mensajes) al grupo
de objetos que se tratan de manera polimrfica.
No obstante, algunos lenguajes de programacin (Java, C++) permiten que dos objeto
s de distintas jerarquas de clases respondan a los mismos mensajes, a travs de las
denominadas interfaces (esta tcnica se conoce como composicin de objetos). Dos ob
jetos que implementen la misma interfaz podrn ser tratados de forma idntica, como
un mismo tipo de objeto, el tipo definido por la interfaz. As, distintos objetos
podrn intercambiarse en tiempo de ejecucin siempre que sean del mismo tipo, y adems c
on dependencias mnimas entre ellos. Por estos motivos se considera un buen princi
pio de diseo en programacin orientada a objetos el favorecer la composicin de objet
os frente a la herencia de clases.1
En Java las interfaces se declaran mediante la palabra clave Interface. Estas se
utilizan para lograr la necesaria concordancia de tipos que hace posible el pol
imorfismo, tambin como un contrato que debe cumplir cualquier clase que implement
e una cierta interfaz, y como una forma de documentacin para los desarrolladores.
A veces, en la literatura especfica sobre Java se habla de "herencia y polimorfi
smo de interfaces", lo que no concuerda con los conceptos de la programacin orien
tada a objetos porque una clase que implementa una interfaz slo obtiene su tipo d
e datos y la obligacin de implementar sus mtodos, no copia comportamiento ni atrib
utos. Esta terminologa puede llevar a confusin, puesto que en Java a menudo se uti
liza la mal llamada "herencia de interfaces" para dotar a una clase de uno o var
ios tipos adicionales, lo que unido a la composicin, evite la necesidad de la her
encia mltiple y favorezca una utilizacin ms amplia del polimorfismo.
No obstante, el uso de una jerarqua de clases como paso previo, es muy habitual i
ncluso en aquellos lenguajes en los que es posible prescindir de tal jerarqua, ya
que, desde una perspectiva conceptual, se puede decir que al pertenecer los "ob
jetos polimrficos" a subclases de una misma jerarqua, se asegura la equivalencia s
emntica de los mensajes que se invocarn de modo polimrfico. Por esto, en programacin
orientada a objetos a veces se denomina al polimorfismo como "polimorfismo de s
ubclase (o de subtipo)".
En resumen, en la programacin orientada a objetos, la esencia del polimorfismo no
atae a la clase o prototipo de la que provienen los objetos. Aun as, en los lengu
ajes basados en clases, es habitual (y en algunos tal vez sea el nico modo) que d
ichos objetos pertenezcan a subclases pertenecientes a una misma jerarqua. Entonc
es, el polimorfismo debe verse como una forma flexible de usar un grupo de objet
os (como si fueran slo uno). Podra decirse que el polimorfismo en esencia refiere
al comportamiento de los objetos, no a su pertenencia a una jerarqua de clases (o
a sus tipos de datos).
Lo anterior se hace an ms evidente en lenguajes de programacin orientada a objetos
basados en prototipos, como Self, en los que las clases no existen.
Adems, es importante remarcar que si un cierto grupo de objetos pueden utilizarse
de manera polimrfica es porque, en ltima instancia, todos ellos saben responder a
un cierto mensaje (o a varios), pero dado que esos mismos objetos generalmente
contendrn otros mtodos (que otros objetos en dicho grupo no contienen), difcilmente
se pueda decir lisa y llanamente que los objetos son polimrficos; lo correcto es
decir que esos objetos se pueden utilizar de modo polimrfico para un cierto conj

unto de mensajes.
Un ejemplo. Podemos crear dos clases distintas: Pez y Ave que heredan de la supe
rclaseAnimal. La clase Animal tiene el mtodo abstracto mover que se implementa de
forma distinta en cada una de las subclases (peces y aves se mueven de forma di
stinta). Entonces, un tercer objeto puede enviar el mensaje mover a un grupo de
objetos Pezy Ave por medio de una variable de referencia de clase Animal, hacien
do as un uso polimrfico de dichos objetos respecto del mensaje mover.
El concepto de polimorfismo, desde una perspectiva ms general, se puede aplicar t
anto a funciones como a tipos de datos. As nacen los conceptos de funciones polimr
ficas y tipos polimrficos. Las primeras son aquellas funciones que pueden evaluar
se o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos po
limrficos, por su parte, son aquellos tipos de datos que contienen al menos un el
emento cuyo tipo no est especificado.
Clasificacin
Se puede clasificar el polimorfismo en dos grandes clases:
Polimorfismo dinmico (o polimorfismo paramtrico) es aqul en el que el cdigo no i
ncluye ningn tipo de especificacin sobre el tipo de datos sobre el que se trabaja.
As, puede ser utilizado a todo tipo de datos compatible.
Polimorfismo esttico (o polimorfismo ad hoc) es aqul en el que los tipos a los
que se aplica el polimorfismo deben ser explcitos y declarados uno por uno antes
de poder ser utilizados.
El polimorfismo dinmico unido a la herencia es lo que en ocasiones se conoce como
programacin genrica.
Tambin se clasifica en herencia por redefinicin de mtodos abstractos y por mtodo sob
recargado. El segundo hace referencia al mismo mtodo con diferentes parmetros.
Otra clasificacin agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su v
ez sobrecarga de operadores y coercin, Universal (inclusin o controlado por la her
encia, paramtrico o genericidad).

Das könnte Ihnen auch gefallen