You are on page 1of 4

En programacin orientada a objetos el polimorfismo se refiere a la

posibilidad de definir clases diferentes que


tienen mtodos o atributosdenominados de forma idntica, pero que se
comportan de manera distinta. El concepto de polimorfismo se puede aplicar
tanto a funciones como a tipos de datos. As nacen los conceptos
de funciones polimrficas y tipos polimrficos. Las primeras son aquellas
funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos
de forma indistinta; los tipos polimrficos, por su parte, son aquellos tipos
de datos que contienen al menos un elemento cuyo tipo no est
especificado.

Tipos de polimorfismo
Polimorfismo de sobrecarga
El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre
existen, con funcionalidad similar, en clases que son completamente
independientes una de otra (stas no tienen que serclases secundarias de la clase
objeto). Por ejemplo, la clase complex, la clase image y la clase link pueden todas
tener la funcin "display". Esto significa que no necesitamos preocuparnos sobre el
tipo de objeto con el que estamos trabajando si todo lo que deseamos es verlo en
la pantalla.
Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores cuyos
comportamientos varan de acuerdo a los parmetros que se les aplican. As es
posible, por ejemplo, agregar el operador + y hacer que se comporte de manera
distinta cuando est haciendo referencia a una operacin entre dosnmeros
enteros (suma) o bien cuando se encuentra entre dos cadenas de
caracteres (concatenacin).

Polimorfismo paramtrico(tambin llamado polimorfismo de


plantillas)
El polimorfismo paramtrico es la capacidad para definir varias funciones
utilizando el mismo nombre, pero usando parmetros diferentes (nombre y/o tipo).
El polimorfismo paramtrico selecciona automticamente el mtodo correcto a
aplicar en funcin del tipo de datos pasados en el parmetro.

Por lo tanto, podemos por ejemplo, definir varios mtodos


homnimos de addition() efectuando una suma de valores.
*El mtodo int addition (int,int) devolvera la suma de dos nmeros enteros.
*El mtodo float addition (float, float) devolvera la suma de dos flotantes.
*El mtodo char addition (char, char) dara por resultado la suma de dos
caracteres definidos por el autor.
Una signature es el nombre y tipo (esttico) que se da a los argumentos de una
funcin. Por esto, una firma de mtodo determina qu elemento se va a llamar.

Polimorfismo de inclusin (tambin llamado redefinicin o


subtipado)
La habilidad para redefinir un mtodo en clases que se hereda de una clase
base se llama especializacin. Por lo tanto, se puede llamar un mtodo de objeto
sin tener que conocer su tipo intrnseco: esto es polimorfismo de subtipado.
Permite no tomar en cuenta detalles de las clases especializadas de unafamilia de
objetos, enmascarndolos con una interfaz comn (siendo esta la clase bsica).

Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinmico (o polimorfismo paramtrico) es aqul en el que el cdigo


no incluye 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.

Pongamos otro ejemplo por si acaso no ha quedado claro con lo visto hasta el

momento, volviendo de nuevo a la clase Vehiculo. Adems nos centramos en la


utilidad del polimorfismo y sus posibilidades para reducir el mantenimiento de los
programas informticos, que es lo que realmente me gustara que se entienda.

Tenemos la clase Parking. Dentro de sta tenemos un mtodo estacionar(). Puede


que en un parking tenga que estacionar coches, motos o autobuses. Sin
polimorfismo tendra que crear un mtodo que permitiese estacionar objetos de la
clase "Coche", otro mtodo que acepte objetos de la clase "Moto" para
estacionarlos, etc. Pero todos estaremos de acuerdo que estacionar un coche, una
moto o un bus es bastante similar: "entrar en el parking, recoger el ticket de
entrara, buscar una plaza, situar el vehculo dentro de esa plaza...".
Lo ideal sera que nuestro mtodo me permita permita recibir todo tipo de
vehculos para estacionarlos, primero por reutilizacin del cdigo, ya que es muy
parecido estacionar uno u otro vehculo, pero adems porque as si maana el
mercado trae otro tipo de vehculos, como una van, todoterreno hibrido, o una nave
espacial, mi software sea capaz de aceptarlos sin tener que modificar la clase
Parking.
Gracias al polimorfismo, cuando declaro la funcin estacionar() puedo decir que
recibe como parmetro un objeto de la clase "Vehiculo" y el compilador me
aceptar no solamente vehculos genricos, sino todos aquellos objetos que
hayamos creado que hereden de la clase Vehculo, osea, coches, motos, buses,
etc. Esa relajacin del sistema de tipos para aceptar una gama de objetos
diferente es lo que llamamos polimorfismo.

You might also like