Polimorfismo
El polimorfismo es una técnica que está ligada a la orientación a objetos, especialmente a la herencia y la jerarquía de clases. Bueno primero vamos a tratar de definir el concepto el cual es uno de los más complejos desde mi punto de vista de entender.
Primero vamos a ver qué quiere decir esta palabra.
Poli: Esto quiere decir mucho.
Morfismo: Esta es formas.
Teniendo estos dos conceptos con los cuales podríamos afirmar que polimorfismo quiere decir muchas formas. ¿Pero qué quiere decir esto realmente en la programación orientada a objetos? Bueno lo que esta técnica nos permite es cambiar de un tipo de objeto a otro por medio de la herencia, es decir, que podemos crear un objeto de un tipo y dependiendo de las necesidades podemos hacer que este cambie otro tipo.
Veamos un ejemplo .
Tenemos un objeto de tipo estudiante el cual va a realizar una serie de procesos. Podemos ver un historial del estudiante que nos mostraría todas las calificaciones del mismo. Pero qué pasa si queremos que ese mismo objeto ahora sea un empleado y que historial lo que muestra es todos los pagos que se le realizaron a este empleado.
Tendríamos que crear dos objetos diferentes para poder hacer esto. Ahora si queremos guardar una lista de estudiantes y empleados tendríamos que crear dos estructuras para poder almacenar estos dos tipos de objetos, pero gracias al polimorfismo podríamos crear una sola estructura que almacene los dos tipos de objetos.
Lo que tenemos que notar es que el método verHistorial() que queremos desarrollar va existir en ambos objetos pero dependiendo del tipo de objeto que deseamos llamar es como se va a comportar este método.
Para poder realizar esto debemos inicialmente definir una clase base para las dos clases (empleado, Estudiantes), comúnmente conocida como clase interfaz, esta clase base es la que vamos a usar para poder ejecutar el comportamiento polimórfico es decir que desde la clase base es donde vamos a poder definir los comportamientos de los objetos.
Tip: Esta clase base puede ser abstracta, no abstracto o una interfaz.
Este comportamiento básicamente son los métodos que vamos a poder ejecutar. Ahora para poder hacer que nuestros objetos funcionen de manera polimorfa debemos definir los métodos al menos como abstractos y/o en una interfaz.
Tip: Los métodos y variables que no se encuentren en la clase base no van a poder ser usados de forma polimorfa.