Los 5 principios SOLID que subirán tu nivel de programación

Principios Solid

Los principios SOLID son cruciales para el desarrollo de software, ya que facilitan la creación de sistemas robustos, mantenibles y extensibles. A continuación, exploraremos cada principio mediante ejemplos prácticos, centrándonos en la programación con PHP. Es importante recordar, sin embargo, que los principios SOLID son independientes del lenguaje de programación; PHP se utiliza aquí meramente como un medio para ilustrar estos conceptos universales.


Principios SOLID

S  (Single-Responsability Principle) Principio de responsabilidad única
O  (Open-Closed Principle) Principio abierto y cerrado
L  (Liskov Substitution Principle) Principio de sustitución de Liskov
I  (Interface Segregation Principle) Principio de segregación de interface
D  (Dependency Inversión Principle) Principio de inversión de dependencias

Descripción de cada principio


1 Principio de Responsabilidad Única (Single Responsibility Principle – SRP):

Principio de responsabilidad única, mide el grado de cohesión de un módulo esta relacionado entre sí. Un clase debe
tener sola una razón para cambiar. Una clase debería tener una única responsabilidad. Un error sería aplicar dos
cambios de comportamientos distintos en la misma clase.

En programación orientada a objetos, se suele definir como principio de diseño que cada clase debe tener una única
responsabilidad, y que esta debe estar contenida únicamente en la clase. Así:

  • Una clase debería tener solo una razón para cambiar
  • Cada responsabilidad es el eje del cambio
  • Para contener la propagación del cambio, debemos separar las responsabilidades.
  • Si una clase asume más de una responsabilidad, será más sensible al cambio.
  • Si una clase asume más de una responsabilidad, las responsabilidades se acoplan.
    Ejemplo en php de Single Responsibility Principle – SRP

2. Principio Abierto/Cerrado (Open/Closed Principle – OCP):

Principio abierto y cerrado, nuestras clases, módulos deben ser abiertas para la extensión pero cerradas para la modificación del código ya existente. Modificar lo existente, significa que podemos introducir errores, que hay que modificar nuestros test, hay que revisar el código de nuestros clientes.

El principio abierto-cerrado se puede lograr de muchas otras maneras, pero una de ellas podría ser mediante el uso de la herencia o mediante patrones de diseño de composición como el patrón de estrategia .

Ejemplo de (Open/Closed Principle – OCP) en php

3. Principio de Sustitución de Liskov (Liskov Substitution Principle – LSP):

Principio de sustitución de Liskov, en que momentos las sustitución de una clase por otra puede alterar la corrección de un problema. Otra forma de expresarlo sería, cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.

Su definición formal sería: si S es un subtipo de T, entonces los objetos de tipo T en un programa de computadora pueden ser sustituidos por objetos de tipo S (es decir, los objetos de tipo S pueden sustituir objetos de tipo T), sin alterar ninguna de las propiedades deseables de ese programa


4. Principio de Segregación de Interfaces (Interface Segregation Principle – ISP):

Principio de segregación de interface, los clientes de un programa dado sólo deberían conocer de éste aquellos métodos que realmente usan, y no aquellos que no necesitan usar. Por lo tanto, un cliente no debería ser forzado a usar métodos que no necesiten.

Ejemplo (Interface Segregation Principle – ISP) en PHP

5. Principio de Inversión de Dependencias (Dependency Inversion Principle – DIP):

Principio de inversión de dependencias, es una forma específica de desacoplar módulos de software. Este
principio dice que los módulos de alto nivel no deberían depender de los de bajo nivel, ni las abstracciones de
detalles. Lo que hace que los módulos de alto nivel sean independientes de los detalles de implementación del módulo
de bajo nivel:

  • Los módulos de alto nivel no deberían depender de los módulos de bajo nivel. Ambos deberían depender de
    abstracciones (p.ej., interfaces).
  • Las abstracciones no deberían depender de los detalles. Los detalles (implementaciones concretas) deben depender
    de abstracciones.

La mejor definición para este principio lo encontré en palabras de un instructor de la plataforma Platzi, Hector Benitez:

«Este principio habla de cómo podemos desacoplar nuestro código, nos dice que no debemos crear clases con dependencias muy estrictas, por ejemplo, si tenemos una clase A y dentro del constructor creamos la instancia de una clase B. Podríamos decir que la clase A está muy acoplada con la clase B por que una depende directamente de la otra y por lo tanto será más complicado mantenerlas en caso de que necesitemos modificar su funcionamiento, por otro lado si inyectamos un objeto de la clase B en lugar de crearlo, estamos dividiendo un poco más el control al dejar la creación de la clase B fuera de nuestro constructor, pero mejor aún, si en lugar de que nuestro método reciba la clase B recibe una abstracción superior, como una clase abstracta o una interfaz, pues estamos desacoplando aún más nuestro código y serás capaz de intercambiar objetos externos a esta clase sin que por ello se afecte el funcionamiento de la misma, en este momento tendrás bajo acoplamiento y una mejor estructura en tu proyecto»

Ejemplo (Dependency Inversion Principle – DIP) en PHP

Aplicar los principios SOLID es crucial para desarrollar software de alta calidad que sea fácil de mantener y extender. Al seguir estas directrices, los desarrolladores pueden evitar muchos problemas comunes en el diseño de software y preparar sus sistemas para el futuro.

¿Estás listo para llevar tus habilidades de desarrollo al siguiente nivel aplicando los principios SOLID en tus proyectos PHP? Comienza hoy y comparte tus experiencias o desafíos encontrados. Si este artículo te ha sido útil, no dudes en compartirlo en tus redes sociales


Fuentes:
  • Martin, Robert C. (2003). Agile Software Development: Principles, Patterns, and Practices (en inglés). Pearson
    Education. ISBN 9780135974445.
  • wikipedia
  • Hector Benitez (Platzi) – Principios de programación SOLID

2 comentarios

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *