Patrones de Diseño GRASP

3
[Escribir el título del documento] [Escribir el nombre del autor] Patrones de Diseño GRASP Un patrón es una descripción de un problema bien conocido que suele incluir: Descripción Escenario de Uso Solución concreta La consecuencias de utilizar este patrón Ejemplos de implementación Lista de patrones relacionados GRASP es el acrónimo de G eneral R esponsibility A ssignment S oftware P atterns. Una de las cosas más complicadas en Orientación a Objeto consiste en elegir las clases adecuadas y decidir como estas clases deben interactuar. Incluso cuando utilizamos metodologías rápidas como programación extrema (extreme programming) y centramos el proceso en el desarrollo continuo, es inevitable elegir cuidadosamente las responsabilidades de cada clase en la primera codificación y, fundamentalmente, en la refactorización (continual) de nuestro programa. Los patrones GRASP describen los principios fundamentales de diseño de objetos para la asignación de responsabilidades. Constituyen un apoyo para la enseñanza que ayuda a entender el diseño de objeto esencial y aplica el razonamiento para el diseño de una forma sistemática, racional y explicable. En cuanto a las responsabilidades UML define una responsabilidad como “un contrato u obligación de un clasificador”. Las responsabilidades están relacionadas con las obligaciones de un objeto en cuanto a su comportamiento. Básicamente, estas responsabilidades son de los siguientes dos tipos: Conocer: * Conocer los datos privados encapsulados. * Conocer los objetos relacionados. * Conocer las cosas que puede derivar o calcular. Hacer:

Transcript of Patrones de Diseño GRASP

Page 1: Patrones de Diseño GRASP

[Escribir el título del documento]

[Escribir el nombre del autor]

Patrones de Diseño GRASP

Un patrón es una descripción de un problema bien conocido que suele incluir:

Descripción Escenario de Uso Solución concreta La consecuencias de utilizar este patrón Ejemplos de implementación Lista de patrones relacionados

GRASP es el acrónimo de General Responsibility Assignment Software Patterns. Una de las cosas más complicadas en Orientación a Objeto consiste en elegir las clases adecuadas y decidir como estas clases deben interactuar. Incluso cuando utilizamos metodologías rápidas como programación extrema (extreme programming) y centramos el proceso en el desarrollo continuo, es inevitable elegir cuidadosamente las responsabilidades de cada clase en la primera codificación y, fundamentalmente, en la refactorización (continual) de nuestro programa.

Los patrones GRASP describen los principios fundamentales de diseño de objetos para la asignación de responsabilidades. Constituyen un apoyo para la enseñanza que ayuda a entender el diseño de objeto esencial y aplica el razonamiento para el diseño de una forma sistemática, racional y explicable.

En cuanto a las responsabilidades UML define una responsabilidad como “un contrato u obligación de un clasificador”.

Las responsabilidades están relacionadas con las obligaciones de un objeto en cuanto a su comportamiento.

Básicamente, estas responsabilidades son de los siguientes dos tipos:

Conocer:

* Conocer los datos privados encapsulados.* Conocer los objetos relacionados.* Conocer las cosas que puede derivar o calcular.

Hacer:

* Hacer algo él mismo, como crear un objeto o hacer un cálculo.* Iniciar una acción en otros objetos.* Controlar y coordinar actividades en otros objetos.

GRASP Se pueden destacar 5 patrones Principales que son:

Experto.Creador.Alta cohesión.

Page 2: Patrones de Diseño GRASP

[Escribir el título del documento]

[Escribir el nombre del autor]

Bajo acoplamiento.Controlador.

Y 4 patrones GRASP adicionales que son:

Fabricación Pura.Polimorfismo.Indirección.No hables con extraños.

Nombre del patrón Problema Solución

Experto¿Cuál es un principio general

para asignar responsabilidades a los objetos?

Asignar una responsabilidad al experto en información – la clase que tiene la información necesaria para la realización de la asignación.

Creador

¿Quién debería ser el responsable de la creación de una nueva instancia de alguna

clase?

Asignar a la clase B la responsabilidad de crear una instancia de clase A si se cumple uno o más de los casos siguientes:

1. B agrega objetos de A2. B contiene objetos de A3. B registra instancias de objetos de A4. B utiliza más estrechamente objetos de A.5. B tiene datos de inicialización que se pasarán a un

objeto de A cuando sea creado (por tanto, B es un Experto con respecto ala creación de A).

6. B es un creador de los objetos A.

Bajo Acoplamiento

¿Cómo soportar bajas dependencias, bajo impacto

del cambio e incremento de la reutilización?

Asignar una responsabilidad de manera que el acoplamiento permanezca bajo.

Alta cohesión ¿Cómo mantener la complejidad manejable?

Asignar una responsabilidad de manera que la cohesión permanezca alta.

Controlador ¿Quién debería ser el responsable de gestionar un

evento de entrada al sistema?

Asignar una responsabilidad de recibir o manejar un mensaje de evento del sistema a una clase que representa una de las opciones siguientes:

1. Representa el sistema global, dispositivo o subsistema.

2. Representa un caso de uso en el que tiene lugar el evento del sistema a menudo denominado <nombre del caso de uso> Manejador, <nombre del caso de uso> coordinador, <nombre del caso de uso> Sesión.

•Utilice la misma clase controlador para todos los eventos del sistema en el mismo escenario de caso de uso.

•Informalmente, una sesión es una instancia de una conversación con un actor. Las sesiones pueden tener cualquier duración, pero se organizan a menudo en función de

Page 3: Patrones de Diseño GRASP

[Escribir el título del documento]

[Escribir el nombre del autor]

casos de uso.