Llegamos al último capítulo del curso de
Programación Orientada a Objetos. A estas alturas ya se conocen bien los
conceptos de clase, objeto, herencia y encapsulación, herramientas muy potentes
y que nos dan la posibilidad de desarrollar de una forma fácil y cómoda. Ahora
pasamos al último (pero no menos importante) concepto: El polimorfismo
Foto tomada de freedigitalphotos.net |
¿Qué es el polimorfismo?
El polimorfismo no es más que una cualidad
presente en los objetos mediante la cual un objeto puede responder de distinta
forma dependiendo de la forma en que se le invoque.
Esto aunque parezca un poco complicado de
ver inicialmente, no es para nada algo complejo. Con el polimorfismo un
programador puede definir que un objeto tenga ciertos procedimientos o
funciones y que ellos mismos varíen en comportamiento según como se les llame y
los parámetros que se les pase.
Ejemplo del procedimiento Comer.
Imaginemos que tenemos un programa donde
tenemos la clase Perro, Humano y Pez, todos tienen un procedimiento llamado
Comer. Evidentemente cada uno de ellos lo hará de una forma distinta.
Ahora imaginemos sólo la clase Humano y el
procedimiento Comer, no es lo mismo comer si mandamos un parámetro llamado
Carne que si mandamos un parámetro llamado Sopa. Según qué alimento estemos
mandando de parámetro, el humano comerá de una forma distinta. ¿A que ya no
parece tan complicado el concepto de polimorfismo?
Ejemplo del procedimiento Desplazar.
Veamos otro ejemplo, ésta vez imaginemos que
tenemos una clase Humano, una clase Avión y una clase Barco. Todos ellos tienen
un procedimiento llamado Desplazar, ese procedimiento hará que el objeto se
mueva, pero claro, no es lo mismo la forma de moverse de un Humano, un Avión y
un Barco ¿verdad? Para eso existe el polimorfismo.
Polimorfismo aplicado a objetos.
Hablando con propiedad hay que aclarar que
el polimorfismo se programa dentro de una clase, pero las distintas llamadas se
harán a los objetos. Al llamar a un procedimiento de un objeto y pasar unos
parámetros, el objeto sabrá (gracias a la definición de su clase) cómo debe
actuar.
En programación estructurada para poder
hacer algo así tendríamos que definir procedimientos con distintos nombres,
ahora gracias al polimorfismo esto no es necesario.
En Programación.
Imaginemos que queremos implementar una
clase que se encarga del manejo de cadenas de caracteres o Strings. De ésta
clase instanciamos un objeto y llamamos a un procedimiento Buscar con dos
parámetros, al cual le pasamos dos cadenas, este procedimiento lo que hará será
buscar la primera cadena dentro de la segunda.
Ahora imaginemos que volvemos a
llamar al mismo procedimiento Buscar pero con tres parámetros, dos cadenas y un
número, el procedimiento Buscar buscará la primera cadena dentro de la
segunda pero empezando a partir del carácter con índice igual al número que
hemos pasado como parámetro. ¿Cómo es esto posible?
Gracias al polimorfismo esto es
perfectamente posible, a la hora de programar hemos definido dentro de la clase
dos procedimientos con el mismo nombre pero con comportamientos distinto, así
cuando sean invocados el objeto sabe cual de los dos debe ejecutar en función
de los parámetros pasados.
Sobrecarga.
A éste concepto es al que nos hemos referido
en el apartado anterior, gracias a la sobrecarga podemos crear dentro de la
clase varios procedimientos con el mismo nombre y comportamiento distinto.
Podemos definir sin problemas un
procedimiento que use dos parámetros, otro que use tres y otro que no use
ninguno. También podemos definir uno en el que el parámetro sea un número
entero y otro que sea un carácter o una cadena. No hay límite en cuanto a la
forma de usar el polimorfismo, podemos crear tantos procedimientos “iguales”
como deseemos.
Conclusión.
Gracias al polimorfismo podemos tener mucho
más control sobre los procedimientos de una clase, diversificar su funcionalidad
en base a los parámetros pasados y a nuestras necesidades. De otra forma tendríamos
que definir nuevos procedimientos o modificar todo el programa porque
necesitamos añadir un procedimiento nuevo, esto se ha acabado con el
polimorfismo.
Con esto concluímos el curso de Programación
Orientada a Objetos, durante el curso hemos podido ver los conceptos teóricos básicos
necesarios para comenzar a adentrarnos en algún lenguaje orientado a objetos
concreto.
En próximos capítulos entraremos de lleno en
dos de los lenguajes orientados a objetos más utilizados y generalizados, C++ y
Java. Gracias a ellos y su importancia dentro del desarrollo de videojuegos
podremos ir programando perfectamente, además elegiremos un motor para comenzar
a trabajar, usaremos editores gráficos 2D y 3D y comenzaremos a entrar ya en
materia. Preparaos porque el camino promete ser apasionante.