Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma...

50
Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH, FIE, Morelia, Mayo 2010

Transcript of Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma...

Page 1: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Estudio sobre Refactoring de Aplicaciones con

Paradigma Orientado a Objetos hacia Paradigma

Orientado a AspectosM.C. Juan Carlos Olivares Rojas

UMSNH, FIE, Morelia, Mayo 2010

Page 2: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Marco Teórico

• Resultados Obtenidos

• Conclusiones/Trabajos Futuros

AgendaPlanteamiento del Problema

Page 3: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Planteamiento del Problema• Un tipo de refactoring aplicado con

mucha frecuencia consiste en migrar aplicaciones desarrolladas en un paradigma de programación hacia otro.

• En el Instituto Tecnológico de Morelia se imparte dentro de la especialidad de Ingeniería de software la materia de “Reestructuración de Códigos” [Refactoring].

Page 4: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Planteamiento del Problema• En dicha materia se pretende que el

alumno aplique mejores prácticas en la codificación así como tratar nuevas metodologías y paradigmas de programación.

• El objetivo de este trabajo es ver en que grado las aplicaciones orientadas a objetos pueden mejorarse a través del uso del paradigma orientado a objetos. En una primera instancia se ha aplicado a programas “escolares”.

Page 5: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Planteamiento del Problema

• Resultados Obtenidos

• Conclusiones/Trabajos Futuros

Agenda

Marco Teórico

Page 6: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• ¿Si su software fuera un edificio, se parecería mas a uno de la izquierda o de la derecha?

Refactoring

Page 7: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Software Hoy en Día•Mito: los

programadores de ahora ya no programan como los de antes.

•Herramientas más fáciles y productivas

•El software es cada día más complejo

Page 8: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

La gran foto

Page 9: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Refactoring (Reestructuración) es modificar el comportamiento interno (generalmente código fuente) sin modificar su comportamiento externo (apariencia, funcionalidad).

• Un cambio al sistema que deja su comportamiento inalterable (sin cambios), pero aumenta alguna cualidad no funcional como simplicidad, flexibilidad, comprensión, … [Beck, 1999]

Definición

Page 10: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• El término se creó como analogía con la factorización de números y polinomios. Por ejemplo, x² − 1 puede ser factorizado como (x + 1)(x − 1), revelando una estructura interna que no era visible previamente (como las dos raíces en -1 y +1)

• El libro de Martin Fowler Refactoring es la referencia clásica (1999).

Definición

Page 11: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Análisis de Inventario

• Reestructuración de Documentos

• Ingeniería Inversa

• Reestructuración de Códigos• Reestructuración de Datos

• Ingeniería directa

Reingeniería

Page 12: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Aplicaciones como el edificio de la derecha padecen de malas prácticas en el desarrollo de software como:

• “Código mutante”• “Diseño roto”• El código es antiguo y muy grande• Falta de planeación y documentación

• ¿El softwre sufre degeneración?• Sí

Uso de Refactoring

Page 13: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Es correcto el siguiente modelo

• ¿Se puede mejorar?¿cómo?

Ejemplo de Refactoring

Page 14: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Si. Subiendo el método a la clase padre

• ¿En qué casos no sería conveniente esta refactorización?

• Cuando los métodos difieren en su implementación. ¿Pero aun así es mala?

Ejemplo de Refactoring

Page 15: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Reducir

• Reusar

• Reciclar

• 80% Desarrollo de Software es para mantenimiento. Por lo tanto se necesita de un código simple, legible y bien diseñado para que en un futuro pueda ser extensible.

Software Sustentable

Page 16: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Par Problema-Solución. Mejores prácticas.

• Patrón Singletón• Problema: se admite exactamente una

instancia de una clase. Los objetos necesitan un único punto de acceso global.

• Solución: Defina un método estático de la clase que devuelva el Singleton

Patrón de Diseño

Page 17: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Singleton

Page 18: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

