Saludos.
Iniciamos una serie de publicaciones sobre los principios SOLID. Los principios S.O.L.I.D. son un conjunto de diseños y buenas prácticas que se emplean en OOD y OOP (diseño y programación orientada a objetos). Estos principios fueron desarrollados y publicados por primera vez por Robert “Tío Bob” Martin hace más de una década. En esta oportunidad detallaremos el primero de los principios, el Principio de Responsabilidad Simple. Este principio nos dice:
«There should never be more than one reason for a class to change»
«No debe existir mas que una sola razón para que una clase cambie»
El punto es que todos los atributos y todas las operaciones de una clase deben estar intrínsecamente relacionados con un solo propósito. Si se encuentra que al modificar una clase tiene dos responsabilidades se debe separar en dos clases respectivamente. Una clase que hace muchas cosas, es muy grande o muy complicada de seguro tendrá mas de una sola responsabilidad.
Para comprender mejor este principio vamos a ejemplificar mediante un diseño de clases.

El anterior diagrama muestra la violación del principio de responsabilidad simple ya que vemos que la clase Cuenta tiene más de una responsabilidad, esto se lo puede verificar mediante el método Transferir. Si bien tiene sentido que podamos transferir dinero de una cuenta a otra, vemos que se viola este principio al darle la responsabilidad a la clase Cuenta para dicho propósito. Esta operación debe ser sacada de la clase y llevada a otra que podemos llamar por ejemplo ServicioTransferencia, así nuestra clase Cuenta solo tendría operaciones relacionadas a ella misma.
Veamos como seria una posible solución a la violación del Principio de Responsabilidad Simple.

Mediante este nuevo diseño podemos verificar la única responsabilidad para cada clase. Se ha delegado la responsabilidad a la clase ServicioTransferencia de Transferir dinero de una cuenta origen a una cuenta destino.
Ventajas de Aplicar este principio
- Código más fácil de escribir y de entender.
- Menos propenso a errores, ya que cada clase tiene una única responsabilidad bien definida
- Facilita las tareas de testing : tenemos bien definido que debemos testear en cada clase.
- Facilita las tareas de mantenimientos
- Hace que nuestro código sea más robusto y extensible.
Espero les sea de utilidad.