Pages - Menu

miércoles, 26 de junio de 2013

Curso de Programación Orientada a Objetos 6/6: Polimorfismo

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.

¿Qué otras utilidades le ves al polimorfismo?