polimorfismo

Upload: angelperez

Post on 09-Mar-2016

214 views

Category:

Documents


0 download

DESCRIPTION

Programación, polimorfismo.

TRANSCRIPT

En programacin orientada a objetos el polimorfismo se refiere a la posibilidad de definir clases diferentes que tienenmtodosoatributosdenominados de forma idntica, pero que se comportan de manera distinta. El concepto de polimorfismo se puede aplicar tanto a funciones como atipos de datos. As nacen los conceptos defunciones polimrficasytipos 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 sobrecargaEl 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 secundariasde laclase objeto). Por ejemplo, laclase complex, laclase imagey laclase linkpueden 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 definiroperadorescuyos 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 doscadenas 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 elmtodocorrecto a aplicar en funcin del tipo de datos pasados en el parmetro.Por lo tanto, podemos por ejemplo, definir variosmtodos homnimosdeaddition() efectuando una suma de valores. *El mtodoint addition(int,int) devolvera la suma de dos nmeros enteros. *El mtodofloat addition(float, float) devolvera la suma de dos flotantes. *El mtodochar addition(char, char) dara por resultado la suma de dos caracteres definidos por el autor.Unasignaturees 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 seheredade unaclase basese llamaespecializacin. Por lo tanto, se puede llamar un mtodo de objeto sin tener que conocer sutipo 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 laclase bsica).

Se puede clasificar el polimorfismo en dos grandes clases: Polimorfismo dinmico(opolimorfismo 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(opolimorfismoad 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 ejemplopor 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.