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

Slides:



Advertisements
Presentaciones similares
MODELOS ORIENTADOS A OBJETOS
Advertisements

Complejidad Computacional
Complejidad Computacional
Curso de java básico (scjp)
FACHADA COMPOSITOR MEMENTO
POLIMORFISMO "una interfaz, múltiples métodos".
Lenguaje de programación Java
Pruebas de Unidad y Refactorización
Resolución de Problemas Algoritmos y Programación
Patrones de Diseño GEYFFER ALEXANDER ACOSTA CRISTHIAN DOUGLAS CASTRO
Introducción 1 Puntos Clave –La orientación a objetos representa un cambio radical en los métodos tradicionales de creación de software –Los métodos tradicionales.
Lección 1 Introducción a la POO
POO Santiago, Mayo 2004 TRABAJO DE INVESTIGACIÓN POO Programación Orientada a Objetos CENAFOM Carolina Bravo V. Jaime Jofré B.
UNIVERSIDAD LATINA (UNILA) ENCAPSULACION Y HERENCIA
Programación 1 Introducción
Aplicación del paradigma orientado a objetos
Algoritmos y Estructuras de Datos
PROGRAMACION ORIENTADA
Encapsulamiento y Abstracción
U NIDAD III P ROGRAMACIÓN O RIENTADA A O BJETOS (POO) Facilitadora: Ing. Patricia Gómez.
PROGRAMACIÓN EN JAVA Curso-taller inicial de programación en JAVA Facultad de Estadística e Informática TEMA II.
Modificadores.
UNIVERSIDAD TECNOLÓGICA DE HERMOSILLO T.S.U. EN T.I.C., Área: Sistemas Informáticos Ing. José Padilla Duarte y estudiantes de Sistemas Informáticos Hermosillo,
Abstracción de los datos y Orientación a Objeto Clase 13.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Reingeniería del Software
UNIDAD 2 CLASES Y OBJETOS. CLASE Elementos cabecera y cuerpo de la clase. Cabecera: aporta información fundamental sobre la clase en sí y constituye de.
PROCESO DE DESARROLLO. Introducción Mediante esta presentación se pretende describir el proceso de desarrollo del TALLER I.
Ingeniería de Software Libre para Ambientes Móviles M.C. Juan Carlos Olivares Rojas Pátzcuaro, Michoacán, 29 de abril de 2014.

Programación Orientada a Aspectos (POA)
Programación Orientada a Aspectos
Patrones Creacionales
Ingeniería de Software Orientado a Objetos
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Encapsulamiento.
Técnicas para la obtención de requerimientos
Reestructuración del Código M.C. Juan Carlos Olivares Rojas Marzo 2010.
Software Reengineering Juan Carlos Olivares Rojas MSN:
Lenguajes de Programación Tema 3
Patrones de diseño DECORATOR Mario Rodríguez Martín
Unidad VI Documentación
Software Testing Juan Carlos Olivares Rojas MSN:
Herramientas de polimorfismo y herencia en C++
Refactoring, Reuso y Realidad M.C. Juan Carlos Olivares Rojas Mayo 2011.
PATRON PROTOTYPE Cristina Merino Héctor Carbajo Alicia Arroyo.
Metodología de Programación Ayudantía 5 lelagos.ublog.cl 2009.
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
INSTITUTO TECNOLOGICO DE MINATITLAN ASIGNATURA: FUNDAMENTOS DE PROGRAMACION DOCENTE: JOSE ANGEL TOLEDO ALVAREZ ALUMNA: ALEJANDRA OSORIO ARVISU SEMESTRE:
Herencia. Introducción La idea básica es poder crear clases basadas en clases ya existentes. Cuando heredamos de una clase existente, estamos re-usando.
INTRODUCCIÓN A LA INGENIERÍA DEL SOFTWARE
Estructuras de Datos y Algoritmos Introducción. Texto Requerido: Carrano & Prichard: Data Abstraction and Problem Solving with Java; Walls and Mirrors,
Metodología de la programación
Reuso y Reingeniería M.C. Juan Carlos Olivares Rojas.
Patrones de diseño Grupo 1 Haeberli, Julián Lara, Guisell
CONCEPTOS.
Universidad Tecnológica de Izúcar de Matamoros Programa Educativo: Tecnologías de la Información Asignatura: Base de datos para aplicaciones Tema: Base.
Patrones de Diseño Agustín J. González ElO329.
Acceso a Datos Erick López Ovando Licenciado en Informática.
Programación Orientada a Objetos: CLASES Y OBJETOS
La Programación Orientado a Objetos
Herencias Conceptos básicos i
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
Prof. Manuel B. Sánchez. Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno.
Programación Orientada a Objetos Unidad 5. Los objetos son entidades que combinan estado Contiene toda la información denominados atributos REPASO Cada.
2015-BM5A. Introducción Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos.
PARADIGMA viene del Griego Paradeima = Modelo. Un paradigma es el resultado de los usos, y costumbres, de creencias establecidas de verdades a medias,
Métodos en Java. Estructura de un programa en Java ► La relación con la vida misma la podemos ver en el siguiente comentario: Imaginemos que dos clases.
Programación I Clases. Paradigma POO La programación Orientada a objetos (POO) es una forma programar, más cercana a como expresaríamos las cosas en la.
Introducción Todos los lenguajes de programación son distintos entre si. Sin embargo, pueden ser agrupados según la forma de pensar y estructurar los.
Transcripción de la presentación:

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

