Programación Orientada A Aspectos:POA

Documentos relacionados
! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

AOD: Una Introducción. (clase 19) Ingeniería de Software II

PROGRAMACIÓN ORIENTADA A ASPECTOS

Conceptos a tratar. Fundamentos de la Programación Orientada a Objetos Ampliación sobre clases y objetos

Facultad de Informática de la Universidad de Murcia PROYECTO INFORMÁTICO. Programación Orientada a Aspectos Una experiencia práctica con AspectJ

Spring AOP Versión 2.x

Java en 2 horas. Rodrigo Santamaría

Comparación entre las Herramientas Aspect J y Javassist para Programación Orientada a Aspectos

Qué es SGBD? Mencionar 4 tipos de SGBD. SGBD de red. Román Gutiérrez Sosa. SGBD jerárquicos. Modelo de datos relacionales.

Modulo 11. Clases y Objetos en Java

Conceptos de Programación Orientada a Objetos

FACULTAD DE ECONOMIA Y ADMINISTRACION DEPARTAMENTO DE CIENCIAS DE LA COMPUTACION CÁTEDRA PROGRAMACION GENERAL. Trabajo Práctico Nº 4

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Utilización de programación orientada a aspectos en aplicaciones enterprise

Java en 3 horas. Ampliación de Sistemas Operativos. Rodrigo Santamaría

Cada enfoque tiene sus ventajas y desventajas Cada uno es más apropiado para ciertas cosas

Derechos de Acceso: COMPOSICION

Programación Orientada a Aspectos

PROGRAMACION ORIENTADA A OBJETOS EN C++

INTRODUCCION A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Bases de datos 1. Teórico: Introducción

ARQUITECTURAS DE SOFTWARE

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

20483 Programación en C#

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Contenido. 1. El proceso 2. Los modelos 3. Los diagramas 4. Ejemplo

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Programación Orientada a Objetos. Resumen de Temas Unidad 3: Constructores y destructores

Lenguaje de Programación

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Tema 2 Introducción a la Programación en C.

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

INTRODUCCION A LA PROGRAMACION EN JAVA

HERENCIA Y TIPOS. Articulo. Video Audio Altavoces. Amplificador

ESET Secure Authentication

Arquitectura de Manejadores de Base de Datos

Capítulos 2 y 5: Modelación con UML y Modelo Objeto

Programación orientada a objetos en PHP. Lic. Nancy Michelle Torres Villanueva

Arquitecturas cliente/servidor

Desarrollo Software Gran Escala

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

Prueba N o 1. Programación II

RESUMEN DE LAS DIAPOSITIVAS DE BASE DE DATOS 1

Fundamentos Programación Orientada a Objetos ( POO ) - Parte I Desarrollo de Software

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

PROGRAMACIÓN EN C#.NET Programación Orientada a Objetos en C# Ing. Bruno López Takeyas

Construcciones del Lenguaje Java

PATRONES DE DISEÑO DE CREACIÓN. Abstract Factory Builder Factory Method Prototype

Guía práctica de estudio 04: Clases y objetos

Programación orientada a objetos. Resumen de Temas Unidad 5: Herencia

Ejercicio 2 Hola Mundo con Spring Framework Curso de Spring Framework

Introducción al lenguaje Java

Agenda..NET C# Laboratorio #1

Tema 7.- Fundamentos de la Programación Orientada a Objetos

Curso de Java POO: Programación orientada a objetos

1

Definición. Mónica E. García García Feb 07

Introducción a la Orientación a Objetos

Cuales son los 6 lenguajes de programacion mas usados actualmente. Cuales son los 6 lenguajes de programación mas usados actualmente.

Utilización de programación orientada a aspectos en aplicaciones enterprise

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Elementos Diagramas de Clases Clase:

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Programación y Algoritmia

Tema 7: Polimorfismo. Índice

Programación Orientada a Objetos en Java

Tutorial básico del entorno de desarrollo Eclipse.

PROGRAMA DE CURSO. Metodologías de Diseño y Programación. Nombre en Inglés. Design and Programming Methodologies.

Unidad I. Introducción al Lenguaje Java. Ing. José Luis Llamas Cárdenas

Programación C++ (1 Parte) Dr. Oldemar Rodríguez Rojas Escuela De Informática Universidad Nacional

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Programación con Visual C#

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Relación entre clases. Ejemplo de Clase: Punto !

Introducción a la programación orientada a objetos

Tema 4. Excepciones en Java

Especificación de Uso. Servicios Web Externos API Servicio Licencias Ed. Superior V-0.1

Estructuras de Datos Clase 1 - Introducción

