Académique Documents
Professionnel Documents
Culture Documents
Introduccin
aDesignPatterns
Por
FernandoDodino
NicolsPasserini
Versin2.1
Mayo2007
IntroduccinaDesignPatterns
Indice
QunoesunDesignPattern?
Frameworkvs.Pattern
QuhaydetrsdelosDesignPatterns?
PorqudamosDesignPatterns?
CmoaplicarlosDesignPatterns?
Cmonousarlos(ConsejodeGamma)
CundoaplicarDesignPatterns?
IntroduccinaDesignPatterns
QuesunDesignPattern?
UnDesignPattern:
es una regla que expresa la relacin entre un contexto, un problema y una
solucin(ChristopherAlexander,creadordePatternsparalaIngenieraCivil)
Partiendodeestasdefiniciones,definimosqudebecontenerunpattern:
Unnombrequedescribeelproblema.Estonospermite:
Se puede estudiar el gato El explicado, de Les Luthiers para recordar la importancia de los
nombres:http://www.atame.org/l/les_luthiers/el_explicado.shtml
3
IntroduccinaDesignPatterns
QunoesunDesignPattern?
UnDesignPattern:
Frameworkvs.Pattern
Mientras que los frameworks2 trabajan en un dominio concreto (testing, persistencia,
exportacin a pdf, etc.) los patterns son soluciones generales independientes del
dominioquenecesitanaplicarseenuncontextoparapoderserimplementados.
Paraunaexplicacindelconceptoframeworkvase:
http://uqbarwiki.org/index.php?title=Libreria_y_Framework
IntroduccinaDesignPatterns
QuhaydetrsdelosDesignPatterns?
Desde tiempos inmemoriales la industria del software ha tratado de lidiar con la
complejidad intrnseca del problema de construir sistemas intentando llegar a una
perspectivaingenierildelproblema.
En determinado punto de la historia la mayora de los componentes de la industria
estaban de acuerdo con esa perspectiva, vinculada a un desarrollo en cascada,
haciendo nfasis en que los procesos estn por encima delas personasyviendoal
desarrollodesoftwarecomounacadenademontaje.
Tarde o temprano, las personas vinculadas al desarrollo fueron descubriendo (o
descubrirn algn da) que ese esquema no daba los resultados esperados. Que la
visin de la cadena de montaje no aplica a la produccin de software y
principalmente que los ciclos de vida en cascada no aplican anuestraindustria. La
metforadelaingenieraciviltampocofuesuficiente.
Ante ese panorama, se abrieron dos caminos, el primero sugiere hacer algunas
correcciones al modelo de ingeniera original (diramos que correcciones menos
radicales de lo que a veces se pretende hacernoscreer,peroesaesotradiscusin)
ysepropusieronotrosmodelosmsomenosingenieriles.
El segundo camino, diametralmente opuesto, sugiere que el software slo puede
construirse de manera artesanal y propone no confiar en los procesos, dando una
importanciamuchomayoralaspersonaseneldesarrollo.
Existiendo argumentos para ambas lneas de pensamiento, entendemos que esa
discusin slo esmantenibleafuturo.Esdecir,quelaesperanzadequelaingeniera
nosbrindeunmtodo(una'receta')quenosdigadeunavezyparasiempre cmose
hace para construir software no tiene asidero para el estado actual del arte de
construirsistemasdesoftware.
Desde nuestro punto devista, la gran mayora de los proyectos exitosos hoyen da
depende para elhorrordelosingenierosensoftware enunaltsimoporcentajedela
capacidad de las personas y nodelametodologaqueseutiliceytampocosepuede
decir que esas personas tampoco siganunmtododefinidosinoquesusdecisiones
sebasanprincipalmenteenlaexperienciayenlaintuicin.
Por lo tanto, en la situacin actual el trabajo del ingeniero consiste en formalizar la
forma en que se tomanesas decisiones e ir generando herramientasapartirdeese
proceso de formalizacin. En todos los aspectos de la ingeniera se puede ver ese
mecanismo, en lugar de tener un 'proceso' o 'metodologa' lo que tenemos son
'patterns'y'bestpractices'.
Pero, qu es una best practice? Una best practice es un esfuerzo por formalizar
una actividad que anteriormente se dio en forma natural, describir su utilidad, sus
caractersticas y debilidades, con el objetivo de poder reutilizarla donde sea
conveniente. Cuandodescubrimos algo que nos da resultado, tratamos de repetirlo.
Cuando descubrimos que se puede adems dar resultado en mltiples ocasiones,
IntroduccinaDesignPatterns
encontramoslaoportunidaddeponerleunnombreyformalizarlaidea.
Un design patternesentonceslaintencin porformalizarunaprcticadediseo,una
herramienta para disear. Notenemos hoy unmecanismoquenospermitapasarde
un conjunto de requerimientos a un diagrama de clases o de secuencia ninadaque
se le parezca. Cualquiera que haya tratado de utilizar los mecanismos
pseudoautomticos propuestos por las grandes consultoras del tema, habr
descubiertoquenotienennadadeautomtico.
Tal vez en algn momento la industria madure lo suficiente para encontrar un
proceso totalmente ingenieril que nos permita realizar esa transformacin en 7
simples pasos. Hasta ahoraeso no ha ocurrido y tal como lo predijeraFredBrooks3
en 1986, seguimos sin encontrar 'silver bullets': el diseo es un proceso arduo,
manual, artesanal e iterativo. Ante la ausencia de ese proceso mgico, lo que nos
queda esayudar a nuestras pruebas y errores (iterativo tienemuchode "a prueba y
error")conalgunas'ideaspiolasquevemosquepuedencalzarenmuchoslugares'.
A esas ideas piolas le ponemos nombres para extender nuestro lenguaje. A veces
nos sirven 'out of the box' del libro a nuestro diagrama de clases, en otras
oportunidadesslosirvencomodisparadorasdeotrasideasnuevas.
IntroduccinaDesignPatterns
PorqudamosDesignPatterns?
IntroduccinaDesignPatterns
CmoaplicarlosDesignPatterns?
En http://hillside.net/patterns/patternscatalog tenemos un catlogo actualizado de
patterns, adems de los 23 originales del libro del Gang of Four. Evitando caer en
recetasmetodolgicas4 ,haydosmanerasdeabordarlospatronesdediseo:
Teniendounproblemaconcretoqueresolver(lamejormotivacin)
Como lectura de inters para situaciones futuras (me sirve para guardar enla
cajadeherramientasdeldiseador).
Enelcasodedisearalgunaaplicacin,nospuedepasarque:
necesitemosresolveralgncasonotrivialynosepamoscmo
Cada Pattern tiene tres secciones que describen el problema que resuelve: Intent,
Motivation y Applicability. Leer estas secciones nos ayudar a comprender si la
naturalezadelproblemaencajaconlasolucinpropuestaporel/lospattern/s.
Lospatternsseagrupanentresgrandescategoras:
1. Creacionales:abstraenelprocesodeinstanciacin,
2. Estructurales: se ocupan de generar estructuras entre clases y objetos, se
estudianconlosdiagramasdeclases/objetos+cdigoy
3. de comportamiento: se encargan de la asignacin de responsabilidades entre
objetos y cmo se comunican entre s, se estudian con diagramas de
secuencia/colaboracin+cdigo.
Adems, muchos patterns estn relacionados entre s, lo que afortunadamente est
documentadoynosayudaenlaeleccin.
4
El lector interesado en propuestas metodolgicas puede abordar Instrucciones para dar cuerda
a unreloj eInstruccionesparasubirunaescalera del libroHistoria de Cronopiosy deFamas, de
JulioCortzar
8
IntroduccinaDesignPatterns
Ejemplo:Enunafunerariavieneunclienteysolicitaunaparcela
Distintopuedesersiquierotrabajarelestadodeunaparcela:
siemprequeeldominiolojustifique.
IntroduccinaDesignPatterns
Cmonousarlos(ConsejodeGamma)
Cada vez que decidimos flexibilizaruna parte de nuestro sistema,estamosagregando
complejidad al diseo y esto redunda en unmayorcostodeimplementacin.Aparecen
fuerzascontrapuestas:
CundoaplicarDesignPatterns?
Enquciclodevidadeundesarrollodeberaaplicarlos?
En esa sutil diferencia entre el qu y el cmo, el Anlisis queda fuera de juego
(todava estoy conociendo el dominio y definiendo la funcionalidad del sistema
conmicliente).
A favor de la etapa de Diseo es que son Design Patterns. En la fase de
Diseo todava me falta experiencia en el dominio, pero puedo buscar lo que
puedecambiarenelsistemaconayudadealgnusuarioexperto.
En la programacin? Mmm, si al leer el cdigo que vamos escribiendo
notamos queaparece un pattern no diseadoentoncestenemosqueactualizar
eldiseo.
VeamosqusucedeenlaetapadeMantenimiento5
IntroduccinaDesignPatterns
Como concepto novedoso, Gamma plantea que para que un sistema pueda
evolucionar,necesitadosfases:
11