Sie sind auf Seite 1von 41

Patrones de Diseo OO

Lic. David Espinoza


Fuente: Jamir Antonio Avila Mojica
Pontificia U.JAVERIANA - Bogot
Introduccin
Disear software orientado a objetos es difcil,
y disear software orientado a objetos
reutilizable es todava ms difcil
Chapter 1: Introduction. Design Patterns, The
Gang of Four
...y un software capaz de evolucionar tiene
que ser reutilizable (al menos para las
versiones futuras)
Introduccin
Christopher Alexander, naci el cuatro de octubre de
1936 en Vienna.
Estudi arquitectura en la Universidad de Harvard y
escribi varios libros sobre patrones en arquitectura.
Alexander considera que los usuarios saben ms sobre
los edificios que necesitan que lo que podra llegar a
saber un arquitecto.
Adems produjo y valid, junto con otros, un lenguaje
de patrones diseado para empoderar a cualquiera en
el diseo y construccin a cualquier escala.
Hoy en da es profesor emrito de la Universidad de
California, Berkeley
Introduccion
Ward Cunningham y Kent Beck creen que las
ideas de Alexander son tambin vlidas en el
campo de la ingeniera de software: los usuarios
de computadores deben escribir sus propios
programas.
Este trabajo fue enviado a la conferencia anual
de la ACM de Object Oriented Programming,
Systems, Languajes & Applications
La idea de Alexander se articula en torno de un
concepto llamado lenguaje patrn.
Introduccin.
Un lenguaje patrn gua a un diseador al
proporcionar soluciones viables a los problemas
conocidos que surgen durante el diseo
Este conocimiento se codifica en patrones que se
describen usando la misma estructura:
descripcin del problema.
resumen de circunstancias que crean el Problema.
solucin que funciona en tales circunstancias
Los patrones se interconectan e influyen entre si.
Un patrn escrito incluye estas conexiones como
prlogo y eplogo
Introduccin
Ward y Kent identifican cinco patrones
relacionados con el diseo de interfaces de
usuario en Smalltalk:
Window Per Task.
Few Panes Per Window.
Standard Panes.
Short Menus.
Nouns and verbs.
Introduccin
Usando los patrones de Ward y Kent un grupo
de usuarios es capaz de disear sus propias
interfaces grficas de usuario.
Nuestro xito inicial usando un lenguaje
patrn para disear la interfaz grfica de
usuario nos ha dejado entusiasmados con las
posibilidades para que los usuarios de
computadores diseen y programen sus
propias aplicaciones, sealaban Ward y Kent
Introduccin
James Coplien haba catalogado patrones especficos
para el lenguaje C++ a los que denomin idiomas.
Los manuscritos de su libro (1989) fueron usados para
ensear objetos y C++ en AT&T, Addison-Wesley
publicara el libro en septiembre de 1991.
Peter Coad, quien tambin haba estado explorando los
patrones, anotaba:
OOA y OOD tienen como bloques de construccin las
clases y los objetos. Estas clases y objetos forman patrones
con relaciones especficas entre ellos. Grupos de clases en
un entorno orientado a objetos son tiles repetidamente.
Muchos patrones pueden ser encontrados por prueba y
error o por observacin.
Introduccin
A finales de los ochentas, Erich Gamma estaba
reflexionando sobre el diseo orientado a
objetos en ET++ como parte de su tesis
doctoral.
Se haba dado cuenta de que la estructuras de
diseo recurrentes o patrones eran
importantes, pero la pregunta era como
capturarlas y comunicarlas.
Introduccin
En 1991, Bruce Anderson organiza el primer
Hacia un manual de arquitectura en OOPSLA al
que asisten prcticamente todos aquellos que
daran forma a los patrones de software.
En 1992, Ralph Johnson tena un paper en
patrones aceptado en el segundo Hacia un
manual de arquitectura.
Erich Gamma, Richard Helm y John Vlissides
tenan el borrador de un catlogo que esperaban
tener listo para ECOOP 93
Introduccin
Frank Buschmann comienza a hablar sobre el
catlogo de patrones que estaba
desarrollando en Siemens. Kent Beck vea
como su creencia de que los patrones
deberan ser el principio gua del manual de
arquitectura se consolidaba.
En 1993, se forma el Hillside Group como un
grupo dedicado a mejorar la calidad del
desarrollo de software, con el patrocinio de
Kent Beck y Grady Booch
Introduccin
En 1994 se realiza la primera conferencia de
Pattern Languages of Programs (PloP).
En 1995 se publica el libro de patrones de
diseo de Gang of Four (Gof).
En 1996, se publica el libro Pattern Oriented
Software Architecture: a System of Patterns,
Frank Buschmann et al.
Definicin
Antecedentes:
Los expertos, de muchas disciplinas, suelen
reutilizar la esencia de una solucin en lugar de
inventar una nueva
Lugar en la ventana: A todos nos gusta una
habitacin con grandes ventanas, luz ,silla
confortable. Si no tuviera ventanas estaramos
ante dos fuerza estar cmodos y cerca a la luz.
Entonces en todos los lugares donde se pase gran
parte del da debera haber ventanas
Definicin - antecedentes
Cada patrn es una regla de tres partes, que
expresa una relacin entre:
un cierto contexto,
un problema,
y una solucin
Como un elemento de lenguaje, un patrn es una
instruccin, que muestra como una configuracin
espacial puede ser usada, una y otra vez, para
resolver el sistema de fuerzas dadas, cada vez
que el contexto las haga relevantes.
Definicin
El patrn es, en resumen, al mismo tiempo
algo, que pasa en el mundo, y la regla que
nos dice como crear ese algo y cuando
debemos crearlo. Es ambos un proceso y una
cosa; una descripcin de algo que est viva, y
una descripcin del proceso que generar ese
algo. The Timeless Way of Building,
Christopher Alexander
Definicin
Cada patrn describe un problema que
ocurre una y otra vez en nuestro entorno, y
luego describe el ncleo de la solucin a ese
problema, de tal forma que pueda usarse la
solucin muchas veces ms, sin tener que
repetir el proceso ms de una vez.
Christopher Alexander
Definicin
Un patrn de arquitectura de software
describe un problema particular recurrente
de diseo que surge en contextos especficos
de diseo, y presenta un esquema genrico
de solucin probado. El esquema de solucin
se especifica describiendo sus componentes
constituyentes, sus responsabilidades y
relaciones, y las formas en que colaboran.
POSA (Pattern Oriented
Software Architecture)
Definicion
Una idea que ha sido til en un contexto
prctico y probablemente lo ser en otros.
Martin Fowler, Anaylisis Patters: Reusable
Object Models, Addison Wesley
Definicin
Un patrn describe un problema recurrente
que ocurre en un contexto dado y, basado en un
conjunto de fuerzas gua, recomienda una
solucin. La solucin es usualmente un
mecanismo simple, una colaboracin entre dos
o ms clases, objetos, servicios, procesos, hilos,
componentes, o nodos que trabajan juntos para
resolver el problema identificado en el patrn.
Enterprise Solution Patters Using Microsoft
.Net, versin 2.0, Thowbridge David et all,
2003
Porque Usar Patrones
Ayudan en la construccin de software
basados en la experiencia colectiva de hbiles
ingenieros de software.
Capturan experiencias existentes y bien
probadas en el desarrollo de software y
promueven buenas prcticas de diseo.
Cada patrn trata con un problema especfico
recurrente en el diseo o la implementacin
de un sistema de software
Porque usar Patrones
Los patrones se pueden usar para construir
arquitecturas de software con propiedades
especficas.
Los patrones identifican y especifican
abstracciones que estn por encima de
simples clases e instancias, o de componentes.
Proporcionan un vocabulario comn y de
conocimiento en principios de diseo
Porque Usar Patrones
Son una forma de documentar la arquitectura
de software
Soportan la construccin de software con
propiedades definidas
Ayudan a construir complejos y heterogneas
arquitecturas de software. Sin embargo, no
especifican una solucin completamente
detallada
Ayudan a manejar la complejidad del software
Categoras de Patrones
Los patrones se pueden organizar
jerrquicamente (una de las ms usadas
tcnica de abstraccin) de muchas formas,
una de ellas es la propuesta por POSA:
Patrones de arquitectura
Patrones de diseo
Idiomas
Patrones de Arquitectura
Un patrn arquitectnico expresa un
esquema de organizacin estructural bsico
para sistemas de software. Proporciona un
conjunto de subsistemas predefinidos,
especifica sus responsabilidades, e incluye
reglas y guas para la organizacin de las
relaciones entre ellos.
Los patrones de arquitectura describen como
estructurar una aplicacin al ms alto nivel
Patrones de Diseo
Un patrn de diseo proporciona un esquema
para refinar los subsistemas o componentes de
un sistema de software, o las relaciones entre
ellos. Describe una estructura comnmente
recurrente de componentes que se comunican
para solucionar un problema de diseo general
en un un contexto particular. GoF.
Los patrones de diseos proporcionan el
siguiente nivel de refinamiento.
Idiomas
Los idiomas son patrones de bajo nivel que
dependen de las tecnologas de
implementacin especficas como el lenguaje
de programacin.
Son tambin los patrones de software ms
antiguos publicados aunque en sus primeras
etapas no tenan al forma de un patrn.
Ejemplo de Patrones
Patrones arquitecturales
Jerarqua de capas
Tuberas y filtros
Cliente/Servidor
Maestro-Esclavo
Control centralizado y distribuido
Patrones de diseo
Proxies
Factoras
Adaptadores
Composicin
Broker
Patrones elementales (idioms)
Modularidad
Interfaces mnimas
Encapsulacin
Objetos
Acciones y Eventos
Concurrencia
Patrones y Armazones
Los patrones de diseo tienen descripciones
ms abstractas que los armazones
Las descripciones de patrones suelen ser
independientes de los detalles de
implementacin o del lenguaje de programacin
(salvo ejemplos usados en su descripcin)
Los armazones estn implementados en un
lenguaje de programacin, y pueden ser
ejecutados y reutilizados directamente
Patrones y Armazones
Los patrones de diseo son elementos
arquitecturales ms pequeos que los
armazones
Un armazn incorpora varios patrones
Los patrones se pueden usar para documentar
armazones
Los patrones de diseo estn menos
especializados que los armazones
Los armazones siempre se aplican a un dominio de
aplicacin particular
Armazones (Frameworks)
Caractersticas
Un armazn ofrece un conjunto integrado de
funcionalidad especfica de un dominio
P.ej.: aplicaciones financieras, servicios de telecomunicacin,
sistemas de ventanas, bases de datos, aplicaciones
distribuidas, ncleos de SO
Los armazones invierten el control en ejecucin entre
la aplicacin y el software sobre el que est basada
El armazn determina qu mtodos se invocan en respuesta
a eventos (se rehsa el cdigo del cuerpo principal y se
escribe el cdigo al que llama)
Un armazn es una aplicacin medio-acabada
Las aplicaciones completas se desarrollan mediante
herencia, e instanciando componentes parametrizados del
armazn
Elementos de un Patrn
Al documentar un patrn se describe el contexto
en el que el patrn es utilizado, las fuerzas en el
contexto que el patrn busca resolver, y la
solucin sugerida.
Cada autor tiende a utilizar su propia forma para
documentar los patrones; sin embargo se
reconocen las siguientes:
Alexander,
GoF,
Portland, Coplien, POSA, entre otras.
Alexander
La forma Alexander se caracteriza por ser muy
narrativa, emplea cerca de media docena de
pginas para documentar cada patrn.
Nombre: el nombre asignado al patrn.
Problema: el problema que el patrn soluciona,
as se puede saber cuando aplicarlo.
Contexto: un patrn soluciona un problema en
un contexto dado.
Solucin: solucin aportada por el patrn.
Elementos del Patron G o F
La forma de documentacin empleada por los
patrones GoF usa los siguientes elementos:
Nombre del patrn y clasificacin: un nombre
descriptivo y nico que ayuda a identificar y
referenciar el patrn.
Intencin: una descripcin de la meta del patrn
y la razn para usarlo.
Tambin conocido como: otros nombres del
patrn.
Elementos del Patrn GoF
Motivacin (fuerzas): un escenario consistente
de un problema y un contexto en el cual el patrn
puede ser usado.
Aplicabilidad: situaciones en las que el patrn se
puede usar; el contexto para el patrn.
Estructura: una representacin grfica del
patrn. Normalmente mediante diagramas de
clase e interaccin.
Participantes: una lista de las clases y objetos
usados en el patrn y sus roles en el diseo.
Elementos del Patrn GoF
Colaboracin: una descripcin de cmo las clases
y objetos usados en el patrn interactan con
cada otra.
Consecuencias: una descripcin de los resultados,
efectos laterales y confrontaciones causadas por el
uso del patrn.
Implementacin: una descripcin de una
implementacin del patrn.
Cdigo de ejemplo: una ilustracin de cmo
puede ser usado el patrn en un lenguaje de
programacin.
Elementos del Patrn GoF
Usos conocidos: Ejemplos de usos reales del
patrn.
Patrones relacionados: otros patrones que
tienen alguna relacin con el patrn;
discutiendo las diferencias entre ellos.
Elementos de un Patrn Portland
Varias personas en la primera conferencia de
patrones usaron una forma muy similar. Se
caracteriza por ser completamente textual y muy
corta, menos de una pgina por patrn. En un par
de prrafos se describe el problema, seguidos por
la palabra entonces enfatizada
tipogrficamente, y un par de prrafos que
describen la solucin.
Se puede ver un ejemplo en
http://c2.com/ppr/checks.htm
Elementos de un Patrn Coplien
Est asociada con el trabajo de James Coplien, algunos
la denominan forma cannica. Los elementos son:
Problema
Contexto
Fuerzas
Solucin
Contexto resultante
Racionalidad
Ejemplo en
http://users.rcn.com/jcoplien/Patterns/PLoP95_teleco
m.html
Elementos del Patrn PoSa
Es similar en estructura y longitud a GoF
Resumen
Ejemplo
Contexto
Problema
Solucin
Estructura
Dinmica
Implementacin
Ejemplo resuelto
Variantes
Usos conocidos
Consecuencias
Ver tambin
Tipos de Patrones
Tambin hay varias aproximaciones a la
clasificacin de los patrones:
GoF
Propsito
Creational
Structural
Behavioural
Alcance
Clase
Objeto
Tipo de Patrones GoF

Das könnte Ihnen auch gefallen