stringtranslate.com

Diseño basado en la responsabilidad

El diseño basado en responsabilidades 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 considerando las acciones de las que es responsable el objeto y la información que comparte. Fue propuesta 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 de utilizar datos para determinar el flujo de control , no el diseño de clases.

En el modelo cliente-servidor al que hacen referencia, tanto el cliente como el servidor son clases o instancias de clases. En cualquier momento particular, tanto el cliente como el servidor representan un objeto. Ambas partes se comprometen con 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 impulsado por la responsabilidad intenta evitar tratar con detalles, como la forma en que se llevan a cabo las solicitudes, al especificar 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 lleva a cabo una solicitud es privada para el servidor.

Para encapsular aún más el servidor, Wirfs-Brock y Wilkerson piden características del lenguaje que limiten la influencia externa sobre el comportamiento de una clase. Exigen que la visibilidad de los miembros y las funciones sea muy precisa, como en el lenguaje de programación Eiffel . En el lenguaje de programación Newspeak se puede controlar aún más la visibilidad de las clases .

Descripción general

El diseño basado en responsabilidades 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 tarde, 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 capacidad única.

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

Bloques de construcción

En su libro Object Design: Roles, Responsibilities and Collaborations , [4] los autores describen los siguientes componentes básicos que conforman el diseño impulsado por la responsabilidad.

Objetos

Los objetos se describen como cosas que tienen comportamientos similares a los de una máquina y que pueden conectarse entre sí para que funcionen en conjunto. Estos objetos desempeñan funciones bien definidas y encapsulan respuestas e información programadas. [5]

Roles

El rol de un objeto se refiere a una vista exterior de qué servicio general ofrece el objeto. Es un conjunto de responsabilidades relacionadas. [5] Puede implementarse como una clase o una interfaz. Sin embargo, la interfaz es la implementación preferida, ya que aumenta la flexibilidad al ocultar la clase concreta que, en última instancia, realiza el trabajo. [12]

Estereotipos de roles: Los estereotipos de roles son roles simplificados que vienen con responsabilidades predefinidas. [13] Hay varias categorías.

Estilo de control

Una parte importante del proceso de diseño basado en responsabilidades es la distribución de las responsabilidades de control, lo que da como resultado el desarrollo de un estilo de control. Un estilo de control se ocupa del flujo de control entre subsistemas.

Estilo de control centralizado

Este estilo de control impone un paradigma procedimental a la estructura de la aplicación y coloca las responsabilidades de toma de decisiones importantes en sólo unos pocos objetos o en un único objeto.

Tipos
Ventajas
Desventajas
Cuándo utilizar

Cuando las decisiones a tomar son pocas, sencillas y relacionadas con una única tarea.

Estilo de control delegado

Un estilo de control delegado se encuentra entre un estilo de control centralizado y uno disperso. Pasa parte de la toma de decisiones y gran parte de la acción a objetos que rodean un centro de control. Cada objeto vecino tiene un papel importante que desempeñar. También se puede denominar modelo impulsado por eventos, en el que el control se delega al objeto que le solicita que procese el evento.

Tipos[referencia]
Ventajas
Desventajas
Cuándo utilizar

Cuando se quiere delegar trabajo a objetos más especializados.

Estilo de control agrupado

Este estilo de control es una variación del estilo de control centralizado en el que el control se reparte entre un grupo de objetos cuyas acciones están coordinadas. [19] La principal diferencia entre un estilo de control agrupado y delegado es que en un estilo de control agrupado, los objetos de toma de decisiones se encuentran dentro de un centro de control, mientras que en un estilo de control delegado se encuentran principalmente fuera. [20]

Estilo de control disperso

Un estilo de control disperso no contiene ningún centro de control. La lógica se distribuye entre toda la población de objetos, manteniendo cada objeto pequeño y creando la menor cantidad posible de dependencias entre ellos. [21]

Ventajas
Desventajas
Cuándo utilizar

Nunca.

Estilo de control preferido

Tras los resultados de los experimentos realizados, sólo la alta dirección tiene las habilidades necesarias para hacer uso de los beneficios del estilo de control delegado y del estilo de control centralizado para los programadores. No se menciona ningún contexto sobre los empleados de nivel medio. [17]

Referencias

  1. ^ Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). "Diseño orientado a objetos: un enfoque basado en la responsabilidad". ACM SIGPLAN Notices . 24 (10): 74. doi : 10.1145/74878.74885 .
  2. ^ Anthony JH Simons; Monique Snoeck; Kitty Hung (1998). "Patrones de diseño como papel tornasol para probar la solidez de los métodos orientados a objetos". Oois'98 . pp. 129–147. CiteSeerX 10.1.1.130.8713 . doi :10.1007/978-1-4471-0895-5_10. ISBN  978-1-85233-046-0.
  3. ^ Steven R. Haynes; Isaac G. Councill; Frank E. Ritter (2004). "Ingeniería explicativa basada en la responsabilidad para modelos cognitivos".
  4. ^ Wirfs-Brock, Rebecca; McKean, Alan (2003). Diseño de objetos: roles, responsabilidades y colaboraciones . Indianápolis, IN: Addison-Wesley. ISBN 978-0201379433.
  5. ^ abcde Wirfs-Brock y McKean 2002, págs. 3
  6. ^ Wirfs-Brock y McKean 2002, págs. 58
  7. ^ abc Wirfs-Brock y McKean 2002, págs. 61
  8. ^ Véase Wirfs-Brock y McKean 2002, págs. 72
  9. ^ Véase Wirfs-Brock y McKean 2002, págs. 17
  10. ^ Véase Wirfs-Brock y McKean 2002, págs. 126
  11. ^ abc Wirfs-Brock y McKean 2002, págs. 168
  12. ^ Wirfs-Brock y McKean 2002, págs. 340
  13. ^ abcde Wirfs-Brock y McKean 2002, págs. 4
  14. ^ abcdef Wirfs-Brock y McKean 2002, págs. 93
  15. ^ abc Wirfs-Brock y McKean 2002, págs. 165
  16. ^ Wirfs-Brock y McKean 2002, págs. 164
  17. ^ ab Eric, Arisholm; Dag IK, Sjoberg (2004). "Evaluación del efecto de un estilo de control delegado versus centralizado en la mantenibilidad del software orientado a objetos". IEEE Transactions on Software Engineering . 30 (8): 521–534. doi :10.1109/TSE.2004.43. S2CID  6396127.
  18. ^ Wirfs-Brock y McKean 2002, págs. 196
  19. ^ Wirfs-Brock y McKean 2002, págs. 197
  20. ^ Wirfs-Brock y McKean 2002, págs. 213
  21. ^ Wirfs-Brock y McKean 2002, págs. 30

Bibliografía