Los Principios SOLID son uno de los conceptos de programación y diseño de software más populares.
Seguramente ya has intentado muchas veces aprenderlos y aplicarlos en tu día a día, pero se te siguen resistiendo.
Esto le pasa a todo el mundo, porque son conceptos abstractos difíciles de explicar y no se dan los detalles necesarios para bajarlos a tierra.
Soy Antonio Leiva, ingeniero de software y formador, y tras enseñarles a muchos de mis alumnos este principios, puedo darte las claves para que los entiendas y los apliques de una vez por todas.
Además, si llegas hasta el final, vas a descubrir otro Principio que, aunque inicialmente no forma parte de los Principios SOLID, es vital aplicarlo también y muchas veces trabaja en conjunto.
Sigue leyendo los artículos porque no te lo desvelaré hasta el final ?
O si lo prefieres, puedes descargarte el contenido en formato PDF y leerlo donde quieras. Te he preparado esta guía de Principios SOLID para ti.
¿Qué son los Principios SOLID?
Son un conjunto de principios aplicables a la Programación Orientada a Objetos que, si los usas correctamente, te ayudarán a escribir software de calidad en cualquier lenguaje de programación orientada a objetos. Gracias a ellos, crearás código que será más fácil de leer, testear y mantener.
Los principios en los que se basa SOLID son los siguientes:
- Principio de Responsabilidad Única (Single Responsibility Principle)
- Principio Open/Closed (Open/Closed Principle)
- Principio de Sustitución de Liskov (Liskov Substitution Principle)
- Principio de Segregación de Interfaces (Interface Segregation Principle)
- Principio de Inversión de Dependencias (Dependency Inversion Principle)
Estos principios son la base de mucha literatura que encontrarás en torno al desarrollo de software: muchas arquitecturas se basan en ellos para proveer flexibilidad, el testing necesita confiar en ellos para poder validar partes de código de forma independiente, y los procesos de refactorización serán mucho más sencillos si se cumplen estas reglas. Así que es muy conveniente que asimiles bien estos conceptos.
Fueron publicados por primera vez por Robert C. Martin, también conocido como Uncle Bob, en su libro Agile Software Development: Principles, Patterns, and Practices. Una persona que te recomiendo seguir, y echarle un vistazo a su blog de vez en cuando.
¿Qué beneficios aporta usar los Principios SOLID?
Las ventajas de utilizar los Principios SOLID son innumerables, ya que nos aportan todas esas características que siempre queremos ver en un software de calidad.
En cada uno de los principios nos iremos centrando en qué aportan específicamente, pero es interesante hacer un resumen general de lo que conseguiremos con ellos:
Software más flexible: mejoran la cohesión disminuyendo el acoplamiento
Los conceptos de cohesión y acoplamiento merecen un artículo a parte, pero a grandes rasgos lo que buscamos de un buen código es que sus clases puedan trabajar de forma independiente y que el cambio de uno afecte lo menos posible al resto.
Obviamente cuando dos clases se relacionan entre sí para trabajar juntas (y esto tiene que ocurrir sí o sí), va a existir un acoplamiento entre ellas.
Pero existen distintos niveles de acoplamiento, y gracias a algunos de los Principios SOLID, podemos relajar esas dependencias y hacerlas mucho más flexibles a cambios.
Te van a hacer entender mucho mejor las arquitecturas
Siempre que hablo de arquitecturas, noto que hay una barrera importante para entender cómo aplicarlas y qué beneficios aportan.
Esto es porque primero hace falta entender los principios sobre los que se sustentan, y los principios SOLID son muy importantes para ello.
Simplifican la creación de tests
Todo esto está muy relacionado con los puntos anteriores: si tienes tu código desacoplado y una buena arquitectura, los tests van a ser mucho más sencillos.
En un vídeo anterior ya comentaba los 7 errores que solemos cometer al escribir tests, y mucho del tema va por aquí.
Al final piensa que todo es como una cadena: si aplicas bien los principios, organizas mejor tu código. Esto te permite definir una arquitectura que hará que los tests sean más sencillos.
Podría decirse por tanto que los Principios SOLID son parte de la base de un código de calidad.
Los Principios SOLID están muy interrelacionados
Estos principios actúan como un todo. No es casualidad que se expliquen de forma conjunta.
Y esto tiene dos consecuencias muy importantes de entender:
Unos principios no pueden existir sin los otros
Una pregunta muy recurrente en mi formación de Architect Coders cuando vemos estos Principios es que parece que al querer aplicar uno de ellos, hay otro que necesitan aplicar inevitablemente.
¡Claro! Ahí está la gracia. Aún no hemos hablado de los Principios a fondo, pero por poner un ejemplo:
Imagina que tienes una clase A que tiene un acoplamiento muy fuerte con una clase B, de tal forma que cada vez que cambia B inevitablemente tiene que cambiar A.
Esto es muy posible que esté incumpliendo el Principio de Responsabilidad Única. La forma de cumplirlo sería haciendo que cuando B cambie, A no lo haga. Y para esto, la solución puede ser aplicar el Principio de Inversión de Dependencias.
¡No pasa nada! Esto es muy normal y te pasará casi siempre.
Un mismo problema se puede resolver desde dos perspectivas distintas en función de en qué Principio nos enfoquemos cuando lo resolvamos. Pero el resultado será el mismo.
Al cumplir un Principio puede que estés incumpliendo otro
Esto es lo más difícil de aceptar: muchas veces es imposible cumplir todos los Principios a la vez.
Porque al aplicar un Principio, se puede estar dando la espalda a otro.
Pero no te obsesiones con esto: al final lo importante es entender la potencia de cada Principio.
Y ese conocimiento unido a la experiencia te irá diciendo poco a poco cuáles son las mejores decisiones a tomar.
Cómo aprender a usar los Principios SOLID
Ahora que ya tenemos claros los conceptos, puedes empezar a entenderlos uno a uno y aprender cómo aplicarlos.
Para ello, te animo a que te descargues de forma gratuita la guía de Principios SOLID que he preparado para ti. Con todo el contenido en PDF para que puedas leerlo donde quieras.
También, en el siguiente artículo, verás el primero de los Principios: El Principio de Responsabilidad Única.
Principio de responsabilidad única (SOLID 1ª parte)
El Principio de responsabilidad única es el primero de los cinco que componen SOLID. Cada unidad de código debe realizar una única cosa.
Principio Open/Closed (SOLID 2ª parte)
El principio Open/Closed nos dice que una entidad de código debe estar abierta a extensión y cerrada a modificaciones. Segunda parte de los principios SOLID
Principio de sustitución de Liskov (SOLID 3ª parte)
El principio de sustitución de Liskov dice que cada clase que hereda de otra puede usarse en lugar de la padre sin necesidad de conocer sus diferencias.
Principio de Segregación de Interfaces (SOLID 4ª parte)
El principio de segregación de interfaces dice que ninguna clase debería verse forzada a depender de métodos que no usa. Debemos usar interfaces pequeñas.
Principio de Inversión de Dependencias (SOLID 5ª parte)
El principio de inversión de dependencias dice que los módulos de alto nivel no deberían depender de los de bajo nivel, ni las abstracciones de detalles.