Skip to content
IRC-CodingIRC-Coding
PolimorfismoOOPBinding dinámicoOverrideOverloadGenericsInterfacePolimorfismo de subtipo

Polimorfismo OOP: Guía de Fundamentos

Polimorfismo permite llamadas unificadas con diferentes implementaciones. Binding dinámico, override, overload, generics, interfaces y más.

S

schutzgeist

4 min read
Polimorfismo OOP: Guía de Fundamentos

Polimorfismo Fundamentos de POO – Vinculación Dinámica, Sobrescritura, Sobrecarga, Genéricos

Este artículo es una aclaración de conceptos sobre polimorfismo en POO, incluidas preguntas de examen y etiquetas.

En Resumen

El polimorfismo permite que una llamada unificada se aplique a diferentes implementaciones concretas, eligiendo la método apropiada en función del contexto, generalmente en tiempo de ejecución. El resultado es software flexible, extensible y con menor acoplamiento a tipos concretos.

Descripción Técnica Compacta

El polimorfismo denota la capacidad de los objetos de responder de manera diferente al mismo mensaje, dependiendo de su tipo real. El núcleo es la vinculación dinámica: las llamadas a métodos se resuelven en tiempo de ejecución mediante tablas de dispatch y vtables hacia la implementación apropiada. Se distingue el polimorfismo de subtipo a través de interfaces y herencia, el polimorfismo paramétrico a través de genéricos, y el polimorfismo ad hoc a través de sobrecarga. El diseño polimórfico respalda el Principio Abierto/Cerrado: las extensiones se logran mediante nuevos tipos en lugar de modificar los existentes.

Puntos Clave Relevantes para el Examen

  • Polimorfismo de subtipo, uso a través de tipo base o interfaz, la implementación concreta se vincula en tiempo de ejecución
  • Polimorfismo paramétrico, genéricos, un algoritmo para muchos tipos, seguridad de tipos sin casting
  • Polimorfismo ad hoc, sobrecarga, mismo nombre, parámetros diferentes, vinculación estática
  • Relevancia IHK, explicar con precisión la diferencia entre sobrescritura y sobrecarga, vinculación dinámica frente a estática
  • Práctica, el patrón Strategy utiliza polimorfismo para intercambiabilidad de comportamiento sin cadenas if-else
  • Aspecto de seguridad, los contratos e invariantes protegen contra sustituciones erróneas, validar entradas
  • Rentabilidad, reduce costos de mantenimiento mediante extensibilidad, menos ramificaciones condicionales
  • Obligación de documentación, contratos de interfaz, precondiciones, postcondiciones, efectos secundarios descritos con claridad

Componentes Principales

  1. Interfaz de contrato, firmas de métodos y semántica
  2. Implementaciones, clases concretas, estrategias
  3. Dispatch dinámico, vtable, single dispatch
  4. Dispatch estático, resolución en tiempo de compilación para sobrecarga
  5. Genéricos, parámetros de tipo, restricciones
  6. Testabilidad, contratos y pruebas de sustitución
  7. Patrones de diseño, Strategy, Template Method, Visitor
  8. Manejo de errores, excepciones compatibles con la interfaz base
  9. Aspectos de rendimiento, llamadas indirectas, inlining, optimización JIT
  10. Soporte de herramientas, UML, diagramas de clases, diagramas de secuencia

Ejemplo Práctico

// Polimorfismo de subtipo vía Strategy
interface PaymentMethod {
Receipt pay(int cents)
}

class CreditCard implements PaymentMethod {
public Receipt pay(int cents) {
// Autorización, clearing
return new Receipt("credit card", cents)
}
}

class PayPal implements PaymentMethod {
public Receipt pay(int cents) {
// Token, capture
return new Receipt("paypal", cents)
}
}

class CheckoutService {
private PaymentMethod method
public CheckoutService(PaymentMethod method) { this.method = method }
public Receipt checkout(int cents) {
if (cents <= 0) throw new IllegalArgumentException("se requiere un monto positivo")
return method.pay(cents)
}
}

Explicación: CheckoutService se comunica únicamente con la interfaz PaymentMethod, las implementaciones concretas se utilizan de manera intercambiable.

Ventajas y Desventajas

Ventajas

  • Separación clara entre contrato e implementación
  • Mejor extensibilidad, lógica condicional reducida
  • Mayor testabilidad mediante mocks y stubs
  • Promueve reutilización y encapsulación

Desventajas

  • Las llamadas indirectas dificultan la depuración y el análisis de rendimiento
  • Contratos incorrectos o vagos conducen a errores de sustitución
  • Las jerarquías demasiado complejas aumentan la carga cognitiva

Preguntas Típicas de Examen (con Respuesta Breve)

  1. ¿Polimorfismo en el contexto de POO? Capacidad de que objetos diferentes se accedan a través del mismo contrato y ejecuten implementaciones dependientes del tipo en tiempo de ejecución.

  2. ¿Sobrecarga frente a Sobrescritura? Sobrecarga: el mismo método, parámetros diferentes, vinculación estática. Sobrescritura: el método heredado se reimplementa con la misma firma, vinculación dinámica.

  3. ¿Respalda el Principio Abierto/Cerrado? Las nuevas variantes se agregan como nuevas implementaciones de una interfaz existente, el código existente permanece sin cambios.

  4. ¿Qué exige el Principio de Sustitución de Liskov? Las subclases e implementaciones deben cumplir las promesas del tipo base, no endurecer precondiciones, no debilitar postcondiciones, respetar invariantes.

  5. ¿Ejemplo práctico sin cascadas if-else? Métodos de pago como estrategias detrás de PaymentMethod, la selección ocurre a través de la implementación concreta, no mediante condicionales.

  6. ¿Tipos de polimorfismo? Polimorfismo de subtipo, polimorfismo paramétrico mediante genéricos, polimorfismo ad hoc mediante sobrecarga, ocasionalmente multiple dispatch y Visitor.

  7. ¿Probar polimorfismo de manera efectiva? Definir una suite de pruebas de contrato contra la interfaz y ejecutarla contra todas las implementaciones, además pruebas de interacción basadas en mocks.

  8. ¿Duck Typing y sus límites? El comportamiento es válido si los métodos requeridos están presentes, sin relación de tipo explícita, flexible pero con menos seguridad en tiempo de compilación.

Fuentes Más Importantes

  1. https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html
  2. https://de.wikipedia.org/wiki/Polymorphie_(Programmierung)
  3. https://martinfowler.com/bliki/Polymorphism.html

Continuando la Ruta de Aprendizaje en POO

Todos los artículos de POO están completos. Vuelve al primer artículo: Fundamentos de Programación Orientada a Objetos POO.

Volver al blog
Share:

Entradas relacionadas