Píldora TAI LIV; Entiende los Principios SOLID en Programación Orientada a Objetos

🧱 ¿Qué son los principios SOLID?

SOLID es un acrónimo que resume cinco principios diseñados para hacer el código más comprensible, flexible y mantenible. Fueron popularizados por Robert C. Martin (Uncle Bob) a principios de los años 2000, aunque algunos fueron planteados antes por otros autores.


📐 ¿Qué significa cada letra de SOLID?

1. S — Single Responsibility Principle (SRP)

🧠 «Una clase debe tener una única razón para cambiar»

  • Significado: Cada clase debe encargarse de una única tarea o responsabilidad.
  • ✅ Bueno: Una clase Factura solo gestiona facturas.
  • ❌ Malo: Una clase Factura que además guarda logs o envía emails.

📚 Similar a: Separación de responsabilidades, separación de preocupaciones (SoC).

💡 Curiosidad: SRP no es solo para clases, también se aplica a funciones, módulos, etc.


2. O — Open/Closed Principle (OCP)

🧠 «El software debe estar abierto para su extensión, pero cerrado para su modificación»

  • Significado: Puedes extender el comportamiento de una clase sin tener que modificar su código base.
  • ✅ Bueno: Usar interfaces o herencia para añadir funcionalidad.
  • ❌ Malo: Editar constantemente una clase antigua para nuevas funciones.

📚 Relacionado con: Polimorfismo, patrón estrategia.

🎭 Anécdota: Se basa en ideas de Bertrand Meyer (1988), autor de Eiffel.


3. L — Liskov Substitution Principle (LSP)

🧠 «Los objetos de una clase derivada deben poder sustituir a los de su clase base sin alterar el comportamiento del programa»

  • Significado: Si Perro hereda de Animal, debería poder usarse como Animal sin romper el sistema.
  • ✅ Bueno: Una subclase que cumple las expectativas del padre.
  • ❌ Malo: Una clase Ave que hereda de Pájaro pero no puede volar.

📚 Relacionado con: Herencia segura, contratos de clase.

👩‍🔬 Curiosidad: Propuesto por Barbara Liskov en 1987.


4. I — Interface Segregation Principle (ISP)

🧠 «Una clase no debe estar forzada a implementar interfaces que no usa»

  • Significado: Es mejor tener muchas interfaces pequeñas y específicas que una grande y genérica.
  • ✅ Bueno: Interfaces como IImprimible, IGuardable, etc.
  • ❌ Malo: Una interfaz IMegaSuperInterface con 20 métodos que casi nadie usa.

📚 Similar a: Principio de mínimo conocimiento.

🔧 Ejemplo clásico: En una impresora 3D, no debería tener que implementar métodos de escaneo si no escanea.


5. D — Dependency Inversion Principle (DIP)

🧠 «Depende de abstracciones, no de concreciones»

  • Significado: Las clases deben depender de interfaces, no de implementaciones concretas.
  • ✅ Bueno: Usar una interfaz IBaseDeDatos y luego inyectar MySQL, PostgreSQL, etc.
  • ❌ Malo: Una clase que instancie directamente new MySQL().

📚 Relacionado con: Inversión de control, inyección de dependencias.

🚪 Metáfora: En vez de construir la casa con ventanas de una marca fija, haces huecos estándar y decides después qué poner.


🌱 ¿De dónde vienen?

Los principios SOLID beben de muchos conceptos de la ingeniería de software:

  • Programación orientada a objetos (POO)
  • Principios de diseño de software de los años 80 y 90
  • Patrones de diseño (como los del libro «Design Patterns» de la Banda de los Cuatro)
  • Principios de arquitectura limpia

🧩 Otros principios o similares

Aunque SOLID es muy conocido, también existen otros:

  • DRY (Don’t Repeat Yourself)
  • KISS (Keep It Simple, Stupid)
  • YAGNI (You Aren’t Gonna Need It)
  • GRASP (General Responsibility Assignment Software Patterns)

📌 ¿Por qué es importante?

  • Hace el código más escalable y mantenible
  • Facilita el trabajo en equipo
  • Evita la deuda técnica
  • Promueve una arquitectura limpia

Deja un comentario