Patrones de Diseño GRASP
Patrones de Diseño GRASP
Patrones de Diseño GRASP
TALLER DE UML
Profesor: Andrs Muoz Ordenes
Agenda
Patrones de Diseo
GRASP
GoF
PATRONES DE DISEO
Si piensas que los usuarios de tus programas son idiotas, slo los idiotas usarn tus programas (Linus Torvalds)
Patrones de Diseo
GRASP son patrones generales de software para asignacin de
responsabilidades.
Es el acrnimo de General Responsibility Assignment Software
Patterns".
Aunque se considera que ms que patrones propiamente dichos, son
una serie de "buenas prcticas" de aplicacin recomendable en el
diseo de software.
Patrones de Diseo
Patrn de Controlador.
Solucin: 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, dispositivo o subsistema (controlador de fachada).
Representa un escenario de caso de uso en el que tiene lugar el evento del sistema
(controlador de sesin o de caso de uso).
Patrones de Diseo
Patrn Experto de Informacin.
Solucin: Asignar una responsabilidad al experto en informacin la clase
que tiene la informacin necesaria para realizar la responsabilidad.
Problema: Quin debera ser el responsable de conocer una informacin
particular?
Patrones de Diseo
Patrn de Creador.
Solucin: Asignar la responsabilidad a la clase B de crear instancias de la
clase A si cumple uno o ms de los siguientes casos:
B agrega objetos de A
B contiene objetos de A
B registra instancias de objetos de A
B utiliza ms estrechamente objetos de A
B tiene los datos de inicializacin que se pasar a un objeto de A cuando sea creado
Patrones de Diseo
Patrn de Creador.
Patrones de Diseo
Patrn de Alta Cohesin.
Solucin: Asignar una responsabilidad de manera que la cohesin
permanezca alta.
Problema: Cmo mantener la complejidad manejable?
Cohesin:
Informacin que almacena una clase debe de ser coherente y debe estar (en la medida de
lo posible) relacionada con la ella.
Especializacin de una clase.
Patrones de Diseo
Patrn de Bajo Acoplamiento.
Solucin: Asignar una responsabilidad de manera que el acoplamiento
permanezca bajo.
Problema: Cmo soportar bajas dependencias, bajo impacto al cambio e
incremento de la reutilizacin?
Acoplamiento:
Tener las clases lo menos ligadas entre s que se pueda.
Beneficiar la reutilizacin y mantenibilidad de las clases.
Patrones de Diseo
Patrones de Alta Cohesin y Bajo Acomplamiento.
Patrones de Diseo
Otros Patrones:
Patrn de Polimorfismo
Solucin: Cuando una responsabilidad posee varias alternativas para comportamientos
similares, se asignarn a los tipos en que el comportamiento presenta las variantes.
Problema: Cmo manejar las alternativas basadas en el tipo?
Patrn de Indireccin
Solucin: Se asigna la responsabilidad a un objeto intermedio, de manera tal que medie
entre componentes o servicios para que no terminen directamente acoplados.
Problema: De qu manera podemos desacoplar los objetos para as mantener una
potencial reutilizacin y un bajo acoplamiento? Quin debe tener la responsabilidad de
mediar para mantener la indireccin entre las componentes?
Patrones de Diseo
Patrn No Hables con Extraos.
3: agregar(p, cant)
Patrones de Diseo
Patrones GoF:
Escrito por los Gang of Four (GoF, que en espaol es la pandilla de los
cuatro) formada por Erich Gamma, Richard Helm, Ralph Johnson y John
Vlissides.
Fueron por los aos 1994, en el libro Design Patterns: Elements of
Reusable Object Oriented Software de estos autores
Recopilan y documentan 23 patrones de diseo aplicados usualmente por
expertos diseadores de software orientado a objetos.
Los patrones de diseo el grupo de GoF clasifican en 3 grandes categoras
basadas en su propsito:
Creacionales
Estructurales
De Comportamiento
Patrones de Diseo
Patrones GoF Creacionales:
Tratan con las formas de crear instancias de objetos. El objetivo de estos
patrones es de abstraer el proceso de instanciacin y ocultar los detalles
de cmo los objetos son creados o inicializados:
Object Pool (Conjunto de Objetos): Se obtienen objetos nuevos a travs de la clonacin.
Utilizado cuando el costo de crear una clase es mayor que el de clonarla. Especialmente con
objetos muy complejos. Se especifica un tipo de objeto a crear y se utiliza una interfaz del
prototipo para crear un nuevo objeto por clonacin. El proceso de clonacin se inicia
instanciando un tipo de objeto de la clase que queremos clonar.
Abstract Factory (Fbrica abstracta): Permite trabajar con objetos de distintas familias de
manera que las familias no se mezclen entre s y haciendo transparente el tipo de familia
concreta que se est usando.
Builder (Constructor virtual): Abstrae el proceso de creacin de un objeto complejo,
centralizando dicho proceso en un nico punto.
Factory Method (Mtodo de fabricacin): Centraliza en una clase constructora la creacin
de objetos de un subtipo de un tipo determinado, ocultando al usuario la casustica para
elegir el subtipo que crear.
Prototype (Prototipo): Crea nuevos objetos clonndolos de una instancia ya existente.
Singleton (Instancia nica): Garantiza la existencia de una nica instancia para una clase y la
creacin de un mecanismo de acceso global a dicha instancia.
Patrones de Diseo
Patrones GoF Estructurales:
Los patrones estructurales describen como las clases y objetos pueden ser
combinados para formar grandes estructuras y proporcionar nuevas
funcionalidades. Estos objetos adicionados pueden ser incluso objetos
simples u objetos compuestos:
Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que
de otro modo no podra utilizarla.
Bridge (Puente): Desacopla una abstraccin de su implementacin.
Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple
se tratase.
Decorator (Envoltorio): Aade funcionalidad a una clase dinmicamente.
Facade (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o
grupo de interfaces de un subsistema.
Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen
idntica informacin.
Proxy: Mantiene un representante de un objeto.
Patrones de Diseo
Patrones GoF de Comportamiento:
Los patrones de comportamiento ayudan a definir la comunicacin e
iteracin entre los objetos de un sistema. El propsito de este patrn es
reducir el acoplamiento entre los objetos:
Chain of Responsibility (Cadena de responsabilidad): Permite establecer la lnea que deben
llevar los mensajes para que los objetos realicen la tarea indicada.
Command (Orden): Encapsula una operacin en un objeto, permitiendo ejecutar dicha
operacin sin necesidad de conocer el contenido de la misma.
Interpreter (Intrprete): Dado un lenguaje, define una gramtica para dicho lenguaje, as
como las herramientas necesarias para interpretarlo.
Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos
independientemente de la implementacin de estos.
Mediator (Mediador): Define un objeto que coordine la comunicacin entre objetos de
distintas clases, pero que funcionan como un conjunto.
Memento (Recuerdo): Permite volver a estados anteriores del sistema.
Observer (Observador): Define una dependencia de uno-a-muchos entre objetos, de forma
que cuando un objeto cambie de estado se notifique y actualicen automticamente todos
los objetos que dependen de l.
Patrones de Diseo
Patrones GoF de Comportamiento:
Los patrones de comportamiento (cont):
State (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie
su estado interno.
Strategy (Estrategia): Permite disponer de varios mtodos para resolver un problema y
elegir cul utilizar en tiempo de ejecucin.
Template Method (Mtodo plantilla): Define en una operacin el esqueleto de un
algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases
redefinan ciertos pasos de un algoritmo sin cambiar su estructura.
Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarqua de clases sin
modificar las clases sobre las que opera..