Hamburger Icon
Repaso a los principios SOLID: (S) Principio de Responsabilidad Única

Repaso a los principios SOLID: (S) Principio de Responsabilidad Única

Tony Soprano es el jefe de la mafia y personaje principal en la serie Los Soprano. Es un hombre de negocios y líder de su familia criminal. Podemos considerar a Tony Soprano como una clase en el contexto del diseño de software, y las diversas responsabilidades que asume en su vida pueden ser vistas como métodos o funciones que cumple dentro de esa clase.

Los principios SOLID son un conjunto de cinco principios de diseño de software que fueron propuestos por el programador Robert (tío Bob) Martin. Estos principios son guías que ayudan a desarrollar software que sea más mantenible, flexible y fácil de entender. Cada letra de la palabra "SOLID" representa uno de estos principios, en este post vamos a ver en qué consiste la S.

Este conocimiento es clave y te puede ayudar a aplicar patrones de forma correcta.

Relacionar metafóricamente a Tony Soprano con el principio SRP puede ser una forma interesante de entender mejor el concepto.

SRP (Single Responsability Principle)

Principio de responsabilidad única. El nombre ya dice bastante, o por lo menos, nos hace intuir por dónde irán los tiros.

Definición

Este principio establece que una clase o módulo debe tener una única tarea o función principal en el sistema. Si una clase tiene más de una responsabilidad, se vuelve más difícil de entender, mantener y reutilizar.

Al Tony Soprano de este post le interesa aplicarse el cuento. Podemos decir que él debería seguir este principio para evitar una sobrecarga de responsabilidades que podrían entorpecer su eficacia y su capacidad para mantener el control de su familia criminal.

Beneficios

El SRP promueve la cohesión en el diseño, lo que significa que cada clase debe ser altamente cohesiva. Además, este principio ayuda a evitar el acoplamiento excesivo entre clases, lo que mejora la modularidad del código y facilita futuros cambios sin afectar a otras partes del sistema.

Una clase es cohesiva cuando sus métodos y atributos están fuertemente relacionados y trabajan juntos para cumplir un propósito específico. Una clase cohesiva es más fácil de entender, reutilizar y mantener. Además, podrán ser divididas más fácilmente en módulos similares.

Si Tony Soprano siguiera el principio de responsabilidad única, podría delegar ciertas responsabilidades en miembros confiables de su familia, como su consigliere para asuntos estratégicos, su capo para supervisar operaciones específicas y su abogado para manejar asuntos legales.

Pero cuidado, es importante buscar un equilibrio en la cohesión, ya que si es demasiado alta podría llevar a clases extremadamente especializadas y difíciles de combinar para formar funcionalidades más complejas.

Por otro lado, el acoplamiento se refiere al grado de dependencia entre diferentes clases o módulos. Es la medida de cómo una clase está conectada o acoplada con otras clases en el sistema para determinar cómo interactúan diferentes partes del software. Tony sabe hacer de pegamento para mantener unida a la banda organizando a sus lacayos.

Acoplamiento bajo implica que las clases tienen una dependencia limitada entre sí: los cambios en una clase tienen poco o ningún impacto en las otras clases. Si un miembro de la banda muere, pues se le sustituye y pa'lante.

Acoplamiento alto indica una fuerte dependencia entre clases: los cambios en una clase afectan a muchas otras clases en el sistema. Si un miembro de la banda muere, la banda se desmorona y todo se va al garete.

El acoplamiento bajo es deseable para mejorar la mantenibilidad, reusabilidad, escalabilidad y testeo del código. Y para mantener la gestión de residuos funcionando a toda vela, claro -si no has visto Los Soprano, ese es el negocio "oficial" de Tony-.

Aplicación

Para aplicar el principio de responsabilidad única, es útil preguntarse: ¿Cuál es la única razón por la que esta clase existe? Si se identifica más de una razón, es probable que la clase tenga múltiples responsabilidades y sea necesario dividirla en clases más pequeñas y específicas.

Si Tony Soprano intenta asumir demasiadas responsabilidades en su organización criminal, como tomar todas las decisiones operativas, encargarse de las disputas internas, recolectar pagos y resolver asuntos legales, es probable que su rendimiento como líder se vea comprometido; además de que va a colapsar y a desmayarse. Esto sería similar a una clase que tiene muchas responsabilidades, lo que dificulta su comprensión y mantenimiento.

Conclusiones

El principio de responsabilidad única nos dice que para conseguir un código bastante cohesionado, con bajo acoplamiento y que sea fácil de mantener, debemos intentar que cada clase se centre en un único objetivo y delegar otras funciones a otras clases.

Así como una clase con una única responsabilidad es más fácil de entender y mantener en el diseño de software, Tony Soprano también podría beneficiarse al centrarse en sus tareas principales y asignar roles específicos a sus subordinados, para lograr una mejor estructura y eficiencia en su organización.

El siguiente principio es el que empieza por O.