INGENIERÍA DEL SOFTWARE I Práctica 5 Modelado de Diseño

Estructura de un programa en Java

Las clases están compuestas por un conjunto de miembros. (datos y funciones) también se conocen como (atributos y métodos)

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Pruebas de escritorio

Conexión de Reglas de Negocios con Aspectos: estrategias y herramienta

Nombres, Ligaduras, Chequeo de Tipos y Alcance. Luis Garreta (Basados en el libro de Robert Sebesta)

Servicios Web. Andrés Pastorini. TRIA Tecnólogo Informático

Programación páginas web con PHP

Transcripción:

Programación Orientada A Aspectos:POA Ejemplos con AspectJ con eclipse Carlos A. Escobar González. cescobargonzalez@gmail.com

CONTENIDO Introducción. Programación orientada a aspectos (POA). Conceptos básicos Lenguajes de Aspectos AspectJ

INTRODUCCIÓN Técnicas de programación imperativa Código donde no existía separación de conceptos, datos y funcionalidad se mezclaban sin una línea divisoria clara. Funciones y datos entremezclados. Etapa código spaghetti Software= Datos(formas) + Funciones(colores)

INTRODUCCIÓN Programación Funcional Luego se aplicó la llamada descomposición funcional, divide y vencerás, identificando partes como funciones que definen en el dominio del problema. Ventaja: fácil integrar funciones. Desventajas: datos compartidos, y datos esparcidos por todo el código. Software= Datos(formas) + Funciones(colores)

INTRODUCCIÓN Programación OO Principio de descomposición, se ajusta mejor a problemas del dominio real. Ventaja: fácil integrar nuevos datos. Desventajas: Funciones esparcidas por todo el código. Software= Datos(formas) + Funciones(colores)

INTRODUCCIÓN Separación de Incumbencias(separation of concerns) Incumbencias: diferentes temas, asuntos o aspectos de los que es necesario ocuparse para resolver un problema determinado. Ejemplos: La función específica de la aplicación, persistencia, distribución, replicación, sincronización, logging, autenticación, seguridad, entre otros. Objetivo: calidad de Software (adaptabilidad, fácil mantenimiento, reusabilidad y extensibilidad)

INTRODUCCIÓN Incumbencias Transversales(crosscuting concerns) Conceptos diseminados en el código atravesando partes del sistema no relacionados en el modelo. Ejemplos: Logging o registro de la actividad de una aplicación, acceso a base de datos, temas relacionados con la seguridad, concurrencia, etc.

INTRODUCCIÓN Logging en apache tomcat(no es modular) Líneas rojas: código que maneja Logging No está en un solo lugar No siempre en número pequeño de lugares

INTRODUCCIÓN Problemas de Diseño código disperso (scattered code) Un mismo servicio es invocado de manera similar desde muchas partes del programa código enmarañado (tangled code). Una misma operación tiene que acceder a varios servicios (logging, locking, transporte, presentación, autenticación, seguridad, etc), además de cumplir con su función específica.

INTRODUCCIÓN Una Solución POA. Código disperso y enredado Aspectos

PROGRAMACIÓN ORIENTADA A ASPECTOS Programación Orientada a Aspectos (POA) es un paradigma cuya intención es permitir una adecuada modularización de las aplicaciones, posibilitando mejor separación de incumbencias. Separa componentes de aspectos creando un mecanismo para abstraerlos y componerlos para formar todo el sistema. AOP, Aspect-Oriented Programming o AOSD, por Aspect-Oriented Software Development Introducido por colaboración de: Cristina Lopes y Karl J. Lieberherr con Gregor Kiczales y su grupo

PROGRAMACIÓN ORIENTADA A ASPECTOS Un componente es aquella propiedad que se puede encapsular claramente en un procedimiento(un objeto, un método, un API), mientras que un aspecto no se puede encapsular en un procedimiento con los lenguajes tradicionales. Descomposición en Aspectos Software= Datos(formas) + Funciones(colores)

PROGRAMACIÓN ORIENTADA A ASPECTOS ASPECTO: Cada funcionalidad común se encapsulará en una entidad (Aspecto). Unidad modular del programa que aparece en otras unidades funcionales del programa (G. Kiczales). Una incumbencia transversal modularizada. Los aspectos son propiedades que afectan al rendimiento o la semántica de los componentes. Ejemplos: los patrones de acceso a memoria, la sincronización de procesos concurrentes, el manejo de errores, etc.