Marco Teórico Resultados Obtenidos Conclusiones/Trabajos Futuros Agenda 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].

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”.

Planteamiento del Problema Resultados Obtenidos Conclusiones/Trabajos Futuros Agenda Marco Teórico

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

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

La gran foto

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

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

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

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

Es correcto el siguiente modelo ¿Se puede mejorar?¿cómo? Ejemplo de Refactoring

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

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

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

Singleton

public class Singleton { private static Singleton INSTANCE = null; private Singleton() {} private synchronized static void createInstance() { if (INSTANCE == null){ INSTANCE = new Singleton(); } } Singleton

Patrón de Diseño de un Menú

¿Qué hay de malo en esto?

Antipatrón BLOB

Algunas ideas sobre que reestructura Bad Smells BAD SMELLREFACTORING PROPUESTO CODIGO DUPLICADOEXTRAER EL MÉTODO SUBIR VARIABLES SUSTITUIR EL ALGORITMO MÉTODOS LARGOSEXTRAER EL MÉTODO INTRODUCIR OBJETOS COMO PARÁMETROS REEMPLAZAR EL MÉTODO CON UN OBJETO MÉTODO CLASES GRANDESEXTRAER CLASES EXTRAER SUBCLASES CARACTERÍSTICA DE LA “ENVIDIA”MOVER MÉTODO CLASES “PEREZOSAS”COLAPSAR JERARQUÍAS

Patrón MVC

Aspectos AOP fue creado por Gregor Kickzales en Palo Alto Research Center en “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.

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.

Problema del POO

Estructura de un Programa

Comiplación de Aspectos

Ejemplo class Book { ….. … } class Partner { ….. } class Rent {….. }

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 Control Ejemplo

Definición de Aspectos Aspect Control { JoinPoint securityOperations = call s BookStore.loan & calls BookStore.addPartner&... Before securityOperations: { if !=(validControlAcces()) then{ throwsExcepcion(); } }

Herramientas Lenguajes para porgramar aspectos AspectJ AspectC++ AspectS CAESAR. Weave.NET AspectC

Hello World con Aspectos package 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); }

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

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

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 + ")."); }

Problema a Resolver HistoryUpdating Display * 2 Point 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)

¿Qué otros aspectos encontramos? Interfaz vs Clase Abstracta

Identificación de Aspectos Uso de Tarjetas CRC

Planteamiento del Problema Resultados Obtenidos Conclusiones/Trabajos Futuros Agenda Marco Teórico

Planteamiento del Problema Marco Teórico Conclusiones/Trabajos Futuros Agenda Resultados Obtenidos

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.

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.

Planteamiento del Problema Marco Teórico Resultados Obtenidos Agenda Conclusiones/Trabajos Futuros

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.

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

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

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

Dudas