¿Qué es el principio de responsabilidad única?

En programación y diseño de computadoras, el principio de responsabilidad única es un concepto que defiende la opinión de que cualquier clase en un programa debe realizar solo una función en la aplicación más grande. Esta idea promueve en parte algunos de los ideales de la programación orientada a objetos, como la encapsulación, porque toda una clase se centrará en realizar una sola responsabilidad y dependerá poco de clases externas. Al mismo tiempo, es algo contrario a algunos de los conceptos de la programación orientada a objetos temprana, porque la función de un solo objeto está desacoplada de los datos que maneja el objeto, lo que significa que muchos objetos en combinación podrían necesitar construirse para mantener algunos datos centrales. El principio de responsabilidad única es la base de un tipo de modelo de diseño conocido como diseño impulsado por la responsabilidad.

Un ejemplo del principio de responsabilidad única podría tomar la forma de un teléfono tradicional. Algunos principios de diseño verían el teléfono como un solo objeto que maneja tanto la entrada de la línea telefónica como la transmisión de salida del altavoz. Bajo un modelo de responsabilidad única, en el que un solo objeto debería tener una única responsabilidad, entonces el teléfono consistiría en varios objetos separados, cada uno de los cuales realizaba una única función, como recibir solo la entrada de la línea telefónica o solo enviar los datos a través de el auricular.

Una de las ventajas que hace posible el uso del principio de responsabilidad única es un nivel muy alto de abstracción y modularidad. En el ejemplo del teléfono, la entrada de la línea telefónica o la forma en que la señal se envía al usuario se puede cambiar sin afectar a las clases vecinas siempre que se adhieran al mismo contrato de interfaz. Además, la reutilización de ciertos componentes puede ser muy alta, porque cada clase está completamente encapsulada y se basa muy poco, si es que lo hace, en los objetos circundantes, centrándose en cambio en su única responsabilidad.

Una complicación que podría crear el principio de responsabilidad única es una gran cantidad de clases y objetos que operan todos con los mismos datos. Esto puede significar una gran cantidad de gastos generales y un proceso de diseño complicado. También puede dificultar la depuración de un programa grande, porque una sola parte del programa puede constar de miles de archivos de clases pequeños.

Cuando se aplica el principio de responsabilidad única a través de un diseño impulsado por la responsabilidad, los datos y los métodos utilizados para manipular los datos se separan para fines de diseño. Si bien esto conduce a una cierta libertad, encapsulación y modularidad en el diseño, también puede generar una serie de patrones y diseños intermedios que deben usarse para facilitar una serie de clases que intentan interactuar con los datos a la vez. Por otro lado, si los datos de un objeto y los métodos utilizados para manipularlos están unidos en un solo objeto de múltiples responsabilidades, entonces el código puede volverse más difícil de modificar a medida que los sistemas escalan, cambian o se vuelven más complejos.