En la Programación Orientada a Objetos existe un concepto que, aunque puede ser complejo al principio, es una de las ideas más fundamentales y poderosas: el polimorfismo. Si realmente quieres llegar a entender en qué consiste y cómo puede transformar la manera en que desarrollas software, quédate en este post porque te lo contaré detalladamente.
¿Qué es el polimorfismo?
El polimorfismo, dicho de manera simple, es la capacidad de un objeto para asumir diferentes formas. En programación, esto quiere decir que un objeto de una clase puede ser manejado como si fuera de una clase superior (o base), pero puede actuar de manera distinta dependiendo de cómo lo uses.
Si lo vemos desde un ángulo más técnico, el polimorfismo es esa característica de los lenguajes de programación que permite que una misma función, método o incluso un operador se comporte de distintas maneras según el tipo de dato o el objeto con el que esté trabajando. Este concepto es fundamental para escribir código que sea más flexible y fácil de reutilizar.
Relación entre polimorfismo y herencia
Si quieres entender bien el concepto de polimorfismo, es sumamente necesario que comprendas la herencia en POO. Lo que permite la herencia es que una clase hija herede las propiedades y los métodos de una clase padre. Entonces, el polimorfismo entra en acción cuando un objeto de una clase hija es tratado como si fuera un objeto de la clase padre.
Por ejemplo, imagina que tienes una clase base Instrumento y varias clases derivadas como Guitarra, Piano y Batería. Lo que puedes hacer con el polimorfismo es crear una lista de Instrumentos y llenar esa lista con instancias de Guitarra, Piano y Batería, tratándolas todas como Instrumentos pero permitiendo que cada una actúe de acuerdo a su propia implementación.
Tipos de polimorfismo
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaPrincipalmente hay dos tipos de polimorfismo en programación:
- Polimorfismo de sobrecarga (o polimorfismo estático): Es la capacidad de definir múltiples funciones con el mismo nombre pero con diferentes parámetros. Por ejemplo, podrías tener varias versiones de una función sumar(), una que sume enteros, otra que sume números decimales, y otra que concatene cadenas de texto.
- Polimorfismo de inclusión (o polimorfismo dinámico): Este tipo ocurre cuando una clase derivada sobrescribe un método de su clase base y la decisión de qué método ejecutar se toma en tiempo de ejecución. Esto es lo que permite que un mismo método se comporte de manera diferente según el objeto que lo invoque.
Ejemplo práctico: polimorfismo en Java
Vas a suponer que tienes una clase base Empleado y varias clases derivadas como Desarrollador y Diseñador. Ten en cuenta que cada clase derivada tiene su propia implementación del método trabajar().
public class Empleado {
public void trabajar() {
System.out.println("El empleado está trabajando.");
}
}
public class Desarrollador extends Empleado {
@Override
public void trabajar() {
System.out.println("El desarrollador está escribiendo código.");
}
}
public class Diseñador extends Empleado {
@Override
public void trabajar() {
System.out.println("El diseñador está creando gráficos.");
}
}
Ahora, puedes crear una lista de Empleado y llenarla con instancias de Desarrollador y Diseñador. Lo que sucederá es que, aunque los trates como Empleado, cada uno ejecutará su propia versión del método trabajar().
Empleado[] empleados = {new Desarrollador(), new Diseñador()};
for (Empleado empleado : empleados) {
empleado.trabajar();
}
Este código te imprimirá lo siguiente:
El desarrollador está escribiendo código.
El diseñador está creando gráficos.
En este punto puedes ver cómo el polimorfismo deja que cada objeto ejecute el método adecuado según su tipo específico, a pesar de que los tratamos como instancias de la clase base Empleado.
Polimorfismo en Python
Debes saber que, aunque en Python el polimorfismo funciona de manera muy similar, este lenguaje no requiere una jerarquía de clases estricta para aplicarlo, porque es dinámico. Te lo explico de manera más simple: piensa que tienes dos clases, Pájaro y Avión, ambas con un método volar(). A pesar de no tener una clase base común, lo que hace Python es dejar que ambas clases compartan un método con el mismo nombre y lo llamen de manera polimórfica. Queda algo así:
class Pajaro:
def volar(self):
return "El pájaro está volando."
class Avion:
def volar(self):
return "El avión está volando."
def hacer_volar(objeto):
print(objeto.volar())
pajaro = Pajaro()
avion = Avion()
hacer_volar(pajaro) # Output: El pájaro está volando.
hacer_volar(avion) # Output: El avión está volando.
En este ejemplo, la función hacer_volar() es capaz de manejar objetos de diferentes clases (Pajaro y Avion) siempre que estos implementen el método volar(). Esto es polimorfismo en acción, y demuestra cómo Python puede aplicar este concepto sin necesidad de una jerarquía de clases.
¿Para qué sirve el polimorfismo?
El polimorfismo sirve para que el código sea mucho más flexible, escalable, limpio y se pueda reutilizar. Entonces, en lugar de que debas escribir múltiples funciones para manejar cada tipo de objeto, simplemente escribes una sola función que maneje un objeto de la clase base y de ahí, solo te resta confiar en el polimorfismo para que el comportamiento se ajuste de manera automática al tipo de objeto específico.
De esta manera logras reducir la duplicación de código y facilitas el mantenimiento y la escalabilidad de los proyectos de software. Además, el código se podrá adaptar a cambios futuros, ya que puedes agregar nuevas clases derivadas sin necesidad de modificar el código existente.
Dominar estos conceptos puede resultar muy fascinante, si quieres descubrirlo por ti mismo, tenemos el Bootcamp Aprende a Programar desde Cero creado por KeepCoding. Con nuestro enfoque práctico y orientado a resultados, te prepararemos para ingresar al mundo de la tecnología con todas las herramientas necesarias para destacar en la industria, una de las más demandantes y bien remuneradas del mercado actual. ¡Tu futuro en IT empieza aquí!