Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Patrones

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 23

Federico Peinado

www.federicopeinado.es
Depto. de Ingeniera del Software e
Inteligencia Artificial
disia.fdi.ucm.es
Facultad de Informtica
www.fdi.ucm.es
Universidad Complutense de Madrid
www.ucm.es

Conviene

disear e implementar elementos


software que puedan usarse para construir
muchos programas diferentes

Ahorra esfuerzo (evitamos reinventar la rueda)


Permite concentrarse siempre en funcionalidad nueva
Mejora indirectamente la calidad (hay ms revisiones)

Ojo!

Desarrollar software reutilizable es ms


difcil y costoso que no reutilizable

Implica resolver una familia de problemas en lugar de

resolver un nico problema particular


Implicar saber programar software flexible y prever los
ejes de cambio
Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Anlisis
Requisitos de la aplicacin
Especificaciones funcionales

Diseo de alto nivel

Arquitecturas software
Armazones software (frameworks)

Diseo de bajo nivel

Patrones de diseo software

Cdigo

Componentes software
Bibliotecas de cdigo
PE en funciones / POO en mtodos
Cortar y pegar
Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

El DOO es difcil, y el DOO reutilizable ms difcil todava


Los desafos de diseo se repiten y los diseadores con
experiencia suelen acabar conociendo las mejores soluciones
Esas buenas ideas de diseo se conocen como patrones de diseo

Definiciones de patrones de diseo


Originalmente, en Arquitectura

(Alexander, 1977)
Cada patrn describe un problema que ocurre una y otra vez en
nuestro entorno, y luego describe el ncleo de la solucin a dicho
problema, de manera que puedas usar esa solucin un milln de veces
sin que en realidad lo ests resolviendo dos veces de la misma forma
Posteriormente, en Ingeniera del Software
(Gamma, Helm, Johnson y Vlissides, 1995) alias Gang of Four (GoF)
Un patrn de diseo nombra, abstrae e identifica los aspectos
fundamentales de una estructura comn de diseo que la hacen til para
la creacin de un diseo orientado a objetos reutilizable

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Nivel/Tipo

Creacin

Estructura

Comportamiento

Clase

Factory method/
Mtodo de fabricacin

Adapter/Clase
adaptadora

Interpreter/Intrprete
Template method/Mtodo
plantilla

Objeto

Abstract factory/
Fbrica abstracta
Builder/Constructor
virtual
Prototype/Prototipo
Singleton/Ejemplar
nico

Adapter/Objeto
adaptador
Bridge/Puente
Composite/Objeto
compuesto
Decorator/Decorador
Facade/Fachada
Flyweight/Peso ligero
Proxy/Intermediario

Chain of responsability/
Cadena de responsabilidad
Command/Orden
Iterator/Iterador
Mediator/Mediador
Memento/Recuerdo
Observer/Observador
State/Estado
Strategy/Estrategia
Visitor/Visitante

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Nombre
Suele usarse el original en ingls del libro de GoF
Se han convertido en vocabulario comn en DOO

Propsito

Descripcin de la situacin problemtica o compleja en la que

parece conveniente aplicar el patrn

Solucin

Estructuras de diseo involucradas


Elementos
Relaciones entre estos elementos
Responsabilidades y colaboraciones que mantienen estos elementos

Consecuencias

Discusin acerca de las ventajas y los inconvenientes del patrn


Coste asociado, flexibilidad conseguida, alternativas que hay o no hay

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Anticpate a las situaciones que te puedan obligar a


modificar el diseo
Decide qu cambios te gustara poder hacer en el
futuro sin necesidad de modificar el diseo
Flexibiliza aquello que haya sido frecuente de
cambios en las ltimas iteraciones del desarrollo
Recuerda: La reutilizacin siempre tiene un coste

No afrontes un proyecto usando patrones a priori


Conoce a fondo las consecuencias del patrn antes de usarlo
Los patrones deberan surgir naturalmente al disear

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Controlar explcitamente la creacin explcita de objetos


(Fbrica abstracta, Mtodo de fabricacin y Prototipo)
Gestionar dependencias con operaciones concretas
(Cadena de responsabilidad y Orden)
Gestionar dependencias con la plataforma
(Fbrica abstracta y Puente)
Gestionar dependencias con la implementacin interna de los objetos
(Fbrica abstracta, Puente, Recuerdo e Intermediario)
Gestionar dependencias con los algoritmos
(Constructor virtual, Iterador, Estrategia, Mtodo plantilla, y Visitante)
Minimizar el acoplamiento
(Fbrica abstracta, Puente, Cadena de responsabilidad, Orden, Fachada,
Mediador y Observador)
Controlar la extensin de funcionalidad mediante subclases
(Puente, Cadena de responsabilidad, Objeto compuesto, Decorador,
Observador y Estrategia)
Resolver la imposibilidad de modificar ciertas clases libremente
(Clase adaptadora, Decorador y Visitante)

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