public class Singleton { private static Singleton INSTANCE =

null; private Singleton() {} private synchronized static void

createInstance() { if (INSTANCE == null){ INSTANCE = new Singleton(); } }

Singleton

Page 19: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Patrón de Diseño de un Menú

Page 20: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

¿Qué hay de malo en esto?

Page 21: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Antipatrón BLOB

Page 22: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Antipatrón BLOB

Page 23: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Algunas ideas sobre que reestructuraBad Smells

BAD SMELL REFACTORING PROPUESTO

CODIGO DUPLICADO EXTRAER EL MÉTODOSUBIR VARIABLESSUSTITUIR EL ALGORITMO

MÉTODOS LARGOS EXTRAER EL MÉTODOINTRODUCIR OBJETOS COMO PARÁMETROSREEMPLAZAR EL MÉTODO CON UN OBJETO MÉTODO

CLASES GRANDES EXTRAER CLASESEXTRAER SUBCLASES

CARACTERÍSTICA DE LA “ENVIDIA” MOVER MÉTODO

CLASES “PEREZOSAS” COLAPSAR JERARQUÍAS

Page 24: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Patrón MVC

Page 25: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Aspectos• AOP fue creado por Gregor Kickzales en

Palo Alto Research Center en 1996.

• “An Aspect is a modular unit that is spreand in another functional units. The aspects exist in the design stage as in the implementación stage…”

• Un aspecto es un ladrillo de software tal como en su momento fueron las subrutinas, objetos, servicios, etc.

Page 26: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Aspectos• Encapsulan ”cross-cutting concern”

• Promueven la separación de elementos entre mezclados para el reuso.

• En general los objetos permiten el reuso con mecanismos como la herencia. El detalle es que se da un todo o nada. Si una clase sólo ocupa una funcionalidad de otra clase tendría que heredar todo.

Page 27: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Problema del POO

Own behavior Own behavior

Persistence

Trace

……..

Own Behavior Owbn Behavior

Persistence Trace

Class A Class B

Class A Class B

Classes

Aspects

Page 28: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Estructura de un Programa

Page 29: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Comiplación de Aspectos

... Lenguaje base

Lenguaje de aspectos 1

Lenguaje de aspectos N

... TEJEDOR (WEAVER)

EJECUTABLE

PROGRAMA DE ASPECTOS N

PROGRAMA DE ASPECTOS 1

PROGRAMA DE COMPONENTES

Page 30: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Ejemplo

class Book {…..<all things about book><error handling>…}

class Partner {…..<all things about Partner><error handling><access controlling>}

class Rent {…..

<all things about Rent><error handling><access controlling>

}

Page 31: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

class BookStore { private Book [] books ; private Partner [] partners;  public BookStore() { … public void load( Partner p, Book b) { if validControlAccess() then{ // code of the method } else{ throwException(); } }

public void addPartner(Partner p){ if validContolAccess() then{ // code of the method } else{ throwException(); } }// the rest of the class methods}

Access ControlAccess Control

Ejemplo

Page 32: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Definición de Aspectos

Aspect Control {

JoinPoint securityOperations = call s BookStore.loan & calls BookStore.addPartner& ...

Before securityOperations: {if !=(validControlAcces()) then{ throwsExcepcion(); }

}

Page 33: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Herramientas• Lenguajes para porgramar aspectos

• AspectJ• AspectC++ • AspectS• CAESAR.• Weave.NET• AspectC

Page 34: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Hello World con Aspectospackage mx.edu.itmorelia.aspects;public class HW {

private String message; public HW() {

this.message = “Hello World";}public void setMessge(String M){

this.menssage = M;}public String getMessage(){

return this.message;}public void showMessage(){

System.out.println(this.message);}

}

Page 35: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

package mx.edu.itmorelia.aspects;

public class HelloWorld {public static void main(String[] args) {

HW H; H= new HW();H.showMenssage();

}}

Hello World con Aspectos

Page 36: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

package mx.edu.itmorelia.aspects;

public aspect Aspect {pointcut messagesToPrint() : call (void HW.showMessage());

before(): messagesToPrint(){ System.out.println(“Hi everybody!"); }after(): messagesToPrint(){ System.out.println(“Chao everybody!"); } }

Hello World con Aspects

Page 37: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

37

Tipos de Advices• ¿Qué hace el siguiente código?

• pointcut setXY(FigureElement fe, int x, int y): call(void FigureElement.setXY(int, int)) && target(fe) && args(x, y);

• after(FigureElement fe, int x, int y) returning: setXY(fe, x, y) { System.out.println(fe + " moved to (" + x + ", " + y + ").");}

Page 38: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Problema a Resolver

HistoryUpdating

Display

*

2Point

getX()getY()setX(int)setY(int)moveBy(int, int)

Line

getP1()getP2()setP1(Point)setP2(Point)moveBy(int, int)

Figure

makePoint(..)makeLine(..)

FigureElement

moveBy(int, int)

Page 39: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• ¿Qué otros aspectos encontramos?Interfaz vs Clase Abstracta

Page 40: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Identificación de Aspectos

Uso de Tarjetas CRC

Page 41: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Planteamiento del Problema

• Resultados Obtenidos

• Conclusiones/Trabajos Futuros

Agenda

Marco Teórico

Page 42: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Planteamiento del Problema

• Marco Teórico

• Conclusiones/Trabajos Futuros

Agenda

Resultados Obtenidos

Page 43: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Resultados• Se escogió una muestra de 17 alumnos

cada uno de ellos con 5 programas de por lo menos 250 LOC (85 programas en total) diferentes.

• Sólo 14 programas rebasaron la barrera de los 1,000 LOC.

• Se observó que 31 programas como tal no tenían manejo de aspectos pero que podrían ser aspectizables con nuevos comportamientos.

Page 44: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Resultados• De los 54 programas aspectizables se

encontraron que 47 manejaban logging, 29 manejo de errores, 22 manejo de sesiones, 15 persistencia.

• Aspectos como manejo de memoria y seguridad fueron poco manejados 4 y 2.

• La identificación de aspectos no fue realmente difícil pero sí su conversión ya que en promedio por cada aspecto se invirtieron en promedio 1:55 por cada aspecto encontrado.

Page 45: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Planteamiento del Problema

• Marco Teórico

• Resultados Obtenidos

Agenda

Conclusiones/Trabajos Futuros

Page 46: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Conclusiones• Realmente nuestras aplicaciones están

mal diseñadas. Se utiliza POO pero sin sus ventajas.

• Los aspectos no son realmente algo nuevo bajo el sol y para cuestiones repetitivas pueden ayudar bastante.

• Los aspectos sólo sirven para determinado tipos de elementos entre cruzados.

Page 47: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Trabajo Futuro• Realización de un estudio amplio de

aplicaciones a nivel profesional. Ya que a nivel estudiantil son aplicaciones muy controladas.

• Determinar tiempos promedios de análisis y de refactoring hacia aspectos de cada aplicación.

• Hasta el momento sólo empresas grandes manejan aspectos en proyectos

Page 48: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Calidad del Software en México• Roger S. Pressman, Ingeniería de software

un enfoque práctico.Ed. McGraw Hill.•  • Piattini M.G. y F.O, Calidad en el

desarrollo y mantenimiento del software. Ed. RAMA.

•  • Fowler, M. (1999), Refactoring, Adison-

Wesley.

Referencias

Page 49: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

• Sanchez, M., (2009), Material del Curso de Reestructuración de Códigos, Instituto Tecnológico de Morelia.

• Vidal S., et al. (2009), Santiago Proceso Iterativo para la Refactorización de Aspectos, Cuarto Congreso Colombiano de Computación 2009

• Mejía, P. (2008), Programación Orientada a Aspectos, CINVESTAV, México.

Referencias

Page 50: Estudio sobre Refactoring de Aplicaciones con Paradigma Orientado a Objetos hacia Paradigma Orientado a Aspectos M.C. Juan Carlos Olivares Rojas UMSNH,

Dudas