Principio de responsabilidad única

Buenas prácticas,Desarrollo

Single Responsibility – SOLID I

7 Jul , 2014  

Hoy vamos a ver el primer principio que conforma los principios SOLID. Este es, para mi, una de las reglas más importantes a seguir en la programación orientada a objetos, ya que al seguirlo podemos saber muy bien donde estamos no nos perdemos entre líneas y líneas de código. La imagen que ilustra esta entrada es un claro ejemplo de la responsabilidad única aplicada a la realidad.

Single Responsibility, que podamos hacer algo no significa que sea la mejor forma de hacerlo

Principio de responsabilidad única

¿De verdad una navaja como esta es la mejor opción?

La premisa básica de este principio es que una clase debe tener una única razón para cambiar. Supongamos que desarrollamos una clase coche. Esta clase tiene una serie de métodos, en los que encontramos los siguientes:

  • Arrancar
  • Detener
  • Conducir
  • Lavar

Esta claro que las acciones de arrancar o detener el coche son única responsabilidad para la clase coche. Sin embargo el método Conducir presenta otros problema. ¿Quién conduce el coche? ¿Por dónde lo conduce?. Ocurre lo mismo con el método lavar, ¿Quién lo lava? ¿Dónde lo lava?. Nos damos cuenta de que estas responsabilidades no pueden caer también sobre la clase coche, porque un cambio en los datos de éstos métodos o en la información que queremos obtener al consultarlos nos obligan a modificar esta clase.

Un poco de práctica sobre la teoría

Pongamos un ejemplo rápido y práctico de este principio. Siguiendo con el ejemplo anterior, crearemos nuestra clase coche:

Como vemos, nuestra clase coche es la que se encarga de arrancar el motor, o detenerlo. También tenemos unos atributos propios como el color del coche o el nombre del mismo. Supongamos que queremos conducir nuestro coche. Necesitaremos un conductor (aún queda tiempo para que los coches autónomos sean comunes entre nosotros). Siguiendo la lógica de responsabilidad única una forma de hacerlo sería crear una clase conductor que tuviera un coche (Por supuesto, la clase conductor que estamos creando podría ser hija de una clase persona):

Como vemos, en nuestra clase conductor, poseedora de un coche, la que se encarga de conducirlo, marcando los límites de responsabilidades en cada clase, de tal modo que si un día la forma de arrancar el coche y de conducirlo varían las responsabilidades recaen en cada una de sus partes.

Más información

Puedes encontrar más información sobre este principio en los siguientes enlaces, que también me han servido como fuente de información para esta entrada:

Principio de responsabilidad simple aplicado en Java

Principios SOLID en Ruby (inglés)

Principio de responsabilidad única por desarrolloweb

, , ,


A %d blogueros les gusta esto: