La programación orientada a objetos nos permite agrupar entidades con funcionalidades relacionadas entre sí. Sin embargo, esto no evita que pueda existir una capa de confusión a la hora de ir añadiendo funcionalidades, se vaya realizando mantenimiento, etc.
Ante este problema, Robert Cecile Martin estableció 5 directrices para facilitar a los desarrolladores la creación de programas legibles y sin dificultad en su mantenimiento.
Estos principios son conocidos como SOLID y a esto responden sus siglas en inglés:
- S: Single responsibility principle – Principio de responsabilidad única.
- O: Open/ closed principle – Principio de abierto/cerrado.
- L: Liskov substitution principle – Principio de sustitución de Liskov.
- I: Interface segregation principle – Principio de segregación de la interfaz.
- D:Dependency inversion principle – Principio de inversión de dependencia.
Objetivo de la aplicación de los principios SOLID
Algunas de las ventajas que podemos encontrar en la aplicación de estos principios son:
- Sencillez y mayor simplicidad a la hora de añadir nuevas funcionalidades.
- Rapidez y facilidad en el mantenimiento del código.
- Mayor reusabilidad y calidad del código.
En definitiva, la aplicación de los principios SOLIDfacilita el trabajocon el objetivo de desarrollar un software de calidad.
Los principios SOLID
Ahora vamos a ver con más detalle cada uno de estos principios:
Principio de responsabilidad única
Establece que una clase, microservicio o componente tenga asignada la responsabilidad de una única cosa. Es decir, si una clase tiene varias responsabilidades, consecuentemente, el cambio de una responsabilidad provocará la modificación de otras responsabilidades, complicando mucho el proceso. La solución es separar las responsabilidades de las clases para que cada una de ellas se encargue de sus operaciones. Como resultado, el programa será mucho más cohesivo y más encapsulado.
Principio de Abierto/ Cerrado
Este principio sostiene que las clases que se utilizan deberían estar abiertas para poder extenderse y cerradas para realizar cualquier cambio o modificación.
Principio de sustitución de Liskov
Al cumplirse este principio se confirma que el programa tiene una jerarquía de clases fácil de entender y un código reutilizable.
Este principio sostiene que, si en un programa utilizamos una determinada clase, deberíamos poder utilizar cualquiera de sus subclases sin tener que interferir en la funcionalidad del programa. Es decir, una subclase debe ser sustituible por su superclase.
Principio de segregación de interfaz
Este principio declara que los clientes no deberían verse forzados a depender de interfaces que no usan. Cada clase implementa las interfaces que realmente necesitan sus métodos. Al añadir nuevas funcionalidades, esto nos permitirá ahorrar tiempo mientras estamos cumpliendo también con el principio de Responsabilidad Única.
Por ejemplo, suponiendo que tenemos una clase que implementa una interfaz que un cliente no usa pero que otros clientes sí. Gracias a este principio, este cliente no se verá afectado por los cambios requeridos por otros clientes en dicha interfaz.
Principio de inversión de dependencias
El propósito de este principio es reducir las dependencias entre los módulos del código, o lo que es lo mismo, alcanzar un bajo acoplamiento de las clases. Es decir:
- Los módulos de alto nivel deberían depender de abstracciones.
- Las abstracciones no deberían depender de detalles, sino a la inversa: los detalles deberían depender de abstracciones.
Llegará un punto en el que el programa estará constituido por muchos módulos. Es en este momento que deberíamos añadir las dependencias, permitiéndonos un control de las funcionalidades desde un sitio concreto y la realización de pruebas o testings más sencillos.
En resumen…
A priori, la aplicación de estos 5 principios SOLID parece algo complejo. Sin embargo, a lo largo del tiempo y mediante la práctica, pasará a ser parte del proceso habitual de programación y que, a su vez, nos facilitará en gran medida esta labor.
En consecuencia, el mantenimiento del programa resultante será mucho más sencillo tanto para desarrolladores actuales como para futuros, ya que podrán ver una estructura muy organizada y clara del programa.
Conecta