PROGRAMACIÓN ORIENTADA A ASPECTOS Fundamentos de la POA Un lenguaje para definir la funcionalidad básica, conocido como lenguaje base. El mismo puede ser un lenguaje imperativo, o no. Por ejemplo C++, Java, PHP, Python, Perl, etc. Uno o varios lenguajes de aspectos, para especificar el comportamiento de los distintos aspectos. Algunos ejemplos son AspectJ, AspectC, phpaspect, Aspyct, Aspect, Cool, RIDL, etc. Un tejedor de aspectos, del inglés weaver, que se encarga de combinar los lenguajes (componentes y aspectos) en tiempo de ejecución o de compilación.

PROGRAMACIÓN ORIENTADA A ASPECTOS Estructura de un Programa Orientado a Aspectos

PROGRAMACIÓN ORIENTADA A ASPECTOS Programa Lenguaje Programa de componentes Programa de aspectos...... Programa de aspectos Lenguaje Lenguaje Lenguaje base de aspectos de aspectos Compilador/Intérprete Tejedor (Weaver) Ejecutable Ejecutable Estructura tradicional Estructura con aspectos

PROGRAMACIÓN ORIENTADA A ASPECTOS Programa Base TEJEDOR Sistema Final aspectos

PROGRAMACIÓN ORIENTADA A ASPECTOS class Framew orks sistema base Sistema aspectual «merge» «flow» BD

PROGRAMACIÓN ORIENTADA A ASPECTOS Conceptos básicos Aspect (aspecto) es la funcionalidad que se cruza a lo largo de la aplicación y que se va a implementar de forma modular y separada del resto del sistema. Joint point (punto de enlace) es el punto de ejecución dentro del sistema donde un aspecto puede ser conectado. Puede ser una llamada a un método, el lanzamiento de una excepción o la modificación de un campo. Pointcut (punto de corte) define los Advice (consejos) que se aplicarán a cada punto de enlace.

PROGRAMACIÓN ORIENTADA A ASPECTOS Conceptos básicos Advice (consejo) es la implementación del aspecto. Introducciones (introduction) permiten cambiar la estructura de clases de un programa agregando o extendiendo interfaces y clases con nuevos atributos, constructores o métodos

LENGUAJES DE ASPECTOS Lenguajes de aspectos de dominio específico: soportan uno o más de los aspectos mencionados en secciones anteriores (distribución, coordinación, manejo de errores, etc), pero no pueden soportar otros aspectos distintos de aquellos para los que fueron diseñados. Restringen el lenguaje base. Ejemplo: COOL (aspectos de sincronización) y RIDL (aspectos de distribución) define qué datos y cómo éstos son enviados en invocaciones de métodos entre distintos ambientes de ejecución

