Professional Documents
Culture Documents
Ingeniera de
Software
PATRONES Y
ANTIPATRONES
2012
Contenido
Introduccin. ................................................................................................................................3
Objetivos. .....................................................................................................................................4
General:....................................................................................................................................4
Especficos: ...............................................................................................................................4
Patrones y Anti patrones. .............................................................................................................5
Patrones de Software. ..............................................................................................................5
Caractersticas de un buen patrn. ..........................................................................................5
Nivel de Patrones. ....................................................................................................................7
Patrones de Diseo. .............................................................................................................7
Describir los patrones de diseo. .........................................................................................8
Clasificacin de los patrones de diseo. .............................................................................10
Catalogo de Patrones. ........................................................................................................12
Cmo los Patrones de Diseo resuelven problemas de diseo. ........................................14
Cmo seleccionar un patrn de diseo ..............................................................................19
Cmo utilizar un patrn de diseo .....................................................................................21
Antipatrones de Software ......................................................................................................22
Transformacin formal de Refactorizacin ............................................................................23
Tipos de antipatrones.............................................................................................................23
Ejemplo del antipatron BLOD .................................................................................................26
Forma general. ...................................................................................................................26
Sntomas y consecuencias ..................................................................................................27
Causas tpicas .....................................................................................................................27
Solucin refactorizada. .......................................................................................................28
Conclusin. .................................................................................................................................31
Introduccin.
Como elemento de un lenguaje, un patrn es una instruccin que muestra como puede ser
usada esta configuracin espacial una y otra vez para resolver el sistema de fuerzas, siempre
que el contexto lo haga relevante.
Para comenzar, intentaremos establecer una definicin bsica del concepto de patrn. De la
misma forma que sucede con otros conceptos de la informtica (y como es el caso de la
arquitectura), no es fcil establecer una definicin taxativa y definitiva del concepto de patrn.
Pero intentaremos reunir a las ms influyentes y significativas que nos permitan comprender la
idea y establecer las bases para nuestro estudio, mencionando la taxonoma de los patrones,
los cuales describen una estructura recurrente de componentes que se comunican para
resolver un problema general de diseo en un contexto particular.
Adems hablaremos de los Anti patrones que son soluciones negativas que presentan ms
problemas que los que solucionan.
As pues enfocndonos en los Patrones Anti-patrones de Diseo, y as poder mostrar las
ventajas y desventajas inherente a su aplicacin en el desarrollo, refinando subsistemas o
componentes de software orientado a objetos.
Objetivos.
General:
Conocer la definicin de patrn y anti-patrn en la Ingeniera de Software y como la
utilizacin de estos influyen positiva o negativamente en el desarrollo de los sistemas
de informacin o software en general, y as evaluar el contexto en el cual nos ayudan a
facilitar una solucin de sistemas.
Especficos:
Conocer los conceptos de patrones y anti-patrones.
Nivel de Patrones.
Segn el libro Pattern Oriented Software Architecture, Volume 1 se definen los
siguientes niveles.
"Cada patrn describe un problema que se produce una y otra vez en nuestro medio, y
luego describe el ncleo de la solucin a ese problema, de tal manera que se puede
utilizar esta solucin un milln de veces, sin tener que hacerlo de la misma manera dos
veces".
En general, el patrn tiene cuatro elementos esenciales:
1. El nombre del modelo es un manipulador que podemos utilizar para describir
un problema de diseo, su soluciones y consecuencias en una o dos palabras. Nombrar
un patrn inmediatamente aumenta nuestro vocabulario de diseo. Esto nos permite
disear a un nivel ms alto de abstraccin. Tener un vocabulario de patrones nos
permite hablar de ellos con nuestros colegas, en nuestra documentacin, e incluso a
nosotros mismos. Se hace ms fcil pensar en diseos y comunicar a ellos ya sus
compensaciones a los dems. Encontrar un buen nombre ha sido una de las partes ms
difciles de desarrollar nuestro catlogo.
2. El problema se describe cundo se aplica el patrn. En l se explica el problema
y su contexto. Podra describir los problemas especficos de diseo tales como la forma
para representar algoritmos como objetos. Podra describir la clase de objeto o
estructuras que son sintomticos de un diseo inflexible. A veces, el problema incluir
una lista de condiciones que deben cumplirse antes de que tenga sentido aplicar el
patrn.
3. En La solucin se describen los elementos que componen el diseo, sus
relaciones, responsabilidades y colaboraciones. La solucin no describe un diseo
particular de aplicacin, porque un patrn es como una plantilla que puede ser
aplicado en muchas situaciones diferentes. En su lugar, el patrn proporciona una
descripcin abstracta de un problema de diseo y cmo una disposicin general de los
elementos (clases y objetos en nuestro caso).
4. Las consecuencias son los resultados y compensaciones de la aplicacin del
modelo.Aunque las consecuencias son a menudo sorda cuando describimos las
decisiones de diseo,que son fundamentales para la evaluacin de alternativas de
diseo y para la comprensin de los costes y beneficios de aplicar el patrn. Dado que
la reutilizacin es a menudo un factor endiseo orientado a objetos, las consecuencias
de un patrn incluyen su impactoen la flexibilidad de un sistema, extensibilidad, o la
portabilidad. Aadir estasconsecuencias explcitamente ayuda a entenderlos y
evaluarlos.
Describir los patrones de diseo.
Cmo describir los patrones de diseo? Si bien son importantes y tiles, no son
suficientes. Ellos simplemente capturan el producto final del proceso de diseo como
las relaciones entre clases y objetos. Para reutilizar el diseo, tambin se debe
registrar las decisiones, alternativas y compensaciones que condujo a ella. Ejemplos
concretos son importantes, porque ayudan a ver el diseo en accin.
Se describen los patrones de diseo utilizando un formato consistente. Cada patrn se
divide en secciones de acuerdo con la siguiente plantilla. La plantilla le da una
estructura uniforme de la informacin, por lo que los patrones de diseo son ms
fciles de aprender, comparar, y usar.
Motivacin.
Un escenario que ilustra un problema de diseo y cmo la clase y el objeto en el
patrn de resuelven el problema. El escenario ayudar a comprender la descripcin
ms abstracta del patrn que sigue.
Aplicabilidad.
Cules son las situaciones en las que se puede aplicar el patrn de diseo?
Cules son ejemplos pobres de diseos que el patrn puede tratar? Cmo
puedereconocer estas situaciones?
Estructura.
Una representacin grfica de las clases en el patrn de uso de una notacin sobre la
base de la tcnica de modelado de objetos. Tambin se puede utilizar diagramas de
interaccin para ilustrar secuencias de peticiones y la colaboracin entre los objetos.
Los participantes.
Las clases y / o objetos que participan en el patrn de diseo y su responsabilidades.
Colaboraciones.
Cmo los participantes colaboran para llevar a cabo sus responsabilidades.
Consecuencias.
Cmo el patrn apoya sus objetivos? Cules son las ventajas y desventajas y
resultados de usar el patrn? Qu aspecto de la estructura del sistema lo hacen variar
de forma independiente?
Implementacin.
Qu tcnicas se deben tener en cuenta al implementar el patrn? Existen problemas
especficos de lenguaje?
Ejemplo de cdigo.
Fragmentos de cdigo que muestran cmo se puede implementar el modelo en el
lenguaje de programacin que se utiliza.
Usos conocidos.
Ejemplos del patrn que se encuentra en los sistemas reales. Se incluye al menos dos
ejemplos de diferentes dominios.
Patrones Relacionados.
Qu patrones de diseo estn estrechamente relacionados con ste? Cules son las
diferencias importantes? Con qu otros patrones deben ser utilizados?
Clasificacin de los patrones de diseo.
mbito abstracto.
Proporcionar una interfaz para crear familias de asociadas o dependientes objetos sin
especificar sus clases concretas.
Adaptador.
Convertir la interfaz de una clase en otra interfaz que el cliente espera.
El adaptador permite a las clasestrabajar juntas que podan debido a interfaces incompatibles.
Puente.
Desacoplar una abstraccin de su implementacin, de manera que los dos puedan variar de
forma independiente.
Constructor.
Separar la construccin de un objeto complejo de su representacin de modo que el mismo
proceso de construccin puede crear diferentes representaciones.
Cadena de responsabilidad.
Evitar el acoplamiento del remitente de una solicitud a su receptor, dando a ms de un objeto
la oportunidad de manejar la peticin. Cadena de objetos que reciben y pasan la solicitud a lo
largo de la cadena hasta que un objeto la maneje.
Comando.
Encapsular una peticin como un objeto, lo que le permite parametrizar clientes con
diferentes peticiones, solicitudes o registros de la cola, y el apoyo deshacer operaciones.
Compuesto.
Componer objetos en estructuras de rbol para representar parte-todo jerarquas. Un patrn
compuesto permite a los clientes tratar objetos individuales y composiciones de objetos de
manera uniforme.
Decorador.
10
11
Catalogo de Patrones.
Los patrones de diseo varan en su granularidad y nivel de abstraccin. Debido a que hay
muchos patrones de diseo, necesitamos una forma de organizarlos. En esta seccin se
clasifica patrones de diseo de manera que podemos hacer referencia a familias de patrones
relacionados. La clasificacin le ayuda a aprender los patrones del catlogo ms rpido, y
puede que dirigir los esfuerzos para encontrar nuevos patrones tambin.
Clasificamos a los patrones de diseo de dos criterios. El primer criterio, llamado efecto, que
refleja lo que un patrn hace. Los patrones pueden tener ya sea creacional,finalidad
estructural o de comportamiento. Patrones creacionales se refieren al proceso de creacin de
objetos. Patrones estructurales tratan con la composicin de las clases o objetos. Patrones de
comportamiento caracterizar las formas en que las clases u objetos interactuar y distribuir la
responsabilidad.
12
Clase
mbito de
Aplicacin
Objeto
Propsito.
Creacional
Estructural
Mtodo de
Adaptador
fbrica
mbito Abstracto
Adaptador
Constructor
Puente
Prototipo
Composite
Singleton
Decorador
Fachada
Peso Mosca
Proxy
Comportamiento
Interpretador
Mtodo plantilla
Cadena de
responsabilidad
Comando
Iterator
Mediador
Memento
Observador
Estado
Estrategia
Visitante
13
Aqu estn varios de estos problemas y cmo los patrones de diseo resuelven
problemas.
Bsqueda de objetos apropiados
Programas orientados a objetos se componen de objetos. Un paquete de objetos,
datosy procedimientos ambos operan sobre esos datos. Los procedimientos se
denominan tpicamentemtodos u operaciones. Un objeto realiza una operacin
cuando se recibe una solicitud(O mensaje) desde un cliente.
14
Las peticiones son la nica forma de obtener un objeto para ejecutar una operacin.
Operaciones son la nica manera de cambiar los datos internos de un objeto. Debido a
estas restricciones,estado interno del objeto se dice que est encapsulado, no se
puede accederdirectamente, y su representacin es invisible desde el exterior del
objeto.
La parte difcil de diseo orientado a objetos es descomponer un sistema en objetos.
La tarea es difcil porque muchos factores entran en juego: la
encapsulacin,granularidad, la dependencia, la flexibilidad, el rendimiento, la
evolucin, la reutilizacin, ysigue. Todos ellos influyen en la descomposicin, a
menudo de maneras opuestas.Metodologas de diseo orientado a objetos estn a
favor de muchos enfoques diferentes. Se puedeescribir una declaracin del problema,
sealar a los sustantivos y verbos, y crear correspondienteclases y operaciones. O se
puede centrar en las colaboraciones y responsabilidadesen su sistema. O se puede
modelar el mundo real y traducir los objetos encontradosdurante el anlisis en el
diseo. Siempre habr desacuerdo sobre cul es el mejor enfoque.
Muchos objetos en un diseo provienen del modelo de anlisis. Pero diseos
orientados a objetos a menudo terminan con clases que no tienen equivalentes en el
mundo real. Algunos deestas son las clases de bajo nivel como arrays. Otros son
mucho ms alto nivel. Por ejemplo,el compuesto presenta un patrn de abstraccin
para el tratamiento de los objetosuniformemente que no tiene una contraparte fsica.
Modelado estricto del mundo real conduce a un sistema que refleja la realidad de hoy,
pero no necesariamentede maana. Las abstracciones que surgen durante el diseo
son la clave para hacer un diseoflexible.
Los patrones de diseo ayudan a identificar menos abstracciones obvias y los objetos
quepuede capturar. Por ejemplo, los objetos que representan un proceso o algoritmo
noocurren en la naturaleza, sin embargo, son una parte crucial de diseos flexibles. La
Estrategia patrn describe cmo implementar familias intercambiables de algoritmos.
El Estado patrn representa cada estado de una entidad como un objeto. Estos objetos
son raramente encontrados durante el anlisis o incluso las primeras etapas de diseo.
Determinando objeto Granularidad
Los objetos pueden variar enormemente en tamao y nmero. Pueden representar
todohacia abajo en el hardware o todo el camino hasta aplicaciones completas. Cmo
decidimoslo que debera ser un objeto?
Los patrones de diseo frente a este problema tambin. La Fachada (patrn
describecmo representar subsistemas completos como objetos, y el patrn de peso
15
16
17
Una clase abstracta es aquella cuyo principal propsito es definir una interfaz comn
parasus subclases. Una clase abstracta difiere parte o la totalidad de su
implementacina las operaciones definidas en las subclases, por lo que una clase
abstracta no puede ser instanciada.
Las operaciones que declara una clase abstracta pero no implementa son
llamadasoperaciones abstractas. Las clases que no son abstractas se llaman clases
concretas.
Las subclases pueden refinar y redefinir los comportamientos de sus clases para
padres. Msespecficamente, una clase puede anular una operacin definida por su
clase principal.
Anulacin de las subclases da la oportunidad de manejar las peticiones en lugar de su
padreclases. La herencia de clases permite definir clases simplemente mediante la
ampliacin de otras clases, por lo que es fcil de definir familias de objetos que tienen
una funcionalidad relacionada.
Los nombres de las clases abstractas aparecen en tipo inclinado para distinguirlos de
lasclases concretas. Tipo inclinado tambin se utiliza para denotar operaciones
abstractas. El diagrama puede incluir pseudocdigo para la ejecucin de una
operacin, si es as, el cdigoaparecer en una caja de perro de orejas conectadas por
una lnea de puntos para que el funcionamientoimplementos.
18
Una clase mixin es una clase que est destinado a proporcionar una interfaz opcional
ofuncionalidad a otras clases. Es similar a una clase abstracta en que esno pretende ser
una instancia. Clases Mixin requieren herencia mltiple:
Con ms de 20 patrones de diseo para elegir, puede ser difcilencontrar el que trate
un problema de diseo particular, especialmente si elcatlogo es nuevo y desconocido.
Aqu hay varios enfoques diferentes paraencontrar el patrn de diseo que se adapte a
su problema:
1. Considere cmo los patrones de diseo resuelven problemas de diseo. Cmo los
patrones de diseo ayudan a encontrar objetos adecuados, determinar
objetogranularidad, especificar interfaces de objetos, y varias otras formas en las que
los patrones de diseo resuelven problemas de diseo. Refirindose a estas
discusiones puedeayudar a orientar su bsqueda por el patrn correcto.
2. Escanear secciones intencin. Se enumeran las secciones de Intencintodos los
patrones en el catlogo. Leer a travs de la intencin de cada patrn para
encontraruno o ms que sonar relevante para su problema.
3. Estudiar cmo los patrones se interrelacionan. El estudio de estas relaciones puede
ayudar adirigir al patrn correcto o grupo de patrones.
4. Estudiar los patrones de igual propsito. El catlogo tiene tres clasificaciones,uno
para los patrones creacionales, otro para los patrones estructurales, y un tercerolos
patrones de comportamiento.
5. Examinar la causa de rediseo. Mira las causas de rediseo para ver si el problema
est relacionado con uno o ms de ellos. Luego, buscar enlos patrones que ayudan a
evitar las causas de rediseo.
6. Considerar lo que debe ser variable en el diseo. Este enfoque es elopuesto de
centrarse en las causas de rediseo. En lugar de considerar lo quepodra forzar un
cambio en el diseo, considerar lo que se quiere ser capaz de cambiarsin redisear.
19
PROPOSITO
Creacional
PATRON DE DISEO
mbito Abstracto
Constructor
Mtodo de Fabrica
Estructural
Prototipo
Singleton
Adaptador
Puente
Compuesto
Decorador
Fachada
Flyweight
Proxy
Observador
Estado
Estrategia
Mtodo de Plantilla
Visitante
20
Una vez elegido un patrn de diseo, cmo usarlo? Aqu hay un paso a pasopara la
aplicacin de un modelo de diseo de forma eficaz:
1. Leer el patrn de una vez a travs de una visin general. Prestar especial atencin a
las secciones de aplicabilidad y Consecuencias para garantizar si el modelo es
adecuado para el problema.
2. Volver atrs y estudiar las secciones de estructura, los Participantes y
Colaboraciones.Asegrese de entender las clases y los objetos del modelo y cmo se
relacionan entre s.
3. Mira la seccin de cdigo para ver un ejemplo concreto de la pauta en el cdigo.
Estudiar el cdigo ayuda a aprender cmo implementar el patrn.
4. Para seleccionar nombres de los participantes de patrones que son significativos en
el contexto de la aplicacin. Los nombres de los participantes en los patrones de
diseo son generalmente demasiado abstracto para aparecer directamente en una
aplicacin. Sin embargo, es til incorporar el nombre del participante en el nombre
que aparece en la solicitud. Esto ayuda a hacer el modelo ms explcito en la
aplicacin.
Por ejemplo, si se utiliza el patrn de estrategia para un algoritmo de composicin de
texto, entonces podra tenerse clases SimpleLayoutStrategy o TeXLayoutStrategy.
5. Definir las clases. Declarar las interfaces, establecer relaciones de herencia, y definir
las variables de instancia que representan los datos y referencias a objetos. Identificar
las clases existentes en la aplicacin que el patrn se afecta, y modificar en
consecuencia.
6. Definir aplicacin de los nombres especficos para las operaciones en el patrn. Aqu
de nuevo, los nombres generalmente dependen de la aplicacin. Utilizar las
responsabilidades y colaboraciones asociadas a cada operacin como gua. Adems,
ser coherente en las convenciones de nomenclatura. Por ejemplo, puede utilizar la
funcin "Create-" como prefijo para indicar consistentemente un mtodo de fbrica.
7. Implementar las operaciones para llevar a cabo las responsabilidades y
colaboraciones en el patrn. Estas son slo directrices para ayudar a empezar. Con el
tiempo desarrollar una manera propia de trabajar con patrones de diseo.
Ninguna discusin sobre cmo utilizar patrones de diseo no estara completa sin unas
palabras sobre cmo no hay que usarlos. Los patrones de diseo no deben aplicarse
indiscriminadamente.
21
Antipatrones de Software
Los antipatrones podran definirse como una herramienta para solucionar los
problemas por el mal uso de los patrones, es decir abusar de un patrn lo hace un
antipatron.
Los antipatrones sirven para dos propsitos importantes:
22
Los patrones de diseo comienzan con una solucin recurrente: los patrones de
diseo son escritos de abajo hacia arriba, mas adelante el autor del patrn de
diseo aade contexto y fuerza. El contexto y la fuerza son cuidadosamente
elaboradas para conducir a una nica solucin.
Los antipatrones comienza con un problema recurrente: los antipatrones se
escriben de arriba hacia abajo. Las descripciones de los antipatrones incluye
aprender de los elementos, como sus sntomas, consecuencias y causas.
Usar grupos de estudio: es til discutir sobre una descripcin escrita del
antipatron y su solucin a refactorizar en un entorno de grupo.
Convertirse en un autor de antipatron: un nuevo autor de antipatrones puede
enfocarse en problemas recurrentes que son observados desde distintos
contextos(al menos 3).
Tipos de antipatrones
BLOD
Estilo de procedimiento de diseo que dirige a un objeto con responsabilidades
compartidas, mientras la mayora de otros objetos tienen datos y ejecutan
procesos simples. La solucin incluye refactorizacin de diseo para distribuir
las responsabilidades ms uniformemente y aislar el efecto de los cambios.
23
POLTERGEISTS(DUENDES)
Son clases con muchos roles limitados y ciclos de vida efectivos.
Frecuentemente comienzan procesos de otros objetos. La solucin
refactorizada incluye una reasignacin de de responsabilidades a los objetos de
larga vida para que eliminen los poltergeists.
24
BOAT ANCHOR
Es una pieza del software o del hardware que no sirve para un propsito til en
un proyecto actual. Frecuentemente este antipatron hace ms costosa su
adquisicin, hace irnica la compra de la pieza que se necesita.
DEAD END
Se logra modificando un componente reutilizable, si el componente modificado
ya no es mantenido y el proveedor no da soporte de este. Cuando estas
modificaciones son hechas, se transfieren la carga de soporte a los
desarrolladores y a los de mantenimiento de sistemas de aplicacin. Las
mejoras que se hacen en los componentes reutilizables no se integran
fcilmente, y los problemas de soporte pueden ser adjudicados a la
modificacin.
SPAGHETTI CODE
La estructura de software hace ms difcil extender y optimizar el cdigo. Con
frecuencia el refactorizado del cdigo puede mejorar la estructura del
software, soporte del mantenimiento de este y permitir el desarrollo iterativo.
INPUT KLUDGE
Software que con pruebas de comportamiento no sencillas, puede ser un
ejemplo de este antipatron, las cuales ocurren cuando algunos algoritmos son
empleados para la manipulacin de programas de entrada.
CUTANDPASTE PROGRAMMING
Reutilizar cdigo para copiar recursos de instrucciones que conducen a
problemas de mantenimiento significativos. Una forma alternativa de
reutilizacin, incluida la reutilizacin de la caja negra reduciendo los problemas
de mantenimiento para tener cdigo fuente comn, pruebas y documentacin.
25
MUSHROOM MANAGEMENT
En algunas arquitecturas y crculos de gestin, hay una poltica explicita para
mantener a los desarrolladores de sistemas aislados de los usuarios finales del
sistema. Los requerimientos son pasados por segundas manos a travs de
intermediarios, como pueden ser arquitectos, gerentes o analistas de
requerimientos.
Este antipatron consiste en disear donde una clase monopoliza los procesos, y otras
clases que primeramente encapsule los datos, utiliza notacin de objetos y la
implementacin de lenguajes orientados a objetos. Se caracteriza por un diagrama de
clases compuesto de una sola clase compleja controladora rodeada de clases de datos
simples, como se muestra en la figura siguiente:
26
Causas tpicas
Falta de una arquitectura orientada a objetos. Puede ser que los diseadores
no posean una buena compresin de los principios orientados a objetos.
Demasiada intervencin limitada. Al desarrollar a travs de iteraciones, los
desarrolladores tienden a aadir pequeas funcionalidades a clases ya
existentes, en vez de vez de crear nuevas clases para no cargar mucho a una
27
sola clase, por lo que sera bueno revisar la jerarqua para la asignacin de
responsabilidades entre las clases.
Solucin refactorizada.
Pasos a seguir:
1. Identificar o categorizar los atributos y operaciones de acuerdo a los contratos.
Los contratos deben ser cohesivos en que todos se relacionan con un objetivo
comn, comportamiento o funcin dentro del sistema global.
Librera Blob.
28
29
30
Conclusin.
Dado todo lo anterior podemos concluir que los patrones son un recurso muy til para
guiarnos en la creacin de proyectos de software, pues nos permiten llevar a cabo las
mejores prcticas con mtodos ya probados por otros programadores.
Aun asel abuso en el uso de los patrones o una mala utilizacin de estos puede derivar
en un anti-patrn, lo cual nos complica el trabajo y aumenta la cantidad de recursos a
utilizar para corregir los errores.
31