SlideShare una empresa de Scribd logo
Desarrollo de Software Orientado a Aspectos
UNICEN - Facultad de Ciencias Exactas
Trabajo Final - Cursada 2010
Integrantes:
 Barrios, Pablo
 Cicciarelli, José
 Ciolfi Felice, Marianela
 Pacheco, Martín Ignacio
 Pérez, César Daniel
 Porchetto, Roque
 Sánchez, Emiliano
 Suzuki, Pedro
Contenido
Introducción...............................................................................................................................................3
Refactorización Manual del Concern......................................................................................................5
Refactorización Semi-Automática...........................................................................................................6
Refactorización Automática (Asistencia de la herramienta para todo el proceso)...........................9
Comparaciones entre las etapas ............................................................................................................10
Conclusión y Sugerencias.......................................................................................................................11
Índice de Figuras
Figura 1- Clases involucradas..................................................................................................................3
Figura 2 - Código del aspecto implementado de forma manual.........................................................5
Figura 3 - Pasos para la aplicación del refactoring Extract Feature into Aspect...............................6
Figura 4 - Código del aspecto obtenido en la etapa semi-automática................................................7
Figura 5 - Código final del aspecto obtenido en la etapa semi-automática.......................................8
Figura 6 - Dialogo de interacción con el agente.....................................................................................9
Figura 7 - Pre visualización de los cambios. ..........................................................................................9
Figura 8 - Código del aspecto obtenido en la etapa automática. ......................................................10
Introducción
El objetivo del trabajo consiste en lograr la refactorización del concern Command del
sistema JHotDraw (versión 5.4b1) aplicando diferentes técnicas de refactorización y haciendo
uso del catálogo de refactorings de Monteiro.
JHotDraw (http://www.jhotdraw.org/) es un framework en dos dimensiones para editores
de dibujos técnicos y estructurados, realizado en Java. Su diseño se basa en gran medida en
algunos patrones de diseño conocidos. Los autores originales son Erich Gamma y Thomas
Eggenschwiler.
El patrón Command permite solicitarle una operación a un objeto sin conocer realmente el
contenido de la operación, ni el receptor real de la misma. Para ello se encapsula la petición
como un objeto, con lo que además se facilita la parametrización de los métodos.
Unos de los propósitos relevantes de este patrón es que permite ofrecer una interfaz común
para invocar las acciones de forma uniforme y extender el sistema con nuevas acciones de
forma sencilla.
La refactorización permite reestructurar un código fuente (orientado a objetos, en este caso),
alterando la estructura interna del mismo pero sin modificar su comportamiento externo o
semántica. Para poder transformar a código orientado a aspectos se debe contar con las
estrategias de reestructuración de código (aspects refactorings), los cuales tienen en cuenta los
crosscutting concerns en el sistema que se está tratando.
Las clases del framework JHotDraw involucradas en este proceso de refactorización se
pueden observar en el diagrama de la figura 1.
Figura 1- Clases involucradas.
.
Para ello existen tres tipos de aspects refactorings:
1. Refactorings Aspect-Aware OO: Se refiere a aquellos refactorings orientados a objetos que
se extendieron y adaptaron para poder ser utilizados en el paradigma orientado a aspectos.
Cuando se realiza una reestructuración de software siguiendo técnicas de refactoring
orientado a objetos, es necesario tener en cuenta los aspectos y su relación con las
componentes funcionales de la aplicación.
2. Refactorings de construcciones AOP (Aspect Oriented Programing): Estos presentan la
propiedad de estar orientados específicamente a elementos de la programación orientada a
aspectos. En los refactorings agrupados bajo esta segunda división se puede realizar una
subdivisión. En primer lugar aquellos refactorings que tienen un paralelo en la orientación
a objetos. En segundo lugar, hay un grupo de refactorings que son totalmente nuevos ya
que no tienen una equivalencia en OO, debido a los distintos elementos como los advices.
3. Refactorings de CCC (Crosscutting Concerns): Tiene como objetivo transformar los
crosscutting concerns en aspectos. Estos refactorings buscan agrupar los distintos concerns
que se encuentran diseminados por todo el código al modularizarlos en un aspecto.
Para llevar a cabo la refactorización se deben combinar diferentes técnicas para lograr
cubrir los posibles escenarios que se presentan al momento de migrar de un sistema OO a uno
AO.
La herramienta que se utilizó para la realización de este trabajo se denomina AspectRT
(Aspect Refactoring Tool). La misma es un plugin para el entorno de desarrollo Eclipse y se
integra con AspectJ.
Las características de AspectRT son:
 Automatización de la mayor parte del proceso de migración. Es decir que dado un
código aspectizable, se da la posibilidad de aplicar un refactoring de forma
transparente al desarrollador.
 Soporte para los tres tipos de refactorings mencionados anteriormente.
 Vinculación con aspect mining para facilitar la tarea del descubrimiento del código
aspectizable.
 La herramienta tiene un diseño flexible para poder ser extendida para soportar nuevos
refactorings.
Refactorización Manual del Concern
En primer lugar, se creó un aspecto, denominado Command, en el cual se volcaría todo el
código aspectizable relacionado con el concern a refactorizar.
Luego se procedió a aplicar el refactoring Move Method from Class to Inter-Type,
extrayendo el código del método execute, de la clase AbstractCommand, para colocarlo en el
método del aspecto, execute, en un principio como público.
Tanto la definición del método execute como su invocación fueron quitadas de
AbstractCommand, dado que su ejecución debería dispararse como parte de un advice de tipo
before, al alcanzar un pointcut creado para tal fin.
Dado que todas las clases que extienden a AbstractCommand, hacen un llamado a
super.execute(), y este método ya no pertenecía a la clase, fue necesario quitar la sentencia y
generalizar el pointcut del aspecto para que abarcara también a las clases mencionadas. Para
esto se utilizó la expresión regular AbstractCommand+, que hace matching con las clases que
extienden a AbstractCommand. Además se hizo uso del refactoring Extract fragment into
advice, moviendo la llamada a super.execute(), al código del advice, con la diferencia de que ya
no se invocaba a super sino a execute directamente.
Luego fue posible cambiar la visibilidad de execute, de pública a privada, ya que solamente
sería accedido desde el aspecto.
Por último, se aplicó el refactoring Encapsulate Implements with Declare Parents, dado
que AbstractCommand implementaba la interfaz Command, asociada al concern siendo
refactorizado. Básicamente, se quitó el implements Command de la clase y se colocó en el aspecto,
de la siguiente manera: declare parents: AbstractCommand implements Command. Fue
necesario además incluir la sentencia: import CH.ifa.draw.util.Command.
Figura 2 - Código del aspecto implementado de forma manual.
Refactorización Semi-Automática
En esta etapa comenzamos con el uso de la herramienta ya mencionada para la
refactorización. Lo primero que hicimos fue cargar el archivo XML de concerns provisto por la
cátedra. Una vez realizada la carga del mismo iteramos sobre los candidatos que se pueden
aspectizar, es decir las modificaciones que tenemos que hacerle al código orientado a objetos.
Por cada modificación, seleccionamos manualmente, basados en nuestro conocimiento del
catalogo, una de entre todas las opciones de refactorización que provee AspectRT. El
refactoring seleccionado fue, en todos los casos, Extract Feature into Aspect:
Por cada clase que extiende de AbstractCommand se mueve la sentencia super.execute() ,
del método execute, hacia el nuevo aspecto AspectCommand. Esto introdujo un nuevo
pointcut, que captura el joinpoint requerido, y un nuevo advice, que responde al pointcut y
contiene el fragmento de código mencionado, por cada extracción.
Los pasos seguidos en el asistente para la aplicación del refactoring se pueden observar en
la secuencia de imágenes de la figura 3.
Figura 3 - Pasos para la aplicación del refactoring Extract Feature into Aspect.
Luego usamos el refactoring Move Method from Class to Inter-type. Con este se
mueve el método execute (definido en la interfaz Command) de la clase AbstractCommand
dentro del aspecto llamado AspectCommand, como una declaración Inter-type.
El aspecto resultando de estos refactorings es el siguiente:
En este punto, el aspecto generado presenta errores de compilación en la definición de sus
advices. Este error se produce al llamar a super.execute y no poder resolver el tipo asociado a
_this en tiempo de compilación. La herramienta no considera las sentencias que involucran
llamadas a super y por lo tanto arrastra el error. Esto debió resolverse manualmente
introduciendo un método privado del aspecto llamado execute, el cual es llamado desde todos
los advices.
La introducción de este método en el aspecto solucionó los errores de código, pero continúa
presentando los siguientes problemas:
● Baja reusabilidad: Por cada clase que extiende de AbstractCommand se tiene que
realizar una “extracción de fragmento a aspecto”, introduciendo un nuevo advice
y pointcut.
● Duplicación de código: El aspecto presenta duplicación de código en los pointcuts
y advices asociados.
Por esta razón se aplicaron luego las siguientes refactorizaciones, con el objetivo de ordenar
la estructura interna del aspecto:
● Generalización de todos los pointcuts en uno solo: para esto hacemos uso de las
expresiones regulares que ofrece AspectJ, para capturar todos los joinpoints
involucrados.
● Utilización de un único advice que responda ha dicho pointcut.
Figura 4 - Código del aspecto obtenido en la etapa semi-automática.
Finalmente, el aspecto queda formado por: un método privado execute, un pointcut pc y un
advice de tipo before. Por otro lado, resuelve los problemas de duplicación de código y
reusabilidad de la clase AbstractCommand.
Figura 5 - Código final del aspecto obtenido en la etapa semi-automática.
Refactorización Automática (Asistencia de la herramienta para todo el
proceso)
En esta etapa comenzamos de igual manera, cargando el archivo XML de concerns
provisto por la cátedra. En lugar de seleccionar el refactoring manualmente, utilizamos el
agente para cada una de las modificaciones.
El agente siguiere directamente el refactoring Extract Fragment into Advice (figura 6)
para todas las modificaciones.
Figura 6 - Dialogo de interacción con el agente.
El agente solicita los nombres, tanto del pointcut como del aspecto, y luego muestra
una pre visualización de los cambios (figura 7):
Figura 7 - Pre visualización de los cambios.
El aspecto resultante, luego de aplicar el proceso de refactorización automático, es el
siguiente:
Figura 8 - Código del aspecto obtenido en la etapa automática.
En este punto observamos que el aspecto generado presenta los mismos errores que
sucedieron en la etapa anterior. El resultado obtenido no fue el esperado porque el agente no
tuvo en cuenta el error que mencionamos en la etapa anterior respecto del llamado al método
super.
Comparaciones entre las etapas
Si bien el código final de los aspectos resultantes de las tres técnicas utilizadas, es muy
similar, existe una diferencia entre el obtenido de forma manual, y los demás, ya que se
identificó una refactorización adicional, relacionada con la implementación de la interfaz
Command por parte de AbstractCommand.
Como punto de encuentro vale la pena mencionar que el desarrollador, al momento de
refactorizar manualmente, puede seguir un proceso similar al realizado por la herramienta, ya
que como primer enfoque podría pensar que la solución era crear un pointcut para cada clase
que extendía de AbstractCommand, y luego decidir optimizar el código orientado a aspectos,
generalizándolo.
Cabe destacar que el tiempo que llevó aplicar las técnicas fue similar dado que las
herramientas para la generación semiautomática y automática requirieron tiempo extra para
arreglar los errores presentados.
A continuación se presenta una breve conclusión sobre el trabajo desarrollado y unas
posibles sugerencias al respecto.
Conclusión y Sugerencias
La utilización de la herramienta para la refactorización de código orientado a objetos es
muy útil. Principalmente con sistemas grandes ya que brinda una guía al desarrollador
evitando posibles confusiones y ahorrándole tiempo.
En cuanto a la herramienta, destacamos su muy buena usabilidad, ofreciendo guías muy
intuitivas y completas para realizar los refactorings.
Con respecto a la calidad de código generado se tuvieron que realizar algunas
modificaciones en ciertos elementos del código de forma manual luego de la generación
automática de los mismos. La crítica más relevante, en este sentido, es que en el movimiento de
sentencias o fragmentos de código a un aspecto, no considera la semántica de la palabra
reservada super lo que acarrea errores en el aspecto.
Como mejora en el código vemos interesante la posibilidad de aplicar el refactoring
llamado Split Abstract Class Between Aspect and Interface. Este, como su nombre lo indica,
mueve la declaración de una clase abstracta a un aspecto y una interfaz, permitiendo que las
subclases, solo implementando la interfaz, hereden los atributos e implementaciones de los
métodos de la clase abstracta (ahora definidos en el aspecto). Esto permite emular, de cierta
forma, la herencia múltiple en Java.
En nuestro caso, mantendríamos la interfaz Command y eliminaríamos la clase
AbstractCommand, definiendo la implementación de los métodos y declaración de atributos en
un nuevo aspecto. Así, todas las subclases de AbstractCommand solo necesitan implementar la
interfaz Command y, de forma transparente, heredarían los atributos y métodos concretos que
tenia la clase abstracta.
Sería interesante que la herramienta pudiera ofrecerla en su catálogo, al ser muy
interesante por esta posibilidad de emular la herencia múltiple sin agregar nuevas
declaraciones, lo cual ofrece un código muy sencillo y fácil de mantener.

Más contenido relacionado

La actualidad más candente

3 paradigmas
3 paradigmas3 paradigmas
3 paradigmas
alithu1
 
Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.
Sandy Montoya Reyes
 
Programación orientada a aspectos
Programación orientada a aspectosProgramación orientada a aspectos
Programación orientada a aspectos
programadorjavablog
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
vnslgars
 
Programación Orientada a Objetos vs Programación Estructurada
Programación Orientada a Objetos vs Programación EstructuradaProgramación Orientada a Objetos vs Programación Estructurada
Programación Orientada a Objetos vs Programación Estructurada
Michael de la Cruz
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
May Ibarra
 
Tabla comparativa de paradigma de la poo y programacion estructurada
Tabla comparativa de paradigma de la poo y programacion estructuradaTabla comparativa de paradigma de la poo y programacion estructurada
Tabla comparativa de paradigma de la poo y programacion estructurada
wouyrmz
 
Programacion estructurada vs. programación a objetos
Programacion estructurada vs. programación a objetosProgramacion estructurada vs. programación a objetos
Programacion estructurada vs. programación a objetos
lidia gonzalez
 
Programación rientada a Aspectos - David Burbano
Programación rientada a Aspectos - David BurbanoProgramación rientada a Aspectos - David Burbano
Programación rientada a Aspectos - David Burbano
2008PA2Info3
 

La actualidad más candente (19)

Paradigmas programacion
Paradigmas programacionParadigmas programacion
Paradigmas programacion
 
3 paradigmas
3 paradigmas3 paradigmas
3 paradigmas
 
Sesion 2
Sesion 2Sesion 2
Sesion 2
 
Cuadro comparativo.
Cuadro comparativo.Cuadro comparativo.
Cuadro comparativo.
 
Programación!! . .
Programación!! . .Programación!! . .
Programación!! . .
 
Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.Tabla comparativa de programacion orientada , objetos y estructurada.
Tabla comparativa de programacion orientada , objetos y estructurada.
 
Programación orientada a aspectos
Programación orientada a aspectosProgramación orientada a aspectos
Programación orientada a aspectos
 
Programacion estructurada
Programacion estructuradaProgramacion estructurada
Programacion estructurada
 
Tabla comparativa de paradigamas
Tabla comparativa de paradigamasTabla comparativa de paradigamas
Tabla comparativa de paradigamas
 
Paradigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosParadigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a Objetos
 
Programación estructurada
Programación estructuradaProgramación estructurada
Programación estructurada
 
Programación Orientada a Objetos vs Programación Estructurada
Programación Orientada a Objetos vs Programación EstructuradaProgramación Orientada a Objetos vs Programación Estructurada
Programación Orientada a Objetos vs Programación Estructurada
 
Paradigmas de programación
Paradigmas de programaciónParadigmas de programación
Paradigmas de programación
 
Tabla comparativa programación estructurada y orientada a objetos
Tabla comparativa programación estructurada y orientada a objetosTabla comparativa programación estructurada y orientada a objetos
Tabla comparativa programación estructurada y orientada a objetos
 
Programaciuon
ProgramaciuonProgramaciuon
Programaciuon
 
Tabla comparativa de paradigma de la poo y programacion estructurada
Tabla comparativa de paradigma de la poo y programacion estructuradaTabla comparativa de paradigma de la poo y programacion estructurada
Tabla comparativa de paradigma de la poo y programacion estructurada
 
Programacion estructurada vs. programación a objetos
Programacion estructurada vs. programación a objetosProgramacion estructurada vs. programación a objetos
Programacion estructurada vs. programación a objetos
 
Programación rientada a Aspectos - David Burbano
Programación rientada a Aspectos - David BurbanoProgramación rientada a Aspectos - David Burbano
Programación rientada a Aspectos - David Burbano
 
lenguaje y herramientas
lenguaje y herramientaslenguaje y herramientas
lenguaje y herramientas
 

Destacado

Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...
Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...
Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...
CICMoficial
 
modelos del proceso del software
 modelos del proceso del software  modelos del proceso del software
modelos del proceso del software
Brihany Rossell
 

Destacado (12)

Modelos de software ventajas y desventajas
Modelos de software ventajas y desventajasModelos de software ventajas y desventajas
Modelos de software ventajas y desventajas
 
Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...
Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...
Retos del Egresado de Ingeniería Civil ante el paradigma de la sustentabilida...
 
ADOO: 2.0 Generalidades Del Software
ADOO: 2.0 Generalidades Del SoftwareADOO: 2.0 Generalidades Del Software
ADOO: 2.0 Generalidades Del Software
 
Metodologias formales
Metodologias formalesMetodologias formales
Metodologias formales
 
Métodos Formales
Métodos FormalesMétodos Formales
Métodos Formales
 
Modelo de Desarrollo Rápido de Aplicaciones (DRA)
Modelo de Desarrollo Rápido de Aplicaciones (DRA)Modelo de Desarrollo Rápido de Aplicaciones (DRA)
Modelo de Desarrollo Rápido de Aplicaciones (DRA)
 
El Modelo Dra
El Modelo DraEl Modelo Dra
El Modelo Dra
 
Modelo de desarrollo de software
Modelo de desarrollo de softwareModelo de desarrollo de software
Modelo de desarrollo de software
 
Cuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de softwareCuadro comparativo modelos para el desarrollo de software
Cuadro comparativo modelos para el desarrollo de software
 
Modelos de desarrollo de software
Modelos de desarrollo de softwareModelos de desarrollo de software
Modelos de desarrollo de software
 
modelos del proceso del software
 modelos del proceso del software  modelos del proceso del software
modelos del proceso del software
 
Tendencias de Modelado Software
Tendencias de Modelado SoftwareTendencias de Modelado Software
Tendencias de Modelado Software
 

Similar a Desarrollo de Software Orientado a Aspectos

Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...
Jonathan Franchesco Torres Baca
 
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
negroues
 
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
negroues
 
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdfUnidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
EDWINERNESTOMADRIDME
 

Similar a Desarrollo de Software Orientado a Aspectos (20)

A O P
A O PA O P
A O P
 
Fundamentos de la arquitectura de software
Fundamentos de la arquitectura de softwareFundamentos de la arquitectura de software
Fundamentos de la arquitectura de software
 
Poa 01
Poa 01Poa 01
Poa 01
 
Aspect Oriented Programming introduction
Aspect Oriented Programming introductionAspect Oriented Programming introduction
Aspect Oriented Programming introduction
 
Introducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHPIntroducción A La Orientación A Aspectos - Programador PHP
Introducción A La Orientación A Aspectos - Programador PHP
 
Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...Unificando el análisis de sistemas y la programación de software para lenguaj...
Unificando el análisis de sistemas y la programación de software para lenguaj...
 
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
 
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...Clase no. 1 unidad no. iii  introduccion al analisis y diseño estructurado  d...
Clase no. 1 unidad no. iii introduccion al analisis y diseño estructurado d...
 
Modelado
ModeladoModelado
Modelado
 
Modelado
ModeladoModelado
Modelado
 
UNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓNUNIDAD 3 MODULARIZACIÓN
UNIDAD 3 MODULARIZACIÓN
 
Recursividad2019
Recursividad2019Recursividad2019
Recursividad2019
 
Modbus eai u5
Modbus eai u5Modbus eai u5
Modbus eai u5
 
10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes10.el diseño en el nivel de componentes
10.el diseño en el nivel de componentes
 
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdfUnidad III-Programación Modular-introducción al lenguaje programable.pdf
Unidad III-Programación Modular-introducción al lenguaje programable.pdf
 
MODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdf
MODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdfMODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdf
MODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdf
 
MODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdf
MODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdfMODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdf
MODULO II ALGORITMO Y PROGRAMACIÓN ESTRUCTURA DE PROGRAMA.pdf
 
Metodo watch
Metodo watchMetodo watch
Metodo watch
 
lineas-de-productos-software-y-metodo-watch
lineas-de-productos-software-y-metodo-watchlineas-de-productos-software-y-metodo-watch
lineas-de-productos-software-y-metodo-watch
 
UNIDAD III TEMA 7 EQUIPO SCADA
UNIDAD III TEMA 7 EQUIPO SCADAUNIDAD III TEMA 7 EQUIPO SCADA
UNIDAD III TEMA 7 EQUIPO SCADA
 

Más de martinp

Sistemas de Recomendación de Información - Web Semáctica
Sistemas de Recomendación de Información - Web SemácticaSistemas de Recomendación de Información - Web Semáctica
Sistemas de Recomendación de Información - Web Semáctica
martinp
 
Extraction and Analysis System of Topics for Software History Reports
Extraction and Analysis System of Topics for Software History ReportsExtraction and Analysis System of Topics for Software History Reports
Extraction and Analysis System of Topics for Software History Reports
martinp
 
IA - Redes Neuronales
IA - Redes NeuronalesIA - Redes Neuronales
IA - Redes Neuronales
martinp
 
Algoritmos de Planning - Práctico Nro. 1
Algoritmos de Planning - Práctico Nro. 1Algoritmos de Planning - Práctico Nro. 1
Algoritmos de Planning - Práctico Nro. 1
martinp
 
The Deep Web
The Deep WebThe Deep Web
The Deep Web
martinp
 

Más de martinp (11)

Evolutionary Computing - Genetic Algorithms - An Introduction
Evolutionary Computing - Genetic Algorithms - An IntroductionEvolutionary Computing - Genetic Algorithms - An Introduction
Evolutionary Computing - Genetic Algorithms - An Introduction
 
Sistemas de Recomendación de Información - Web Semáctica
Sistemas de Recomendación de Información - Web SemácticaSistemas de Recomendación de Información - Web Semáctica
Sistemas de Recomendación de Información - Web Semáctica
 
Extraction and Analysis System of Topics for Software History Reports
Extraction and Analysis System of Topics for Software History ReportsExtraction and Analysis System of Topics for Software History Reports
Extraction and Analysis System of Topics for Software History Reports
 
IA - Redes Neuronales
IA - Redes NeuronalesIA - Redes Neuronales
IA - Redes Neuronales
 
Algoritmos de Planning - Práctico Nro. 1
Algoritmos de Planning - Práctico Nro. 1Algoritmos de Planning - Práctico Nro. 1
Algoritmos de Planning - Práctico Nro. 1
 
The Deep Web
The Deep WebThe Deep Web
The Deep Web
 
Hofstede’s Cultural Dimensions
Hofstede’s Cultural DimensionsHofstede’s Cultural Dimensions
Hofstede’s Cultural Dimensions
 
Patrimonio dell'umanità in Italia
Patrimonio dell'umanità in ItaliaPatrimonio dell'umanità in Italia
Patrimonio dell'umanità in Italia
 
Int. a la Computación Evolutiva - Informe para cursada
Int. a la Computación Evolutiva - Informe para cursadaInt. a la Computación Evolutiva - Informe para cursada
Int. a la Computación Evolutiva - Informe para cursada
 
Software Libre/Código Abierto - Enunciado
Software Libre/Código Abierto - EnunciadoSoftware Libre/Código Abierto - Enunciado
Software Libre/Código Abierto - Enunciado
 
Software Libre/Código Abierto - Informe Final
Software Libre/Código Abierto - Informe FinalSoftware Libre/Código Abierto - Informe Final
Software Libre/Código Abierto - Informe Final
 

Último

Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfUn libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
sandradianelly
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
El Fortí
 
Asistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdf
Asistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdfAsistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdf
Asistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdf
Demetrio Ccesa Rayme
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Monseespinoza6
 

Último (20)

Fase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometricoFase 2, Pensamiento variacional y trigonometrico
Fase 2, Pensamiento variacional y trigonometrico
 
True Mother's Speech at THE PENTECOST SERVICE..pdf
True Mother's Speech at THE PENTECOST SERVICE..pdfTrue Mother's Speech at THE PENTECOST SERVICE..pdf
True Mother's Speech at THE PENTECOST SERVICE..pdf
 
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCIONCAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
CAPACIDADES SOCIOMOTRICES LENGUAJE, INTROYECCIÓN, INTROSPECCION
 
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLAACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
ACERTIJO DE CARRERA OLÍMPICA DE SUMA DE LABERINTOS. Por JAVIER SOLIS NOYOLA
 
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁIMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
IMÁGENES SUBLIMINALES EN LAS PUBLICACIONES DE LOS TESTIGOS DE JEHOVÁ
 
Fase 3; Estudio de la Geometría Analítica
Fase 3; Estudio de la Geometría AnalíticaFase 3; Estudio de la Geometría Analítica
Fase 3; Estudio de la Geometría Analítica
 
Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdfUn libro sin recetas, para la maestra y el maestro Fase 3.pdf
Un libro sin recetas, para la maestra y el maestro Fase 3.pdf
 
Semana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptxSemana #10-PM3 del 27 al 31 de mayo.pptx
Semana #10-PM3 del 27 al 31 de mayo.pptx
 
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdfFORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
FORTI-JUNIO 2024. CIENCIA, EDUCACION, CULTURA,pdf
 
Presentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos DigitalesPresentación Revistas y Periódicos Digitales
Presentación Revistas y Periódicos Digitales
 
La Hegemonía Liberal en Paraguay 1904 a 1936.ppt
La Hegemonía Liberal en Paraguay 1904 a 1936.pptLa Hegemonía Liberal en Paraguay 1904 a 1936.ppt
La Hegemonía Liberal en Paraguay 1904 a 1936.ppt
 
Asistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdf
Asistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdfAsistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdf
Asistencia Tecnica Cartilla Pedagogica DUA Ccesa007.pdf
 
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
Productos contestatos de la Séptima sesión ordinaria de CTE y TIFC para Docen...
 
Módulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptx
Módulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptxMódulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptx
Módulo No. 1 Salud mental y escucha activa FINAL 25ABR2024 técnicos.pptx
 
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docxPLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
PLAN DE TRABAJO CONCURSO NACIONAL CREA Y EMPRENDE.docx
 
Conocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del ArrabalConocemos la ermita de Ntra. Sra. del Arrabal
Conocemos la ermita de Ntra. Sra. del Arrabal
 
Fase 1, Lenguaje algebraico y pensamiento funcional
Fase 1, Lenguaje algebraico y pensamiento funcionalFase 1, Lenguaje algebraico y pensamiento funcional
Fase 1, Lenguaje algebraico y pensamiento funcional
 
Proceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de PamplonaProceso de admisiones en escuelas infantiles de Pamplona
Proceso de admisiones en escuelas infantiles de Pamplona
 
Introducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BIIntroducción a la ciencia de datos con power BI
Introducción a la ciencia de datos con power BI
 
ensayo literario rios profundos jose maria ARGUEDAS
ensayo literario rios profundos jose maria ARGUEDASensayo literario rios profundos jose maria ARGUEDAS
ensayo literario rios profundos jose maria ARGUEDAS
 

Desarrollo de Software Orientado a Aspectos

  • 1. Desarrollo de Software Orientado a Aspectos UNICEN - Facultad de Ciencias Exactas Trabajo Final - Cursada 2010 Integrantes:  Barrios, Pablo  Cicciarelli, José  Ciolfi Felice, Marianela  Pacheco, Martín Ignacio  Pérez, César Daniel  Porchetto, Roque  Sánchez, Emiliano  Suzuki, Pedro
  • 2. Contenido Introducción...............................................................................................................................................3 Refactorización Manual del Concern......................................................................................................5 Refactorización Semi-Automática...........................................................................................................6 Refactorización Automática (Asistencia de la herramienta para todo el proceso)...........................9 Comparaciones entre las etapas ............................................................................................................10 Conclusión y Sugerencias.......................................................................................................................11 Índice de Figuras Figura 1- Clases involucradas..................................................................................................................3 Figura 2 - Código del aspecto implementado de forma manual.........................................................5 Figura 3 - Pasos para la aplicación del refactoring Extract Feature into Aspect...............................6 Figura 4 - Código del aspecto obtenido en la etapa semi-automática................................................7 Figura 5 - Código final del aspecto obtenido en la etapa semi-automática.......................................8 Figura 6 - Dialogo de interacción con el agente.....................................................................................9 Figura 7 - Pre visualización de los cambios. ..........................................................................................9 Figura 8 - Código del aspecto obtenido en la etapa automática. ......................................................10
  • 3. Introducción El objetivo del trabajo consiste en lograr la refactorización del concern Command del sistema JHotDraw (versión 5.4b1) aplicando diferentes técnicas de refactorización y haciendo uso del catálogo de refactorings de Monteiro. JHotDraw (http://www.jhotdraw.org/) es un framework en dos dimensiones para editores de dibujos técnicos y estructurados, realizado en Java. Su diseño se basa en gran medida en algunos patrones de diseño conocidos. Los autores originales son Erich Gamma y Thomas Eggenschwiler. El patrón Command permite solicitarle una operación a un objeto sin conocer realmente el contenido de la operación, ni el receptor real de la misma. Para ello se encapsula la petición como un objeto, con lo que además se facilita la parametrización de los métodos. Unos de los propósitos relevantes de este patrón es que permite ofrecer una interfaz común para invocar las acciones de forma uniforme y extender el sistema con nuevas acciones de forma sencilla. La refactorización permite reestructurar un código fuente (orientado a objetos, en este caso), alterando la estructura interna del mismo pero sin modificar su comportamiento externo o semántica. Para poder transformar a código orientado a aspectos se debe contar con las estrategias de reestructuración de código (aspects refactorings), los cuales tienen en cuenta los crosscutting concerns en el sistema que se está tratando. Las clases del framework JHotDraw involucradas en este proceso de refactorización se pueden observar en el diagrama de la figura 1. Figura 1- Clases involucradas. . Para ello existen tres tipos de aspects refactorings: 1. Refactorings Aspect-Aware OO: Se refiere a aquellos refactorings orientados a objetos que se extendieron y adaptaron para poder ser utilizados en el paradigma orientado a aspectos. Cuando se realiza una reestructuración de software siguiendo técnicas de refactoring orientado a objetos, es necesario tener en cuenta los aspectos y su relación con las componentes funcionales de la aplicación.
  • 4. 2. Refactorings de construcciones AOP (Aspect Oriented Programing): Estos presentan la propiedad de estar orientados específicamente a elementos de la programación orientada a aspectos. En los refactorings agrupados bajo esta segunda división se puede realizar una subdivisión. En primer lugar aquellos refactorings que tienen un paralelo en la orientación a objetos. En segundo lugar, hay un grupo de refactorings que son totalmente nuevos ya que no tienen una equivalencia en OO, debido a los distintos elementos como los advices. 3. Refactorings de CCC (Crosscutting Concerns): Tiene como objetivo transformar los crosscutting concerns en aspectos. Estos refactorings buscan agrupar los distintos concerns que se encuentran diseminados por todo el código al modularizarlos en un aspecto. Para llevar a cabo la refactorización se deben combinar diferentes técnicas para lograr cubrir los posibles escenarios que se presentan al momento de migrar de un sistema OO a uno AO. La herramienta que se utilizó para la realización de este trabajo se denomina AspectRT (Aspect Refactoring Tool). La misma es un plugin para el entorno de desarrollo Eclipse y se integra con AspectJ. Las características de AspectRT son:  Automatización de la mayor parte del proceso de migración. Es decir que dado un código aspectizable, se da la posibilidad de aplicar un refactoring de forma transparente al desarrollador.  Soporte para los tres tipos de refactorings mencionados anteriormente.  Vinculación con aspect mining para facilitar la tarea del descubrimiento del código aspectizable.  La herramienta tiene un diseño flexible para poder ser extendida para soportar nuevos refactorings.
  • 5. Refactorización Manual del Concern En primer lugar, se creó un aspecto, denominado Command, en el cual se volcaría todo el código aspectizable relacionado con el concern a refactorizar. Luego se procedió a aplicar el refactoring Move Method from Class to Inter-Type, extrayendo el código del método execute, de la clase AbstractCommand, para colocarlo en el método del aspecto, execute, en un principio como público. Tanto la definición del método execute como su invocación fueron quitadas de AbstractCommand, dado que su ejecución debería dispararse como parte de un advice de tipo before, al alcanzar un pointcut creado para tal fin. Dado que todas las clases que extienden a AbstractCommand, hacen un llamado a super.execute(), y este método ya no pertenecía a la clase, fue necesario quitar la sentencia y generalizar el pointcut del aspecto para que abarcara también a las clases mencionadas. Para esto se utilizó la expresión regular AbstractCommand+, que hace matching con las clases que extienden a AbstractCommand. Además se hizo uso del refactoring Extract fragment into advice, moviendo la llamada a super.execute(), al código del advice, con la diferencia de que ya no se invocaba a super sino a execute directamente. Luego fue posible cambiar la visibilidad de execute, de pública a privada, ya que solamente sería accedido desde el aspecto. Por último, se aplicó el refactoring Encapsulate Implements with Declare Parents, dado que AbstractCommand implementaba la interfaz Command, asociada al concern siendo refactorizado. Básicamente, se quitó el implements Command de la clase y se colocó en el aspecto, de la siguiente manera: declare parents: AbstractCommand implements Command. Fue necesario además incluir la sentencia: import CH.ifa.draw.util.Command. Figura 2 - Código del aspecto implementado de forma manual.
  • 6. Refactorización Semi-Automática En esta etapa comenzamos con el uso de la herramienta ya mencionada para la refactorización. Lo primero que hicimos fue cargar el archivo XML de concerns provisto por la cátedra. Una vez realizada la carga del mismo iteramos sobre los candidatos que se pueden aspectizar, es decir las modificaciones que tenemos que hacerle al código orientado a objetos. Por cada modificación, seleccionamos manualmente, basados en nuestro conocimiento del catalogo, una de entre todas las opciones de refactorización que provee AspectRT. El refactoring seleccionado fue, en todos los casos, Extract Feature into Aspect: Por cada clase que extiende de AbstractCommand se mueve la sentencia super.execute() , del método execute, hacia el nuevo aspecto AspectCommand. Esto introdujo un nuevo pointcut, que captura el joinpoint requerido, y un nuevo advice, que responde al pointcut y contiene el fragmento de código mencionado, por cada extracción. Los pasos seguidos en el asistente para la aplicación del refactoring se pueden observar en la secuencia de imágenes de la figura 3. Figura 3 - Pasos para la aplicación del refactoring Extract Feature into Aspect.
  • 7. Luego usamos el refactoring Move Method from Class to Inter-type. Con este se mueve el método execute (definido en la interfaz Command) de la clase AbstractCommand dentro del aspecto llamado AspectCommand, como una declaración Inter-type. El aspecto resultando de estos refactorings es el siguiente: En este punto, el aspecto generado presenta errores de compilación en la definición de sus advices. Este error se produce al llamar a super.execute y no poder resolver el tipo asociado a _this en tiempo de compilación. La herramienta no considera las sentencias que involucran llamadas a super y por lo tanto arrastra el error. Esto debió resolverse manualmente introduciendo un método privado del aspecto llamado execute, el cual es llamado desde todos los advices. La introducción de este método en el aspecto solucionó los errores de código, pero continúa presentando los siguientes problemas: ● Baja reusabilidad: Por cada clase que extiende de AbstractCommand se tiene que realizar una “extracción de fragmento a aspecto”, introduciendo un nuevo advice y pointcut. ● Duplicación de código: El aspecto presenta duplicación de código en los pointcuts y advices asociados. Por esta razón se aplicaron luego las siguientes refactorizaciones, con el objetivo de ordenar la estructura interna del aspecto: ● Generalización de todos los pointcuts en uno solo: para esto hacemos uso de las expresiones regulares que ofrece AspectJ, para capturar todos los joinpoints involucrados. ● Utilización de un único advice que responda ha dicho pointcut. Figura 4 - Código del aspecto obtenido en la etapa semi-automática.
  • 8. Finalmente, el aspecto queda formado por: un método privado execute, un pointcut pc y un advice de tipo before. Por otro lado, resuelve los problemas de duplicación de código y reusabilidad de la clase AbstractCommand. Figura 5 - Código final del aspecto obtenido en la etapa semi-automática.
  • 9. Refactorización Automática (Asistencia de la herramienta para todo el proceso) En esta etapa comenzamos de igual manera, cargando el archivo XML de concerns provisto por la cátedra. En lugar de seleccionar el refactoring manualmente, utilizamos el agente para cada una de las modificaciones. El agente siguiere directamente el refactoring Extract Fragment into Advice (figura 6) para todas las modificaciones. Figura 6 - Dialogo de interacción con el agente. El agente solicita los nombres, tanto del pointcut como del aspecto, y luego muestra una pre visualización de los cambios (figura 7): Figura 7 - Pre visualización de los cambios.
  • 10. El aspecto resultante, luego de aplicar el proceso de refactorización automático, es el siguiente: Figura 8 - Código del aspecto obtenido en la etapa automática. En este punto observamos que el aspecto generado presenta los mismos errores que sucedieron en la etapa anterior. El resultado obtenido no fue el esperado porque el agente no tuvo en cuenta el error que mencionamos en la etapa anterior respecto del llamado al método super. Comparaciones entre las etapas Si bien el código final de los aspectos resultantes de las tres técnicas utilizadas, es muy similar, existe una diferencia entre el obtenido de forma manual, y los demás, ya que se identificó una refactorización adicional, relacionada con la implementación de la interfaz Command por parte de AbstractCommand. Como punto de encuentro vale la pena mencionar que el desarrollador, al momento de refactorizar manualmente, puede seguir un proceso similar al realizado por la herramienta, ya que como primer enfoque podría pensar que la solución era crear un pointcut para cada clase que extendía de AbstractCommand, y luego decidir optimizar el código orientado a aspectos, generalizándolo. Cabe destacar que el tiempo que llevó aplicar las técnicas fue similar dado que las herramientas para la generación semiautomática y automática requirieron tiempo extra para arreglar los errores presentados. A continuación se presenta una breve conclusión sobre el trabajo desarrollado y unas posibles sugerencias al respecto.
  • 11. Conclusión y Sugerencias La utilización de la herramienta para la refactorización de código orientado a objetos es muy útil. Principalmente con sistemas grandes ya que brinda una guía al desarrollador evitando posibles confusiones y ahorrándole tiempo. En cuanto a la herramienta, destacamos su muy buena usabilidad, ofreciendo guías muy intuitivas y completas para realizar los refactorings. Con respecto a la calidad de código generado se tuvieron que realizar algunas modificaciones en ciertos elementos del código de forma manual luego de la generación automática de los mismos. La crítica más relevante, en este sentido, es que en el movimiento de sentencias o fragmentos de código a un aspecto, no considera la semántica de la palabra reservada super lo que acarrea errores en el aspecto. Como mejora en el código vemos interesante la posibilidad de aplicar el refactoring llamado Split Abstract Class Between Aspect and Interface. Este, como su nombre lo indica, mueve la declaración de una clase abstracta a un aspecto y una interfaz, permitiendo que las subclases, solo implementando la interfaz, hereden los atributos e implementaciones de los métodos de la clase abstracta (ahora definidos en el aspecto). Esto permite emular, de cierta forma, la herencia múltiple en Java. En nuestro caso, mantendríamos la interfaz Command y eliminaríamos la clase AbstractCommand, definiendo la implementación de los métodos y declaración de atributos en un nuevo aspecto. Así, todas las subclases de AbstractCommand solo necesitan implementar la interfaz Command y, de forma transparente, heredarían los atributos y métodos concretos que tenia la clase abstracta. Sería interesante que la herramienta pudiera ofrecerla en su catálogo, al ser muy interesante por esta posibilidad de emular la herencia múltiple sin agregar nuevas declaraciones, lo cual ofrece un código muy sencillo y fácil de mantener.