Este documento describe algunas ventajas de usar patrones de diseño como permitir reusar soluciones probadas y facilitar la comunicación. Luego describe el patrón GRASP (Patrones de Principios Generales para Asignar Responsabilidades), incluyendo principios como asignar responsabilidades al experto en información, al creador, para mantener alta cohesión y bajo acoplamiento, y usar un controlador.
1. Ventajas del diseño con patrones
• Permiten rehusar soluciones probadas
• Facilitan la comunicación entre diseñadores
• Los patrones tienen nombres estándar
• Facilitan el aprendizaje al diseñador inexperto
3. GRASP (Patrones de Principios
Generales para Asignar
Responsabilidades)
• Experto en información
• Creador
• Alta cohesión
• Bajo acoplamiento
• Controlador
4. Experto en información
• Problema: ¿Cuál es un principio para asignar
responsabilidades a los objetos?
• Solución: Asignar una responsabilidad al
experto en información (la clase que tiene la
información necesaria para realizar la
responsabilidad)
5. 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 la clase A si se cumple una o más de los
casos siguientes:
• B agrega objetos de A
• B contiene objetos de A
• B registra instancias de objetos de A
• B utiliza más estrechamente objetos de A
• B tiene los datos de inicialización que se pasará a un
objeto de A cuando sea creado
6.
7. Alta cohesión
• Problema: ¿Cómo mantener la complejidad
manejable?
• Asignar una responsabilidad de manera que la
cohesión permanezca alta.
8. Bajo acoplamiento
• Problema: ¿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.
• Una clase con alto acoplamiento confía en
muchas otras clases
• Los cambios en las clases relacionadas fuerzan
cambios locales
9. Controlador
• Problema: ¿Quién debe ser el responsable de
gestionar un evento de entrada al sistema?
• Asignar la responsabilidad de recibir o manejar un mensaje de
evento del sistema a una clase que representa una de las
siguientes opciones
• Representa el sistema global
• Utiliza la misma clase controlador para todos los eventos del
sistema