Programacion Orientada a Aspectos con...

51
Introducci´ on AOP AspectJ Aplicaci´ on de los aspectos Programaci´ on Orientada a Aspectos con AspectJ Cursillos Julio 2007 Universidad de Deusto 27 de julio de 2007 Xabier Laiseca Manso e-ghost (http://e-ghost.deusto.es) MoreLab (http://www.morelab.deusto.es) Programaci´ on Orientada a Aspectos con AspectJ

Transcript of Programacion Orientada a Aspectos con...

Page 1: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

Programacion Orientada a Aspectos con AspectJ

Cursillos Julio 2007Universidad de Deusto

27 de julio de 2007

Xabier Laiseca Mansoe-ghost (http://e-ghost.deusto.es)

MoreLab (http://www.morelab.deusto.es)

Programacion Orientada a Aspectos con AspectJ

Page 2: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

Situacion actual

Situacion actual

Metodologıa mas utilizada es la OOP

Permite disenar jerarquıas de objetosVentaja: Facilita el desarrollo de servicios verticalesProblema: Acceso a los servicios horizontales

Dispersion de codigo: Llamadas a distinta funcionalidadrepartidas y repetidas a lo largo de todo nuestro codigo.Por ejemplo: autenticacion y autorizacion, logging, etc.

Programacion Orientada a Aspectos con AspectJ

Page 3: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

Situacion actual

Solucion

Programacion orientada a aspectos (AOP)

Programacion Orientada a Aspectos con AspectJ

Page 4: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionImplementaciones

Introduccion a la AOP

Definicion: Paradigma de programacion que persigue lamodularizacion fomentando la separacion de conceptos, enespecial los que afectan a otros conceptos de la aplicacion.

Estilo de programacionFactoriza conceptos comunes de la aplicacion (crosscuttingconcerns). Es horizontalSoluciona la dispersion de codigo

Importante: ¡¡La AOP no sustituye a la OOP, lacomplementa!!

Se puede aplicar a otro tipo de programacion

Programacion Orientada a Aspectos con AspectJ

Page 5: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionImplementaciones

Definiciones

Aspecto Funcionalidad que quieres aplicar a otras partes delcodigo (logging, gestion de transacciones, etc.)

Advice Cada una de las cosas que puede hacer un aspecto(Codigo a ejecutar)

JoinPoint Punto del programa en el que se ejecutara un advice(antes de un metodo, despues del contructor, etc.)

Pointcut Conjunto de JoinPoints (un conjunto de metodosdonde se ejecutara un aspecto).

Target El objeto sobre el que se aplicara el/los aspecto/s.

Introduction Manipular un target para anadirle codigo,implementacion de interfaces, etc.

Programacion Orientada a Aspectos con AspectJ

Page 6: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionImplementaciones

Tipos de advices

Before Justo antes del JoinPoint.

After returning Despues de que la ejecucion de JoinPoint termine’normalmente’ (sin lanzar excepcion) se ejecuta eladvice.

After throwing Si el JoinPoint lanza una excepcion se ejecuta eladvice.

After Despues de que termine un JoinPoint, hayaexcepcion o no.

Around Envuelve la ejecucion del JoinPoint, pudiendoejecutar codigo antes y despues de su ejecucion,pudiendo incluso evitar la ejecucion del JoinPoint.

Programacion Orientada a Aspectos con AspectJ

Page 7: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionImplementaciones

Weaver

Hemos separado los conceptos, ¿pero como los unimos?

Mediante preprocesador: complica el desarrolloMediante postprocesador binario: complica el desarrolloCompilador especifico para AOP: AspectJDurante la carga de clases: lentoEn tiempo de ejecucion: lento

Programacion Orientada a Aspectos con AspectJ

Page 8: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionImplementaciones

Weaver

Programacion Orientada a Aspectos con AspectJ

Page 9: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionImplementaciones

Implementaciones

Java: AspectJ, Jakarta Hivemind, JBoss AOP, Spring AOP, ...

Mono/.Net: Aspect#, Aspect.Net, Spring.Net AOP, ...

C++: AspectC++, FeatureC++, ...

C: AspectC, Aspicere2, ...

Tambien existen para otros lenguajes: Python, Cobol, Lisp,Ruby, Perl, ...

Programacion Orientada a Aspectos con AspectJ

Page 10: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Software a utilizar

Eclipse (http://www.eclipse.org)

AspectJ (http://www.eclipse.org/aspectj/)

AspectJ Development Tools (http://www.eclipse.org/ajdt/)

Programacion Orientada a Aspectos con AspectJ

Page 11: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Introduccion a AspectJ

Dos formas:Mediante anotaciones (disponible a partir de AspectJ 5)

Para Java 5.0 o superiorUtiliza unicamente el lenguaje Java

Mediante sintaxis adicional (disponible en todas las versiones)

Para cualquier version de JavaAnade nueva sintaxis

Programacion Orientada a Aspectos con AspectJ

Page 12: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Definir un aspecto

Con anotaciones:

1 import org.aspectj.lang.annotation.Aspect;2

3 @Aspect4 public class Aspecto5 { ... }

Con sintaxis adicional

1 public aspect Aspecto2 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 13: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Definir un pointcut con anotaciones (I)

1 @<advice-specification>("<pointcut-kind>(2 [<access-specifier>] <return-type>3 <class-name>.<method-name>({<arg-type>}) )")4

5 public void metodo()6 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 14: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Definir un pointcut con anotaciones (II)

advice-specification puede tener los valores before, after, ...

pointcut-kind tipo del pointcut. Puede ser execution, call,staticinitialization, get, ...

access-specifier restriccion de acceso del metodo sobre el que se vaaplicar el advice. Puede ser public, protected, private,static, ... o combinaciones ’logicas’.

return-type valor de retorno del metodo sobre el que se va aplicarel advice

Programacion Orientada a Aspectos con AspectJ

Page 15: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Definir un pointcut con anotaciones (III)

class-name nombre completo (paquete + nombre) de la clasesobre el que se va aplicar el advice

method-name nombre del metodo sobre el que se va aplicar eladvice, en caso de ser un constructor sedebera utilizar la palabra ’new’

arg-type tipo de argumento del metodo sobre el que se vaaplicar el advice

Programacion Orientada a Aspectos con AspectJ

Page 16: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Definir un pointcut con anotaciones (IV)

Otra manera de hacerlo:

1 @Pointcut("<pointcut-kind>(2 [<access-specifier>] <return-type>3 <class-name>.<method-name>({<arg-type>}) )")4 public void <pointcut-name>()5 { ... }6

7 @<advice-specification>("<pointcut-name>()")8 public void metodo()9 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 17: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejemplo anotaciones (I)

1 @Before("execution(public void2 paquete.clase.metodo(String))")3

4 public void adviceEjemplo()5 {6 System.out.println("Antes del metodo");7 }

Programacion Orientada a Aspectos con AspectJ

Page 18: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejemplo anotaciones (II)

1 @Pointcut("execution(public void2 paquete.clase.metodo(String))")3 public void pointcutEjemplo() {}4

5 @Before("pointcutEjemplo()")6 public void adviceEjemplo()7 {8 System.out.println("Antes del metodo");9 }

Programacion Orientada a Aspectos con AspectJ

Page 19: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Definir un pointcut con sintaxis

1 pointcut <pointcut-name>(): <pointcut-kind>2 ( [<access-specifier>] <return-type>3 <class-name>.<method-name>({<arg-type>}) );4

5 <advice-specification>(): <pointcut-name>()6 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 20: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejemplo sintaxis

1 pointcut pointcutEjemplo(): execution2 (public void paquete.clase.metodo());3

4 before(): pointcutEjemplo()5 {6 System.out.println("Antes del metodo");7 }

Programacion Orientada a Aspectos con AspectJ

Page 21: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio hola mundo

Crear una clase con main y otro metodo

Crear un aspecto con un advice que imprima por pantalla’Hola Mundo de los Aspectos!!!’

Aplicar el aspecto al ’otro metodo’ de la clase

Serıa interesante hacerlo de las tres formas

Programacion Orientada a Aspectos con AspectJ

Page 22: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio advice specifications

Probar las diferentes posiblidades de los advices:

@Before@After@AfterReturning@AfterThrowing@Around

Utilizar el ejercicio de los dibujos animados (1)

Programacion Orientada a Aspectos con AspectJ

Page 23: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Operadores

Se aplican sobre JoinPoints

Unarios

Not (!)

Binarios

And (&&)Or (||)

Con lo que hemos visto hasta el momento solo es interesanteel ’or’, pero mas adelante veremos cuando utilizar el resto

Programacion Orientada a Aspectos con AspectJ

Page 24: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio operadores

Probar el operador ’or’ para aplicar un advice a diferentesmetodos

Utilizar el ejercicio de los dibujos animados (1)

Recomendacion: Crear un proyecto nuevo

Programacion Orientada a Aspectos con AspectJ

Page 25: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcut kinds (I)

execution Anade el advice dentro del metodo/constructor sobreel que se aplicaexecution(< patron − metodo >)Ejemplo: execution(public voidpaquete.clase.metodo(String))

call Anade el advice antes, despues, ... de la llamada almetodo/constructor sobre el que se aplicacall(< patron − metodo >)Ejemplo: call(public voidpaquete.clase.metodo(String))

Programacion Orientada a Aspectos con AspectJ

Page 26: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcut kinds (II)

staticinitialization Anade el advice antes, despues, ... delconstructor de una clase estaticastaticinitialization(< clase >)Ejemplo: staticinitialization(paquete.clase)

get Anade el advice antes, despues, ... de que se lea elcontenido del atributo sobre el que se aplicaget(< patron − atributo >)Ejemplo: get(String paquete.clase.atributo)

Programacion Orientada a Aspectos con AspectJ

Page 27: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcut kinds (III)

set Anade el advice antes, despues, ... de que se escribael contenido del atributo sobre el que se aplicaset(< patron − atributo >)Ejemplo: set(int paquete.clase.atributo)

handler Representa los join points en donde se captura unaexcepcion del tipo indicado por la expresion. Estacaptura esta siempre especificada por una clausulacatch en Javahandler(< patron − excepcion >)Ejemplo: handler(paquete.excepcion)

Programacion Orientada a Aspectos con AspectJ

Page 28: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcut kinds (III)

initialization Anade el advice antes, despues, ... de la creacion deuna instancia que utilice el constructor indicadoinitialization(< patron − constructor >)Ejemplo: initialization(paquete.clase.new())

preinitialization Anade el advice antes, despues, ... de la creacionde una instancia que utilice el constructor indicadoantes de que el constructor super sea llamadopreinitialization(< patron − constructor >)Ejemplo: preinitialization(paquete.clase.new())

adviceexecution Representa los join points donde se inicia laejecucion de un advice. No requiere argumentosadviceexecution()

Programacion Orientada a Aspectos con AspectJ

Page 29: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts basados en la estructura lexica

Capturan JoinPoints dentro del ambito lexico de un aspecto,clase y/o metodo

Dos tipos:

within: Captura todos los JoinPoints dentro de una clase oaspecto, incluso dentro de sus clases internaswithin(< patron − clase >)withincode: Captura todos los JoinPoints dentro de unmetodo, incluso dentro de sus clases localeswithincode(< patron − metodo >)

Programacion Orientada a Aspectos con AspectJ

Page 30: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio Pointcut kinds

Probar los diferentes Pointcut kinds

Utilizar el ejercicio de los dibujos animados (2)

Homer es un singleton y tiene un constructor estatico(staticinitialization)PersonajeFuturama sobreescribe el constructor por defecto(initialization y preinitialization)

Pistas:

Cuidado con el adviceexecution, si no se restringe su aplicacionse aplicara a sı mismo.En este ejercicio se tienen que utilizar los operadores ’and’ y’not’

Programacion Orientada a Aspectos con AspectJ

Page 31: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts basados en el flujo de control

Capturan JoinPoints en el flujo de contro de un metodo y/oadvice

Dos tipos:

cflow: Captura todos JoinPoints dentro del flujo de control deun metodo, constructor, ... incluyendo la llamadacflow(< pointcut − kind > (...))cflowbelow: Captura todos JoinPoints dentro del flujo decontrol de un metodo, constructor, ... excluyendo la llamadacflowbelow(< pointcut − kind > (...))

Cuidado: Cuando se quieren utilizar pointcuts basados en elflujo de control hay que definir dos JointPoint por lo menos

1 JoinPoint de flujo de control (cflow o cflowbelow)2 JoinPoint para restringir la aplicacion del anterior JoinPoint

Programacion Orientada a Aspectos con AspectJ

Page 32: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio de pointcuts basados en el flujo de control

Crear un Pointcut que se aplique a todos los metodos de lafuncion saludaA de PersonajeSimpsons

Cuidado con que el advice sea aplicado sobre si mismo

Comprobar la diferencia entre cflow y cflowbelow

Crear un Pointcut que se aplique solo a la llamada getNombrede la funcion saludaA de PersonajeSimpsons

Utilizar el ejercicio de los dibujos animados (1)

Recomendacion: Crear un nuevo proyecto

Programacion Orientada a Aspectos con AspectJ

Page 33: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts basados en el objeto de ejecucion (I)

A diferencia de los demas Pointcuts, estos se aplican entiempo de ejecucion.

Se aplican sobre un objeto.

Dos tipos:this: se comprueba si el objeto this de Java es de la claseindicada, en caso de serlo, se aplica el advice. Tambien esutilizado para acceder al objeto ’this’ de Java

Ejemplo comprobacion clase: this(paquete.Clase)Ejemplo acceso ’this’ de Java:

1 @Before("this(instancia) && ...")2

3 public void advice(Object instancia)4 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 34: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts basados en el objeto de ejecucion (II)

Dos tipos (continuacion):target: se comprueba si el objeto sobre el que se va a aplicar eladvice es el indicado. Tambien es utilizado para acceder altarget

Ejemplo comprobacion clase: target(paquete.Clase)Ejemplo acceso target:

1 @Before("target(instancia) && ...")2

3 public void advice(Object instancia)4 { ... }

En este tipo de Pointcut no se pueden utilizar los comodines’*’ y ’..’

El comodın + es innecesario ya que la herencia de Java ’lohace automaticamente’

Programacion Orientada a Aspectos con AspectJ

Page 35: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio Pointcuts basados en el objeto de ejecucion

Probar los pointcuts this y target

Ponerlos como unico JoinPoint y probar como funcionan

Concatenarlos con otro/otros JoinPoints

Utilizar el ejercicio de los dibujos animados (1)

Recomendacion: Crear un nuevo proyecto

Programacion Orientada a Aspectos con AspectJ

Page 36: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts de argumentos (I)

Permiten anadir contexto al advice

Se pueden aplicar a:

Metodos/constructores: Permiten acceder a los parametros delmetodo o constructor

1 @Before("args(arg1) && ...")2

3 public void advice(<tipo> arg1)4 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 37: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts de argumentos (II)

Se pueden aplicar a (continuacion):

Atributos: Permite consultar el nuevo valor que se le va aasignar

1 @Before("args(nuevoValor) && ...")2

3 public void advice(<tipo> nuevoValor)4 { ... }

Excepciones: Permite acceder a la excepcion que ha sidolanzada

1 @Before("args(e) && ...")2

3 public void advice(<excepcion> e)4 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 38: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio pointcuts de argumentos

Utilizar los tres tipos de pointcut

En el del atributo, obtener el valor viejo y el nuevo

Utilizar el ejercicio de los dibujos animados (1)

Recomendacion: Crear un nuevo proyecto

Programacion Orientada a Aspectos con AspectJ

Page 39: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Pointcuts condicionales

Permiten realizar comprobaciones antes de aplicar el advice

Solo hay un tipo:

if: Permite que el pointcut devuelva un ’boolean’. Si este’boolean’ es ’true’ entonces se ejecuta el advice

1 @Pointcut("if() && ...")2 public static boolean ifPointcut()3 { <comprobacion> }4

5 @Before("ifPointcut() && ...")6 public void ifAdvice()7 { ... }

Programacion Orientada a Aspectos con AspectJ

Page 40: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio pointcuts condicionales

Sacar un mensaje por pantalla cuando se intente asignar unnombre vacio ( o null) a un personaje

Sacar por pantalla un mensaje cuando se alguien salude aHomer

Utilizar el ejercicio de los dibujos animados (1)

Recomendacion: Crear un nuevo proyecto

Programacion Orientada a Aspectos con AspectJ

Page 41: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Uso de caracteres comodın

Asterisco (*):Clase: Representa cualquier caracter

cursillo.* : Cualquier clase del paquete ’cursillo’cursillo.*.Coche : Todas las clases llamadas ’Coche’ dentro delos subpaquetes hijo de ’cursillo’

Metodo o constructor: Representa cualquier caracter

cursillo.Alumno.get*(*) : Todos los metodos que empiecen porget y que tengan un parametro de la clase ’cursillo.Alumno’

Atributo: Representa cualquier caracter

cursillo.Alumno.a* : Todos los atributos que empiecen por ’a’de la clase ’cursillo.Alumno’

Programacion Orientada a Aspectos con AspectJ

Page 42: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Uso de caracteres comodın

Dos puntos (..):Paquete: Representa al paquete actual y a todos sussubpaquetes (directos e indirectos)

javax..* : Todas las clases de javax, javax.util, javax.swing, ...,javax.util.logging, ..., javax.swing.tree, ...

Metodo o constructor: Representa un numero variable deparametros

cursillo.Alumno.*(..) : Todos los metodos de la clase’cursillo.Alumno’cursillo.Alumno.*(String, ..) : Todos los metodos que tenganun primer parametro de tipo ’String’ de la clase’cursillo.Alumno’

Programacion Orientada a Aspectos con AspectJ

Page 43: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Uso de caracteres comodın

Operador suma (+):Clase o interfaz: Representa a las clases hijas o queimplementan la clase o interfaz

cursillo.Alumno+ : Todas las clases que extienden oimplementan de ’cursillo.Alumno’

Programacion Orientada a Aspectos con AspectJ

Page 44: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Ejercicio caracteres comodin

Probar los diferentes caracteres comodın

Utilizar el ejercicio de los dibujos animados (1). Aprovechar ...

... la jerarquia de clases

... los diferentes paquetes

... similitudes de nombres (PersonajesSimpsons,PersonajesFuturama)...

Recomendacion: Crear un nuevo proyecto

Programacion Orientada a Aspectos con AspectJ

Page 45: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Static crosscutting (I)

En ocasiones modificar el comportamiento mediante un adviceno es suficiente, es necesario modificar la estructura estaticade la clase

Dos tipos de crosscuting:

Dynamic crosscutting: modifica el comportamiento de laejecucionStatic crosscutting: modifica la estructura de los tipos

Programacion Orientada a Aspectos con AspectJ

Page 46: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Static crosscutting (II)

Se basa en el concepto ’introduction’ anteriormente explicado.Recordatorio:

Manipular un target para anadirle codigo, implementacion deinterfaces, etc

Tres tipos de modificaciones:

Member/method introduction: Permite anadir metodos yatributosModificacion de la jerarquia de clases: Permite implementarinterfaces y extender clasesIntroduccion de errores y warnings en tiempo de compilacion:Permite comprobar si se aplican aspecto no esperados

Programacion Orientada a Aspectos con AspectJ

Page 47: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Static crosscutting (III)

Ejemplo member/method introduction:

1 <access-specifier> <type> <class>.<member-name>;2

3 <access-specifier> <return-type>4 <class>.<method-name>()5 { ... }

access-specifier Puede ser public, protected o privatetype Tipo del atributoclass Clase a la que se le anade el metodo o atributo

member-name Nombre del atributoreturn-type Tipo de retorno del metodo

method-name Nombre del metodo

Programacion Orientada a Aspectos con AspectJ

Page 48: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Static crosscutting (IV)

Ejemplo modificacion de la jerarquia de clases

1 declare parents: <child-type-pattern>2 implements <interface-list>;3

4 declare parents: <child-type-pattern>5 extends [<class> | <interface-list>];

child-type-pattern Patron de clases que van aimplementar/extender otra interfaz/clase

interface-list Lista de interfaces que se quieren implementarclass Clase que se quiere extender

Programacion Orientada a Aspectos con AspectJ

Page 49: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionSintaxis basicaPointcut kindsUso de caracteres comodınStatic crosscutting

Static crosscutting (V)

Ejemplo introduccion de errores y advertencias en tiempo decompilacion

1 declare error: <pointcut> : <message>;2

3 declare warning: <pointcut> : <message>;

pointcut Pointcut en el que, en caso de aplicar un advice,aparecera el error o la advertencia

message Mensaje a mostrar en el error o advertencia

Programacion Orientada a Aspectos con AspectJ

Page 50: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionEjemplos

Introduccion a la aplicacion de aspectos

¿Donde aplicar todo esto?

Logging, tracing y profilingAplicacion de politicasOptimizacion: Pools y cachesPatrones de disenoAutenticacion y autorizacionGestion de transacciones...

Programacion Orientada a Aspectos con AspectJ

Page 51: Programacion Orientada a Aspectos con AspectJe-ghost.deusto.es/docs/2007/cursillos/aop/curso_aop.pdfIntroduccion AOP AspectJ Aplicaci´on de los aspectos Situacion actual Solucion

IntroduccionAOP

AspectJAplicacion de los aspectos

IntroduccionEjemplos

Ejemplos

Logging

Caches

Reglas de negocio

Programacion Orientada a Aspectos con AspectJ