LENGUAJES DE ASPECTOS Lenguajes de aspectos de dominio general: diseñados para ser utilizados con cualquier clase de aspecto, no solamente con aspectos específicos. Por lo tanto, no pueden imponer restricciones en el lenguaje base. Ejemplo: AspectJ que utiliza Java como Base. Aspect (http://search.cpan.org/perldoc?aspect) Perl phpaspect (http://phpaspect.org/) Php Aspyct AOP (http://aspyct.sourceforge.net/) Python SpringFramework 2.5 (http://static.springframework.org/spring/docs/2.5.x/reference/aop.html) AspectC, AspectC++, AspectS de Squeak/Smalltalk

PROGRAMACIÓN ORIENTADA A ASPECTOS Ventajas: Código menos enmarañado, más natural y más reducido. Mayor facilidad para razonar sobre los conceptos, ya que están separados y tienen una dependencia mínima. Facilidad en depurar y modificar el código. Modificaciones grandes en la definición de una materia tenga un impacto mínimo en las otras. Código más reusable y que se puede acoplar y desacoplar cuando sea necesario.

PROGRAMACIÓN ORIENTADA A ASPECTOS Desventajas: El diseño de los puntos de enlace entre los aspectos es más complejo. Se debe tener en cuenta el análisis de nuevas características dentro del desarrollo de sistemas. Surgen nuevos problemas de choque entre el lenguaje base y el lenguaje funcional. Pueden existir problemas de herencia de un aspecto a otro.

ASPECTJ (I) AspectJ es una extensión orientada a aspectos de Java que permite el diseño modular de incumbencias transversales. El proyecto AspectJ Development Tools desarrollado por Eclipse ofrece una herramienta basada en el apoyo a DSOA con AspectJ: AJDT.

aspect MyCrosscuttingConcern{ } //Attributes //Methods //Poincuts //Advices ANATOMÍA DE UN ASPECTO

JOINPOINTS (I) Los puntos de unión son puntos en la ejecución de un programa. Es importante recalcar que los puntos de unión no son posiciones en el código fuente (ni dentro de una instrucción, ni entre instrucciones), sino en la ejecución del programa Método de ejecución Método de llamado Construcción de objetos

JOINPOINTS (II) Método de ejecución El joinpoint por método de ejecución identifica ciertas ejecuciones de métodos en el programa. La firma es la siguiente: execution(method_modifiers ClassName.MethodName(ParametersNumber))

JOINPOINTS (III) Método de llamado El joinpoint por método de llamado identifica ciertos llamados de métodos en el programa. La diferencia con el joinpoint por método de ejecución es el contexto: este joinpoint accede al contexto del llamado y no mira el contexto de ejecución La firma es la siguiente: call(method_modifiers ClassName.MethodName(ParametersNumber))

JOINPOINTS (IV) Joinpoint de construcción Este joinpoint identifica las construcciones de objetos en el programa. La firma puede ser como sigue: call(new(classname (ParametersNumber))) execution(new(classname (ParametersNumber)))

POINTCUTS (I) Basados en la enumeración explícita de un conjunto de firmas de métodos. Por ejemplo: call(void MiClase.metodoX(int)) Elige cada punto de enlace que es un llamado (call) al método con la firma void MiClase.metodoX(int)- es decir, el método void metodox de MiClase con un único parámetroint.

POINTCUTS (II) Un pointcut puede componerse de otros pointcuts con and, or, y not (&&,, y!). Por ejemplo: call(void MiClase.metodoX(int)) Call(void MiClase.metodoY(int)) Elige cada punto de unión que es un llamado al método metodox(int)o al método metodoy de MiClase con un único parámetro int.

POINTCUTS (III) Los pointcuts pueden identificar los puntos de enlace de muchos tipos diferentes. Por ejemplo: call(void MiClase.metodoX(int)) call(void MiClase.metodoY(int)) call(void MiOtraClase.metodoXY(int,int)) call(void TuClase.metodoZ(MiClase)) call(void TuClase.metodoW(MiClase)); selecciona cada punto de enlace que es una llamada a uno de los cinco métodos.

POINTCUTS (IV) En el ejemplo el pointcut mi_pointcut captura todos los puntos de enlace. pointcut mi_pointcut(): call(void MiClase.metodoX(int)) call(void MiClase.metodoY(int)) call(void MiOtraClase.metodoXY(int,int)) call(void TuClase.metodoZ(MiClase)) call(void TuClase.metodoW(MiClase));

POINTCUTS (V) Property-based crosscutting AspectJ también proporciona mecanismos que permiten especificar un pointcut en términos de propiedades de métodos distintos de su nombre exacto; usando un comodín (*) en ciertos campos del nombre del método.

POINTCUTS (VI) Por ejemplo: call(void MiClase.metodo*(..)) Selecciona cada punto de unión que es un llamado a un método sin valor de retorno definido en MiClase cuyo nombre inicia con "metodo" sin importar los parámetros del método. Implica el llamado de los métodosmetodox ymetodoy

ADVICE (I) Para implementar efectivamente el comportamiento transversal, usamos advice. Es el comportamiento adicional que se añade a la estructura de ejecución; permite definir qué hacer, es un mecanismo similar a un método de una clase. Reúne un pointcut (para elegir puntos de enlace) y un cuerpo de código (para que se ejecute en cada uno de los puntos de enlace).

ADVICE (II) Before advice Se ejecuta antes de que se alcance un punto de enlace; before(): mi_pointcut() { // cuerpo adicional }

ADVICE (III) After advice en un punto de enlace particular se ejecuta después de que el programa proceda con ese punto de enlace. after(): mi_pointcut() { } // cuerpo adicional

package ejemplo; public class HW { private String mensaje; public HW() { this.mensaje = Hello World ; } public void setmensaje(string M) { this.mensaje = M; } public String getmensaje() { return this.mensaje; } public void showmensaje() { System.out.println(this.mensaje); } } EJEMPLO public class HelloWorld { public static void main(string[] args) { HW H; H= new HW(); H.showMensaje(); } } public aspect Aspecto { pointcut mensajesaimprimir() : call (void HW.showMensaje()); before(): mensajesaimprimir() { System.out.println( Hola a todos"); } after(): mensajesaimprimir() {System.out.println( Chao a todos"); } }

JAVA BASE EJEMPLO

COOL

ASPECTJ EJEMPLO

Conclusión Se trata de permitir que los programadores escriban programas que, en todo lo que sea posible, se parezcan a su diseño Gregor Kiczales

RECURSOS +Info sobre POA: http://www.aosd.net/ http://www.eclipse.org/aspectj/ Eclipse: http://www.eclipse.org/ AJDT: http://www.eclipse.org/ajdt/

APLAUSOS G R A C I A S