Lo contrario de los patrones: malas soluciones de DOO


que debemos evitar
Clases con demasiada funcionalidad (haciendo DE, en realidad)
Clases que slo funcionan si se llama a sus mtodos en orden
Clases que heredan funcionalidad auxiliar de otras cuando

deberan delegar responsabilidades por composicin


Objetos innecesarios, que realmente slo sirven para pasar
informacin a otros (tpico al abusar de los patrones)
Objetos que comparten con cualquiera su informacin interna
...

Merece la pena conocer ms antipatrones de DOO y


tambin de POO, gestin de proyectos, etc.
http://en.wikipedia.org/wiki/Anti-pattern
Laboratorio de Programacin de Sistemas Patrones de Diseo Software

10

Gamma, E., Helm, R., Johnson, R., y Vlissides, J.:


Design Patterns: Elements of Reusable ObjectOriented Software. Addison-Wesley (1995)
Shalloway, A., Trott, J.R.: Design Patterns
Explained: A New Perspective on Object-Oriented
Design. Addison-Wesley (2001)
Grand, M.: Patterns in Java. John Wiley & Sons
(1998)
Freeman, E., Freeman, E., Bates, B., Sierra, K.: Head
First Design Patterns. OReally Media (2004)
(disponible en Safari UCM)
OODesign
http://www.oodesign.com/

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

11

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

12

UML significa Lenguaje Unificado de Modelado


Lenguaje grfico para visualizar,

especificar, construir y documentar


sistemas software
UML 2.0 es ampliamente utilizado y
estandarizado por el OMG
(Object Management Group)

En clase usaremos Diagramas de Clase UML


Representacin de la estructura esttica de un programa

orientado a objetos, mostrando sus clases -con atributos y


mtodos- y las relaciones que hay entre ellas

BlueJ, interesante IDE educativo para


aprender Java y UML al mismo tiempo
http://www.bluej.org/
Laboratorio de Programacin de Sistemas Patrones de Diseo Software

13

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

14

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

15

Nombre original: Prototype


Propsito: Permite representar un cierto tipo de objetos
mediante un ejemplar prototpico (ya creado), que se copia
cada vez que se ha de crear un objeto nuevo de este tipo
Ejemplo: Cmo construir las herramientas de creacin de un editor

grfico cuando todava no conocemos el tipo de elementos que tendrn?

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

16

Prototype declara una interfaz de copia


ConcrePrototype implementa una operacin para copiarse a s
mismo
Client crea objetos como copias de un ConcretePrototype

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

17

Desacopla al cliente de la creacin de objetos


Permite aadir nuevos tipos de elementos en tiempo
de ejecucin
Permite modificar el comportamiento dinmicamente
a travs de la composicin

El cliente delega en un prototipo cuyo tipo podemos cambiar

Facilita la construccin de objetos complejos a partir


de partes predefinidas (los prototipos)
Reduce la necesidad de definir subclases que
introducen otros patrones de creacin (jerarqua de
factoras paralela a la jerarqua de productos)
Ojo! La operacin de copia (clone) no siempre es
trivial de implementar

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

18

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

19

Nombre original: Command


Propsito: Encapsula un mensaje en forma de objeto, con lo que se
puede parametrizar a los clientes, gestionar colas de mensajes,
tener un registro de mensajes y hasta deshacer operaciones
Ejemplo: Cmo hacer que los widgets (botones, mens, etc.) de una GUI en un

armazn para crear GUIs invoquen operaciones especficas de aplicaciones que


an no se hemos escrito?

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

20

Command declara la interfaz para ejecutar una operacin


ConcreteCommand vincula un objeto Receiver y una
operacin, implementando el mtodo execute que la invoca
Client crea un ConcreteCommand y establece su receptor
Invoker solicita que se ejecute la orden. Receiver es el que se
encarga de llevar a cabo las operaciones (cualquier clase puede
jugar este papel)

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

21

Command desacopla el objeto que invoca la operacin del que sabe


cmo realizarla
Los Command son objetos normales y como tales se pueden
manipular y entender como cualquier otro objeto
Se pueden crear macro-rdenes componiendo varios comandos
Resulta sencillo aadir nuevos tipos de Command
Cunta informacin tiene un Command?
Simplemente vincula un receptor con las operaciones a las que ha de

responder
Es capaz de encontrar el receptor dinmicamente
Se hace cargo por s mismo de atender a las solicitudes

Operaciones de deshacer/rehacer

Siempre debe ser lgicamente posible deshacer la operacin


Se mantiene una lista de objetos Command
Puede ser necesario que el objeto Command guarde informacin

adicional: receptor concreto y su estado, argumentos de la invocacin

Laboratorio de Programacin de Sistemas Patrones de Diseo Software

22

Federico Peinado
www.federicopeinado.es

También podría gustarte