Polimorfismo: Despacho Dinámico y Eliminación de Condicionales if/switch
Aprende a diseñar sistemas desacoplados donde múltiples clases responden a un mismo método de formas diferentes, eliminando condicionales complejos.
¿Qué es el Polimorfismo?
Etimológicamente, polimorfismo significa "múltiples formas". En la Programación Orientada a Objetos, es la capacidad que tienen objetos de diferentes clases para responder a un mismo mensaje o método con comportamientos específicos propios.
En la vida real, si le dices a un músico: "Toca tu instrumento":
- El guitarrista pulsará las cuerdas de su guitarra.
- El pianista presionará las teclas de su piano.
- El baterista golpeará sus tambores.
La orden fue exactamente la misma (tocar()), pero cada músico ejecutó una acción diferente según su naturaleza.
El Anti-Patrón que el Polimorfismo Erradica
Sin polimorfismo, los programadores suelen escribir código frágil repleto de condicionales switch:
// ❌ CÓDIGO FRÁGIL (Sin Polimorfismo)
function enviarAlerta($usuario, $tipo, $mensaje) {
switch ($tipo) {
case 'email': /* 40 líneas de cURL o mail() */ break;
case 'sms': /* 30 líneas de Twilio API */ break;
case 'whatsapp': /* 50 líneas de Meta Graph API */ break;
// Si agregamos Telegram, ¡tenemos que modificar este archivo arriesgando romper producción!
}
}
enviar(). Tu servicio principal solo recibe un objeto Notificador y llama a $canal->enviar($mensaje). Agregar Telegram solo requiere crear una clase nueva sin tocar una sola línea de código existente.
⚡ Sistema de Notificaciones Multicanal Polimórfico en PHP
Ejecuta el código en el Sandbox y observa cómo una sola función despacha alertas sin importar el canal:
<?php
declare(strict_types=1);
// 1. Clase Base de Notificación
abstract class CanalNotificacion
{
abstract public function enviar(string $destinatario, string $mensaje): bool;
}
// 2. Implementaciones Especializadas
final class CanalEmail extends CanalNotificacion
{
public function enviar(string $destinatario, string $mensaje): bool
{
echo "<p style='color:#0284c7;'>📧 <strong>Email enviado a [{$destinatario}]:</strong> {$mensaje}</p>";
return true;
}
}
final class CanalSms extends CanalNotificacion
{
public function enviar(string $destinatario, string $mensaje): bool
{
echo "<p style='color:#10b981;'>📱 <strong>SMS despachado a [{$destinatario}]:</strong> {$mensaje}</p>";
return true;
}
}
final class CanalWhatsApp extends CanalNotificacion
{
public function enviar(string $destinatario, string $mensaje): bool
{
echo "<p style='color:#16a34a;'>💬 <strong>WhatsApp enviado a [{$destinatario}]:</strong> {$mensaje}</p>";
return true;
}
}
// 3. Servicio de Negocio Polimórfico
final class ServicioAlertas
{
// Acepta CUALQUIER objeto que herede de CanalNotificacion
public function dispararAlerta(CanalNotificacion $canal, string $destino, string $texto): void
{
// Despacho dinámico: PHP sabe a qué enviar() llamar según la instancia recibida
$canal->enviar($destino, $texto);
}
}
// ==========================================
// EJECUCIÓN POLIMÓRFICA EN BUCLE
// ==========================================
$servicio = new ServicioAlertas();
// Colección de canales heterogéneos
$canales = [
['canal' => new CanalEmail(), 'destino' => '[email protected]', 'msg' => 'Tu compra ha sido confirmada.'],
['canal' => new CanalSms(), 'destino' => '+573001234567', 'msg' => 'Tu código de verificación es 849201.'],
['canal' => new CanalWhatsApp(), 'destino' => '+573109876543', 'msg' => 'Tu pedido va en camino a tu domicilio.']
];
echo "<h2>Despacho Polimórfico de Alertas:</h2>";
foreach ($canales as $item) {
$servicio->dispararAlerta($item['canal'], $item['destino'], $item['msg']);
}
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Cuál es la principal ventaja arquitectónica de utilizar Polimorfismo en lugar de estructuras switch ($tipo)?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Manual de Programación Orientada a Objetos en PHP (POO) y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.