Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Patrones de diseño Python: Polimorfismo

Vamos a comenzar una nueva etapa del curso: los patrones de diseño. A lo largo de las siguientes lecciones veremos varios de ellos, pero antes necesitamos entender qué son, para qué sirven y cómo se relacionan con la programación orientada a objetos (POO).


¿Qué son los patrones de diseño?

Son soluciones típicas a problemas comunes que aparecen al desarrollar software. No son reglas estrictas, sino ideas reutilizables que ayudan a que el código sea más claro, mantenible y flexible.

Aunque no dependen exclusivamente de la POO, la mayoría de los patrones se entienden mejor si ya conoces conceptos como clases, herencia o polimorfismo. Por eso es importante dominar esas bases antes de aplicar patrones de forma consciente.

¿Y qué papel juega el polimorfismo?

Polimorfismo significa poder usar objetos de diferentes clases a través de una misma interfaz. En otras palabras, puedes trabajar con varios comportamientos distintos sin tener que cambiar el código que los usa.

Este principio es clave para muchos patrones de diseño. Aquí tienes algunos ejemplos de patrones que se basan directamente en el polimorfismo:

Patrón ¿Para qué se usa?
EstrategiaPara variar algoritmos sin cambiar el código que los usa
Fábrica abstractaPara crear grupos de objetos relacionados
AdaptadorPara adaptar una interfaz sin cambiar el código original
Compuesto (Composite)Para trabajar como si un grupo de objetos fuera uno solo
DecoradorPara agregar funcionalidades a un objeto sin modificar su código
ObservadorPara reaccionar automáticamente a cambios en otros objetos
Cadena de responsabilidadPara pasar una petición por una secuencia de objetos hasta que uno responda
EstadoPara cambiar el comportamiento de un objeto según su estado actual
Método plantillaPara definir el esqueleto de un algoritmo pero delegar partes a subclases
VisitantePara aplicar operaciones a objetos sin cambiar sus clases

¿Qué riesgos hay al aplicar patrones sin comprenderlos?

Muchas personas caen en la programación por imitación: copian patrones sin comprender el problema original. Esto puede hacer que el código sea innecesariamente complejo o rígido.
Por eso es tan importante aprender primero los principios y solo después los patrones específicos. A lo largo de las siguientes lecciones, iremos viendo ejemplos concretos y prácticos de cómo aplicar cada patrón correctamente. --- ## Antipatrones Así como existen soluciones que ayudan (patrones), también hay malas soluciones que se repiten mucho. A estas se les llama **antipatrones**.
Es una estructura o hábito de programación que parece una buena idea al principio, pero termina causando problemas: dificulta el mantenimiento, rompe principios básicos o genera errores difíciles de rastrear.

Ejemplos de antipatrones comunes

Nombre ¿Por qué es un mal hábito?
Objeto Dios (God Object)Tiene demasiadas responsabilidades; todo pasa por él
SingletonSolo permite una instancia; puede dificultar las pruebas y el mantenimiento
Código duplicadoCopiar y pegar lógica sin abstraer

Por ejemplo, el patrón Singletonmuy popular antes— hoy se considera un antipatrón en muchos casos, porque complica las pruebas y limita la flexibilidad. Mira este ejemplo:

class BaseDeDatos:
    _instancia = None

    def __new__(cls):
        if not cls._instancia:
            cls._instancia = super().__new__(cls)
            print("Conectando a la base de datos...")
        return cls._instancia

db1 = BaseDeDatos()
db2 = BaseDeDatos()
print(db1 is db2)  # True, ambas variables apuntan al mismo objeto

Este código garantiza una sola instancia, lo cual puede parecer útil. Pero si más adelante quieres simular conexiones distintas (por ejemplo, en pruebas), este diseño te limita gravemente. Por eso muchos desarrolladores hoy evitan el Singleton.

Este tipo de errores son comunes cuando aplicamos soluciones sin entender bien el contexto. Por eso, antes de copiar un patrón, es clave preguntarse: ¿cuál es el problema que estoy resolviendo?



Resumen

  • Los patrones de diseño son soluciones reutilizables a problemas comunes en el desarrollo de software.
  • Muchos patrones comparten una estructura: una interfaz común y varias clases que representan distintos comportamientos.
  • Copiar patrones sin comprenderlos puede llevar a errores, como crear antipatrones o añadir complejidad innecesaria.

Materiales adicionales

  1. Principio de responsabilidad única 📚 Wikipedia
  2. Antipatrón de diseño 📚 Wikipedia

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY