Diseño impulsado por la responsabilidad


El diseño basado en la responsabilidad es una técnica de diseño en la programación orientada a objetos , que mejora la encapsulación mediante el uso del modelo cliente-servidor . Se centra en el contrato al considerar las acciones de las que el objeto es responsable y la información que comparte el objeto. Fue propuesto por Rebecca Wirfs-Brock y Brian Wilkerson.

El diseño basado en la responsabilidad contrasta directamente con el diseño basado en datos, que promueve la definición del comportamiento de una clase junto con los datos que contiene. El diseño basado en datos no es lo mismo que la programación basada en datos , que se ocupa del uso de datos para determinar el flujo de control , no el diseño de clases.

En el modelo cliente-servidor al que se refieren, tanto el cliente como el servidor son clases o instancias de clases. En cualquier momento particular, el cliente o el servidor representan un objeto. Ambas partes se comprometen a un contrato e intercambian información adhiriéndose a él. El cliente solo puede realizar las solicitudes especificadas en el contrato y el servidor debe responder a estas solicitudes. [1] Por lo tanto, el diseño basado en la responsabilidad trata de evitar tratar con detalles, como la forma en que se llevan a cabo las solicitudes, especificando solo la intención de una determinada solicitud. El beneficio es una mayor encapsulación., ya que la especificación de la forma exacta en que se realiza una solicitud es privada para el servidor.

Para promover la encapsulación del servidor, Wirfs-Brock y Wilkerson solicitan características del lenguaje que limiten la influencia externa al comportamiento de una clase. Exigen que la visibilidad de los miembros y las funciones sea detallada, como en el lenguaje de programación Eiffel . El lenguaje de programación Newspeak ofrece un control aún más preciso de la visibilidad de las clases pares .

El diseño impulsado por la responsabilidad se centra en los objetos como abstracciones de comportamiento que se caracterizan por sus responsabilidades. La técnica de modelado de tarjetas CRC se utiliza para generar estas abstracciones de comportamiento. El resto de la estructura del objeto, incluidos los atributos de datos, se asigna más adelante, cuando sea necesario. [2] Esto hace que el diseño siga la jerarquía de tipos para la herencia, lo que mejora la encapsulación y facilita la identificación de clases abstractas . También puede agrupar las clases en función de sus clientes, lo que se considera una habilidad única.

Un buen diseño orientado a objetos implica un enfoque temprano en los comportamientos para realizar las capacidades que cumplen con los requisitos establecidos y una vinculación tardía de los detalles de implementación con los requisitos. Este enfoque ayuda especialmente a descentralizar el control y distribuir el comportamiento del sistema, lo que puede ayudar a administrar las complejidades de los sistemas grandes o distribuidos de alta funcionalidad . De manera similar, puede ayudar a diseñar y mantener instalaciones de explicación para modelos cognitivos , agentes inteligentes y otros sistemas basados ​​en el conocimiento . [3]