Professional Documents
Culture Documents
FACULTAD DE INGENIERA
TESIS DE LICENCIATURA
PRESENTA:
Emmanuel Acosta De Len
DIRECTOR DE TESIS:
M.I.Jess Roberto Lpez Santilln
Chihuahua Chih.
2012
Agosto del
NDICE
AGREDICIMIENTOS.
RESUMEN
OBJETIVOS
Objetivos Generales.
Objetivos Especficos.
JUSTIFICACION.
En la actualidad se tiene una pobre motivacin por el uso de los patrones de diseo en
la fase de diseo del ciclo de desarrollo de software, si se tuviera una filosofa por
querer solventar los problemas con soluciones existentes tal vez los patrones de diseo
serian una de las prioridades en el software escrito en lenguajes orientados a objetos.
La motivacin por su uso es uno de los objetivos en este documento, pero tambin lo
es la creacin de una tcnica para comprender como es que se obtuvo el diseo de
algn software basado en los patrones de diseo.
Si se toma en cuenta que en la actualidad, aunque si existen herramientas con un
propsito as, no son de divulgacin ni de orden publico pues trabajos como el
desarrollado por Birkner Marcel (2007) que dicta que de manera esttica y dinmica se
puede hacer una deteccin de patrones de diseo nicamente en Java, aqu presenta
su tcnica de manera amena pero sin entrar en detalles pero no distribuye en forma de
herramienta sus resultados para su aplicacin, adems de tener como objeto querer
formar una competencia con quien realice este tipo de herramientas.
El principal objetivo ser realizar algo que en un futuro prximo o lejano a cualquier
persona que tenga relacin con el desarrollo y mantenimiento de software y la mejor
forma de hacerlo es entregando un documento que contenga las tcnicas y bases para
el desarrollo de una herramienta de ingeniera de software asistida por computadora,
cosa que en este pas es bastante necesaria puesto que se tiene una pobre inversin
en materia de tecnologas de la informacin.
METODOLOGA
INTRODUCCIN
Existen herramientas de ingeniera en reversa para sistemas orientados a objetos,
estas herramientas CASE en sus versiones comerciales como ArgoUML, StarUML o
Visual Paradigm con funciones que van desde la representacin grafica de una
jerarqua de clases hasta la decompilacin de el cdigo y desde luego diseo. Este tipo
de herramientas son muy tiles cuando personas ajenas a la construccin y/o
mantenimiento de dicho sistema de software son delegadas a realizar tales tareas, pero
cuando se trata del diseo de un sistema no basta con este tipo de herramientas pues
no se puede saber la intencin del diseo, es decir, no saben los problemas que se
resolvieron al aplicar lo que se les muestra, ya sean grficos o cdigo fuente, a travs
de su uso. La tcnica y herramientas que se muestran aqu planean resolver esa
cuestin pues su aplicacin mostrara al usuario como fue diseado a niveles de
estructura y comportamiento a travs de los patrones de diseo que se utilizaron al
crear ese sistema, de esta manera se puede pensar que problemas tuvo el diseador
original del sistema y comprender plenamente su funcionamiento para proceder a darle
correcto mantenimiento.
Si se entiende por patrn de diseo como una solucin a un problema comn de
programacin, o desarrollo de software entonces tendremos que en su forma ms
primitiva, un patrn de diseo mostrara caractersticas propias mismas que ayudaran a
su deteccin. Sern discutidas ms adelante. Debido a esto la programacin y diseo
del algoritmo para la deteccin de estos patrones de diseo se basa en tcnicas de
reconocimiento de patrones comunes que abarca la ingeniera, la computacin y las
matemticas que vistas como una caja negra se denotan en la figura 1.
Abstract Factory
Builder
Factory Method
Protoype
Singleton
Patrones estructurales.
A los patrones estructurales se les concibe con el fin de componer objetos y clases en
grandes estructuras. Estos patrones utilizan herencia para crear interfaces o
implementaciones.
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Patrones de comportamiento.
Los patrones de comportamiento se ocupan de los algoritmos y responsabilidades
entre objetos. Estos patrones no solo describen objetos y clases, sino tambin la
comunicacin entre ellos. Se caracterizan por tener un complejo control de flujo en
Chain of responsability
Command
Interpeter
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
FUNDAMENTACIN TERICA.
en su trabajo Object-
Oriented Design Pattern Detection Using Static and Dynamic Analysis que presenta
varios mtodos para la deteccin de patrones, de manera esttica hace el anlisis de
los archivos de cdigo, y de manera dinmica se refiere al anlisis de los objetos y el
trabajo de Jing Dong, Yongtao Sun y Yajing Shao 2 del departamento de informtica de
la Universidad de Texas en Dallas que redactaron un artculo titulado Design Pattern
detection by template matching en el que describen con ayuda de la teora de grafos y
anlisis de matrices a determinar patrones en un diseo UML.
En el ao 2003 Dirk Heuzeroth y Stefan Mandel de la Universitat Karlsruhe y Welf Lowe
de la Vaxjo universitet
tambin ser dependiendo del lenguaje algunas de las caractersticas que se presenten
en cada patrn de diseo, o su forma de implementacin.
Bases que llevan a la deteccin de patrones de diseo.
Cuando se habla de deteccin de patrones siempre se encuentra su base en teoras
matemticas, en cuanto a comportamiento computacional se muestra fcilmente con el
uso de matemticas discretas en la teora de grafos, asi que en ese nivel se encuentran
algunas bases como presenta N. Tsantalis, A. Chatzigeorgiou, G. Stephanides, S. T.
Halkidis
medio de la ayuda de grafos dirigidos, la aplicacin que este equipo produjo muestra
una alta tasa de precisin en la deteccin de patrones (Ntese que son patrones, no
patrones de diseo), previamente el grupo se dedico a la redaccin de un primer
trabajo titulado Application of Graph Theory to OO Software 5, base para el desarrollo
de su ltimo trabajo. Entonces por lo general las formas ms sencillas de deteccin de
patrones vienen desde un nivel ms bajo de abstraccin.
del
lograron
Silverlight Patterns
Enterprise Patterns
MVP Patterns
LINQ-to-SQL Practices
MVVM Patterns
SOA Patterns
Membership Practices
Entity Framework
Repository Patterns
Dependency Injection
Especificacin
grfica
de
los
patrones
estructurales
patrones
de
comportamiento
10
, Resumen: Los
11
. En
este trabajo se investiga un enfoque basado en anti patrones para analizar programas
con subprocesamiento mltiple. Se presenta una librera de 38 anti patrones que
describen a partir de las fuentes de cdigo predefinidas los errores relacionados con el
mismo. Los anti patrones son archivados de manera prctica, plantillas fcil de usar y
estn clasificados de acuerdo a su potencial efecto en el comportamiento
del
Facilitar
el
aprendizaje
de
las
nuevas
generaciones
de
diseadores
Patrones estructurales:
Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una
clase que de otro modo no podra utilizarla.
Patrones de comportamiento:
Facade (Fachada): Provee de una interfaz unificada simple para acceder a una
interfaz o grupo de interfaces de un subsistema.
Nombre del patrn: nombre estndar del patrn por el cual ser reconocido en
la comunidad (normalmente se expresan en ingls).
Implementacin:
Tcnicas
comentarios
oportunos
de
cara
la
Gang of Four es el nombre con el que se conoce comnmente a los autores del libro
Design Patterns (ISBN 0-201-63361-2), referencia en el campo del diseo orientado a
objetos.
La 'Banda de los cuatro', se compone de los siguientes autores:
Erich Gamma
Richard Helm
Ralph Johnson
John Vlissides
Dada una determinada situacin, los patrones indican cmo resolverla mediante
un D.O.O.
Preden de la experiencia.
Han
demostrado
su
utilidad
frecuentemente en el D.O.O.
para
resolver
problemas
que
aparecen
No indican cmo disear un sistema completo, sino slo aspectos puntuales del
mismo.
Referencias a self:
Las clases del patrn son roles genricos, pero en la implementacin aparecen
clases concretas.
Figura 2.
En la figura 2 vemos el patrn de diseo estructural Decorator, este patrn soluciona el
problema de poder agregar funcionalidad de manera dinmica a un objeto. La
estructura bsica se muestra en la que las clases involucradas son cinco como mnimo
y si se separa en sus participantes tenemos que son los siguientes:
Componente
Componente Concreto
Decorador
Decorador Concreto
Figura 4.
Obteniendo que haya relacin como debe en la primer parte del algoritmo, de procede
a encontrar la otra familia, pues en la estructura nuclear del patrn. Luego el mismo
algoritmo se repite para encontrar a la otra familia de productos.
1.para cada e3en E
3. si e1 es diferente de e3
4. si e1 tiene asociacin con cualquier clase de e3
5. si mtodos de e1 devuelven tipos e3
6. almacenar(e1,e3)
Figura 5
Relaciones entre clases.
Es muy importante remarcar que en una estructura en la mayora de sus casos en los
patrones de diseo se relacionan entre ellas, las relaciones que aparecen son las de:
Asociacin
Agregacin
Composicin
Realizacin
Dependencia
Multiplicidad
Java en un API nos permite tratar a una clase como un objeto Class, este objeto cuenta
con mtodos que resultan muy tiles en la bsqueda de la respuesta a estas
cuestiones presentadas pues en su sumario de mtodos se encuentran entre todos los
siguientes:
1.
2.
3.
4.
5.
6.
getConstructors()
getDeclaredFields()
getDeclaredMethods()
getInterfaces()
getSuperclass()
isInterface()
Falsos positivos.
Otro problema recurrente al utilizar esta tcnica son los falsos positivos, una forma de
evitarlos seria aplicando reglas ms duras para verificar las caractersticas de los
patrones de diseo, pero sera bastante rigoroso que probablemente alguna variante de
algn patrn de diseo pase desapercibida por no encontrar estrictamente lo que se
pretende, si vemos en el ejemplo anterior del patrn Abstract Factory, en el algoritmo
nicamente se busco que las estructuras e1 y e2 hubiera asociacin entre cualquier
clase de ellas, no entre alguna en especifico o entre algn numero, tambin se busco
que mtodos de e1 regresaran tipos e2 pues es una caracterstica esencial, aun as
nmeros de falsos positivos existirn pero no tanto como para quitar practicidad a la
tcnica pues aun as esos falsos positivos mostraran una estructura que corresponde a
la del patrn que pudiera ser potencialmente una variante.
Pruebas.
Las siguientes pruebas se hicieron utilizando el paquete del API de Java java.util como
entrada a la aplicacin, se muestra en la tabla los resultados para los patrones Visitor,
Composite, Bridge, Factory Method, Builder y Chain of Responsability.
Patrn
Visitor
Bridge
Composite
Builder
Factory Method
Chain
Responsability
Total
1
10
3
3
3
of 2
Reales
1
3
3
3
3
2
Falsos positivos
0
7
0
0
0
0
Como parte de los falsos positivos, no se toman en cuenta los que cumplen algunas de
las caractersticas de los patrones, al no cumplirlas todas algunos patrones aun asi las
muestran con un porcentaje de parecido en ciertos casos, en otros casos las
propiedades del patrn son esenciales que se manejan como un valor absoluto.
Anlisis dinmico.
La parte de anlisis dinmico es la que se realiza en tiempo de ejecucin sobre los
objetos actuales en memoria y sus relaciones, como parte del anlisis dinmico se
obtienen lo siguiente:
Tipos devueltos.
Tipo de clase; abstracta, interfaz.
Relaciones es un
Relaciones tiene un
Relaciones generales de asociacin.
Buscar de manera esttica ayuda a encontrar relaciones entre clases que de otra
manera seria imposibles, veamos el siguiente caso para denotar una relacin de
agregacin/composicion.
Claramente A tiene una relaciones con B, pero de manera dinmica no podemos ver la
implementacin del mtodo de la clase A para conocer si de verdad tiene una
relaciones con B, puesto que podemos saber si devuelve un B o si tiene un B, o si
recibe en alguno de sus mtodos un tipo B como argumento pero no hay forma de
saber si dentro de la implementacin o de un constructor esta una llamaba o
construccin de un B, por lo tanto para evitar eso se utiliza el anlisis esttico del
Bytecode.
CONCLUSIONES.
Referencias bibliogrficas.
1. Birkner, M. (s.f.). mb-pde. Recuperado el 9 de Septiembre de 2011, de Java Software
Design Pattern Detection Engine: http://mb-pde.googlecode.com/files/MasterThesis.pdf
2. Dong, J., Sun, Y., & Zhao, Y. (s.f.). UT Dallas. Recuperado el 10 de Septiembre de
2011, de http://www.utdallas.edu/~jdong/papers/sac08.pdf
3. Heuzeroth, D., & Mandel, S. (s.f.). ARiSA - Applied Research in System Analysis.
Recuperado el 10 de Septiembre de 2011, de http://www.arisa.se/files/HLM-03.pdf
4. N. Tsantalis, A. Chatzigeorgiou, G. Stephanides, S. T. Halkidis, "Design Pattern
Detection Using Similarity Scoring", IEEE Transactions on Software Engineering, vol.
32, no. 11, pp. 896-909, November, 2006.
5. A. Chatzigeorgiou, N. Tsantalis, G. Stephanides, "Application of Graph Theory to OO
Software Engineering", 2nd International Workshop on Interdisciplinary Software
Engineering Research (WISER'2006), Shanghai, China, May 20, 2006
6. Tosi, C., Zanoni, M., & Maggioni, S. (s.f.). Eclipse-IT 2009. Recuperado el 9 de
Septiembre de 2011, de http://eit09.unibg.it/pdfs/99990089.pdf
7. Wang, W., & Tzerpos, V. (s.f.). York University. Recuperado el 10 de Septiembre de
2011,
de
Department
of
Computer
Science
and
Engineering:
www.cse.yorku.ca/~bil/publications/dpd.pdf
8. Elaasar, M., Briand, L., & Labiche, Y. (s.f.). Mendeley. Recuperado el 9 de
Septiembre de 2011, de http://www.mendeley.com/research/metamodeling-approachpattern-specification/
9. FUJABA Tool Suite. (s.f.). Recuperado el 15 de Septiembre de 2011, de
http://www.fujaba.de/index.php?id=11731
10. Sez Martnez, J., Garca Molina, J., & Jimnez Garca, P. (s.f.). Departamento de
Informtica y Sistemas Universidad de Murcia. Recuperado el 12 de Septiembre de
2011, de http://dis.um.es/~jmolina/arquipatronesjis99.pdf
11. IEEE Xplore Digital Library. (s.f.). Recuperado el 14 de Septiembre de 2011, de
http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1357968