0
Introducci´n
                                 o
                              AOP
                           AspectJ
     ...
Introducci´n
                                         o
                                      AOP
                        ...
Introducci´n
                                        o
                                     AOP
                          ...
Introducci´n
                                        o
                                     AOP     Introduccion
         ...
Introducci´n
                                         o
                                      AOP     Introduccion
       ...
Introducci´n
                                         o
                                      AOP     Introduccion
       ...
Introducci´n
                                       o
                                    AOP     Introduccion
           ...
Introducci´n
                                 o
                              AOP     Introduccion
                       ...
Introducci´n
                                        o
                                     AOP     Introduccion
         ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                          o
                                Introducci´n
    ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                       o
                             Introducci´n
          ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                        o
                              Introducci´n
        ...
Introducci´n
                                                         o
                               Introducci´n
      ...
Introducci´n
                                        o
                                     AOP     Introducci´n
         ...
Introducci´n
                                       o
                                    AOP     Introducci´n
           ...
Upcoming SlideShare
Loading in...5
×

Curso Aop

2,432

Published on

Published in: Technology, Travel
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,432
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
89
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Curso Aop"

  1. 1. Introducci´n o AOP AspectJ Aplicaci´n de los aspectos o Programaci´n Orientada a Aspectos con AspectJ o 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´n Orientada a Aspectos con AspectJ o
  2. 2. Introducci´n o AOP Situaci´n actual o AspectJ Aplicaci´n de los aspectos o Situaci´n actual o Metodolog´ m´s utilizada es la OOP ıa a Permite dise˜ar jerarqu´ de objetos n ıas Ventaja: Facilita el desarrollo de servicios verticales Problema: Acceso a los servicios horizontales Dispersi´n de c´digo: Llamadas a distinta funcionalidad o o repartidas y repetidas a lo largo de todo nuestro c´digo. o Por ejemplo: autenticaci´n y autorizaci´n, logging, etc. o o Programaci´n Orientada a Aspectos con AspectJ o
  3. 3. Introducci´n o AOP Situaci´n actual o AspectJ Aplicaci´n de los aspectos o Soluci´n o Programaci´n orientada a aspectos (AOP) o Programaci´n Orientada a Aspectos con AspectJ o
  4. 4. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Introducci´n a la AOP o Definici´n: Paradigma de programaci´n que persigue la o o modularizaci´n fomentando la separaci´n de conceptos, en o o especial los que afectan a otros conceptos de la aplicaci´n. o Estilo de programaci´n o Factoriza conceptos comunes de la aplicaci´n (crosscutting o concerns). Es horizontal Soluciona la dispersi´n de c´digo o o Importante: ¡¡La AOP no sustituye a la OOP, la complementa!! Se puede aplicar a otro tipo de programaci´n o Programaci´n Orientada a Aspectos con AspectJ o
  5. 5. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Definiciones Aspecto Funcionalidad que quieres aplicar a otras partes del c´digo (logging, gesti´n de transacciones, etc.) o o Advice Cada una de las cosas que puede hacer un aspecto (C´digo a ejecutar) o JoinPoint Punto del programa en el que se ejecutar´ un advice a (antes de un m´todo, despu´s del contructor, etc.) e e Pointcut Conjunto de JoinPoints (un conjunto de m´todos e d´nde se ejecutar´ un aspecto). o a Target El objeto sobre el que se aplicar´ el/los aspecto/s. a Introduction Manipular un target para a˜adirle c´digo, n o implementaci´n de interfaces, etc. o Programaci´n Orientada a Aspectos con AspectJ o
  6. 6. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Tipos de advices Before Justo antes del JoinPoint. After returning Despu´s de que la ejecuci´n de JoinPoint termine e o ’normalmente’ (sin lanzar excepci´n) se ejecuta el o advice. After throwing Si el JoinPoint lanza una excepci´n se ejecuta el o advice. After Despu´s de que termine un JoinPoint, haya e excepci´n o no. o Around Envuelve la ejecuci´n del JoinPoint, pudiendo o ejecutar c´digo antes y despu´s de su ejecuci´n, o e o pudiendo incluso evitar la ejecuci´n del JoinPoint. o Programaci´n Orientada a Aspectos con AspectJ o
  7. 7. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Weaver Hemos separado los conceptos, ¿pero como los unimos? Mediante preprocesador: complica el desarrollo Mediante postprocesador binario: complica el desarrollo Compilador especifico para AOP: AspectJ Durante la carga de clases: lento En tiempo de ejecuci´n: lento o Programaci´n Orientada a Aspectos con AspectJ o
  8. 8. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Weaver Programaci´n Orientada a Aspectos con AspectJ o
  9. 9. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Implementaciones Java: AspectJ, Jakarta Hivemind, JBoss AOP, Spring AOP, ... Mono/.Net: Aspect#, Aspect.Net, Spring.Net AOP, ... C++: AspectC++, FeatureC++, ... C: AspectC, Aspicere2, ... Tambi´n existen para otros lenguajes: Python, Cobol, Lisp, e Ruby, Perl, ... Programaci´n Orientada a Aspectos con AspectJ o
  10. 10. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Software a utilizar Eclipse (http://www.eclipse.org) AspectJ (http://www.eclipse.org/aspectj/) AspectJ Development Tools (http://www.eclipse.org/ajdt/) Programaci´n Orientada a Aspectos con AspectJ o
  11. 11. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Introducci´n a AspectJ o Dos formas: Mediante anotaciones (disponible a partir de AspectJ 5) Para Java 5.0 o superior Utiliza unicamente el lenguaje Java ´ Mediante sintaxis adicional (disponible en todas las versiones) Para cualquier versi´n de Java o A˜ade nueva sintaxis n Programaci´n Orientada a Aspectos con AspectJ o
  12. 12. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Definir un aspecto Con anotaciones: import org.aspectj.lang.annotation.Aspect; 1 2 @Aspect 3 public class Aspecto 4 { ... } 5 Con sintaxis adicional public aspect Aspecto 1 { ... } 2 Programaci´n Orientada a Aspectos con AspectJ o
  13. 13. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Definir un pointcut con anotaciones (I) @<advice-specification>(quot;<pointcut-kind>( 1 [<access-specifier>] <return-type> 2 <class-name>.<method-name>({<arg-type>}) )quot;) 3 4 public void metodo() 5 { ... } 6 Programaci´n Orientada a Aspectos con AspectJ o
  14. 14. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static 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 restricci´n de acceso del m´todo sobre el que se va o e aplicar el advice. Puede ser public, protected, private, static, ... o combinaciones ’l´gicas’. o return-type valor de retorno del m´todo sobre el que se va aplicar e el advice Programaci´n Orientada a Aspectos con AspectJ o
  15. 15. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Definir un pointcut con anotaciones (III) class-name nombre completo (paquete + nombre) de la clase sobre el que se va aplicar el advice method-name nombre del m´todo sobre el que se va aplicar el e advice, en caso de ser un constructor se deber´ utilizar la palabra ’new’ a arg-type tipo de argumento del m´todo sobre el que se va e aplicar el advice Programaci´n Orientada a Aspectos con AspectJ o
  16. 16. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Definir un pointcut con anotaciones (IV) Otra manera de hacerlo: @Pointcut(quot;<pointcut-kind>( 1 [<access-specifier>] <return-type> 2 <class-name>.<method-name>({<arg-type>}) )quot;) 3 public void <pointcut-name>() 4 { ... } 5 6 @<advice-specification>(quot;<pointcut-name>()quot;) 7 public void metodo() 8 { ... } 9 Programaci´n Orientada a Aspectos con AspectJ o
  17. 17. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejemplo anotaciones (I) @Before(quot;execution(public void 1 paquete.clase.metodo(String))quot;) 2 3 public void adviceEjemplo() 4 { 5 System.out.println(quot;Antes del metodoquot;); 6 } 7 Programaci´n Orientada a Aspectos con AspectJ o
  18. 18. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejemplo anotaciones (II) @Pointcut(quot;execution(public void 1 paquete.clase.metodo(String))quot;) 2 public void pointcutEjemplo() {} 3 4 @Before(quot;pointcutEjemplo()quot;) 5 public void adviceEjemplo() 6 { 7 System.out.println(quot;Antes del metodoquot;); 8 } 9 Programaci´n Orientada a Aspectos con AspectJ o
  19. 19. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Definir un pointcut con sintaxis pointcut <pointcut-name>(): <pointcut-kind> 1 ( [<access-specifier>] <return-type> 2 <class-name>.<method-name>({<arg-type>}) ); 3 4 <advice-specification>(): <pointcut-name>() 5 { ... } 6 Programaci´n Orientada a Aspectos con AspectJ o
  20. 20. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejemplo sintaxis pointcut pointcutEjemplo(): execution 1 (public void paquete.clase.metodo()); 2 3 before(): pointcutEjemplo() 4 { 5 System.out.println(quot;Antes del metodoquot;); 6 } 7 Programaci´n Orientada a Aspectos con AspectJ o
  21. 21. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejercicio hola mundo Crear una clase con main y otro m´todo e Crear un aspecto con un advice que imprima por pantalla ’Hola Mundo de los Aspectos!!!’ Aplicar el aspecto al ’otro m´todo’ de la clase e Ser´ interesante hacerlo de las tres formas ıa Programaci´n Orientada a Aspectos con AspectJ o
  22. 22. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejercicio advice specifications Probar las diferentes posiblidades de los advices: @Before @After @AfterReturning @AfterThrowing @Around Utilizar el ejercicio de los dibujos animados (1) Programaci´n Orientada a Aspectos con AspectJ o
  23. 23. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Operadores Se aplican sobre JoinPoints Unarios Not (!) Binarios And (&&) Or (||) Con lo que hemos visto hasta el momento solo es interesante el ’or’, pero m´s adelante veremos cuando utilizar el resto a Programaci´n Orientada a Aspectos con AspectJ o
  24. 24. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejercicio operadores Probar el operador ’or’ para aplicar un advice a diferentes m´todos e Utilizar el ejercicio de los dibujos animados (1) Recomendaci´n: Crear un proyecto nuevo o Programaci´n Orientada a Aspectos con AspectJ o
  25. 25. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcut kinds (I) execution A˜ade el advice dentro del m´todo/constructor sobre n e el que se aplica execution(< patron − metodo >) Ejemplo: execution(public void paquete.clase.metodo(String)) call A˜ade el advice antes, despues, ... de la llamada al n m´todo/constructor sobre el que se aplica e call(< patron − metodo >) Ejemplo: call(public void paquete.clase.metodo(String)) Programaci´n Orientada a Aspectos con AspectJ o
  26. 26. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcut kinds (II) staticinitialization A˜ade el advice antes, despues, ... del n constructor de una clase est´tica a staticinitialization(< clase >) Ejemplo: staticinitialization(paquete.clase) get A˜ade el advice antes, despues, ... de que se lea el n contenido del atributo sobre el que se aplica get(< patron − atributo >) Ejemplo: get(String paquete.clase.atributo) Programaci´n Orientada a Aspectos con AspectJ o
  27. 27. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcut kinds (III) set A˜ade el advice antes, despues, ... de que se escriba n el contenido del atributo sobre el que se aplica set(< patron − atributo >) Ejemplo: set(int paquete.clase.atributo) handler Representa los join points en donde se captura una excepci´n del tipo indicado por la expresi´n. Esta o o captura est´ siempre especificada por una cl´usula a a catch en Java handler(< patron − excepcion >) Ejemplo: handler(paquete.excepcion) Programaci´n Orientada a Aspectos con AspectJ o
  28. 28. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcut kinds (III) initialization A˜ade el advice antes, despues, ... de la creaci´n de n o una instancia que utilice el constructor indicado initialization(< patron − constructor >) Ejemplo: initialization(paquete.clase.new()) preinitialization A˜ade el advice antes, despues, ... de la creaci´n n o de una instancia que utilice el constructor indicado antes de que el constructor super sea llamado preinitialization(< patron − constructor >) Ejemplo: preinitialization(paquete.clase.new()) adviceexecution Representa los join points donde se inicia la ejecuci´n de un advice. No requiere argumentos o adviceexecution() Programaci´n Orientada a Aspectos con AspectJ o
  29. 29. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcuts basados en la estructura l´xica e Capturan JoinPoints dentro del ´mbito l´xico de un aspecto, a e clase y/o m´todo e Dos tipos: within: Captura todos los JoinPoints dentro de una clase o aspecto, incluso dentro de sus clases internas within(< patron − clase >) withincode: Captura todos los JoinPoints dentro de un m´todo, incluso dentro de sus clases locales e withincode(< patron − metodo >) Programaci´n Orientada a Aspectos con AspectJ o
  30. 30. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static 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 est´tico a (staticinitialization) PersonajeFuturama sobreescribe el constructor por defecto (initialization y preinitialization) Pistas: Cuidado con el adviceexecution, si no se restringe su aplicaci´no se aplicara a s´ mismo. ı En este ejercicio se tienen que utilizar los operadores ’and’ y ’not’ Programaci´n Orientada a Aspectos con AspectJ o
  31. 31. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcuts basados en el flujo de control Capturan JoinPoints en el flujo de contro de un m´todo y/o e advice Dos tipos: cflow: Captura todos JoinPoints dentro del flujo de control de un m´todo, constructor, ... incluyendo la llamada e cf low(< pointcut − kind > (...)) cflowbelow: Captura todos JoinPoints dentro del flujo de control de un m´todo, constructor, ... excluyendo la llamada e cf lowbelow(< pointcut − kind > (...)) Cuidado: Cuando se quieren utilizar pointcuts basados en el flujo de control hay que definir dos JointPoint por lo menos JoinPoint de flujo de control (cflow o cflowbelow) 1 JoinPoint para restringir la aplicaci´n del anterior JoinPoint o 2 Programaci´n Orientada a Aspectos con AspectJ o
  32. 32. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejercicio de pointcuts basados en el flujo de control Crear un Pointcut que se aplique a todos los m´todos de la e funci´n saludaA de PersonajeSimpsons o 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 getNombre de la funci´n saludaA de PersonajeSimpsons o Utilizar el ejercicio de los dibujos animados (1) Recomendaci´n: Crear un nuevo proyecto o Programaci´n Orientada a Aspectos con AspectJ o
  33. 33. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcuts basados en el objeto de ejecuci´n (I) o A diferencia de los dem´s Pointcuts, estos se aplican en a tiempo de ejecuci´n. o Se aplican sobre un objeto. Dos tipos: this: se comprueba si el objeto this de Java es de la clase indicada, en caso de serlo, se aplica el advice. Tambi´n es e utilizado para acceder al objeto ’this’ de Java Ejemplo comprobaci´n clase: this(paquete.Clase) o Ejemplo acceso ’this’ de Java: @Before(quot;this(instancia) && ...quot;) 1 2 public void advice(Object instancia) 3 { ... } 4 Programaci´n Orientada a Aspectos con AspectJ o
  34. 34. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcuts basados en el objeto de ejecuci´n (II) o Dos tipos (continuaci´n): o target: se comprueba si el objeto sobre el que se va a aplicar el advice es el indicado. Tambi´n es utilizado para acceder al e target Ejemplo comprobaci´n clase: target(paquete.Clase) o Ejemplo acceso target: @Before(quot;target(instancia) && ...quot;) 1 2 public void advice(Object instancia) 3 { ... } 4 En este tipo de Pointcut no se pueden utilizar los comodines ’*’ y ’..’ El comod´ + es innecesario ya que la herencia de Java ’lo ın hace automaticamente’ Programaci´n Orientada a Aspectos con AspectJ o
  35. 35. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejercicio Pointcuts basados en el objeto de ejecuci´n o 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) Recomendaci´n: Crear un nuevo proyecto o Programaci´n Orientada a Aspectos con AspectJ o
  36. 36. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcuts de argumentos (I) Permiten a˜adir contexto al advice n Se pueden aplicar a: M´todos/constructores: Permiten acceder a los par´metros del e a m´todo o constructor e @Before(quot;args(arg1) && ...quot;) 1 2 public void advice(<tipo> arg1) 3 { ... } 4 Programaci´n Orientada a Aspectos con AspectJ o
  37. 37. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Pointcuts de argumentos (II) Se pueden aplicar a (continuaci´n): o Atributos: Permite consultar el nuevo valor que se le va a asignar @Before(quot;args(nuevoValor) && ...quot;) 1 2 public void advice(<tipo> nuevoValor) 3 { ... } 4 Excepciones: Permite acceder a la excepci´n que ha sido o lanzada @Before(quot;args(e) && ...quot;) 1 2 public void advice(<excepcion> e) 3 { ... } 4 Programaci´n Orientada a Aspectos con AspectJ o
  38. 38. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static 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) Recomendaci´n: Crear un nuevo proyecto o Programaci´n Orientada a Aspectos con AspectJ o
  39. 39. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static 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 @Pointcut(quot;if() && ...quot;) 1 public static boolean ifPointcut() 2 { <comprobacion> } 3 4 @Before(quot;ifPointcut() && ...quot;) 5 public void ifAdvice() 6 { ... } 7 Programaci´n Orientada a Aspectos con AspectJ o
  40. 40. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Ejercicio pointcuts condicionales Sacar un mensaje por pantalla cuando se intente asignar un nombre vacio ( o null) a un personaje Sacar por pantalla un mensaje cuando se alguien salude a Homer Utilizar el ejercicio de los dibujos animados (1) Recomendaci´n: Crear un nuevo proyecto o Programaci´n Orientada a Aspectos con AspectJ o
  41. 41. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static 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 de los subpaquetes hijo de ’cursillo’ Metodo o constructor: Representa cualquier caracter cursillo.Alumno.get*(*) : Todos los m´todos que empiecen por e get 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’ Programaci´n Orientada a Aspectos con AspectJ o
  42. 42. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Uso de caracteres comod´ ın Dos puntos (..): Paquete: Representa al paquete actual y a todos sus subpaquetes (directos e indirectos) javax..* : Todas las clases de javax, javax.util, javax.swing, ..., javax.util.logging, ..., javax.swing.tree, ... Metodo o constructor: Representa un n´mero variable de u parametros cursillo.Alumno.*(..) : Todos los m´todos de la clase e ’cursillo.Alumno’ cursillo.Alumno.*(String, ..) : Todos los m´todos que tengan e un primer parametro de tipo ’String’ de la clase ’cursillo.Alumno’ Programaci´n Orientada a Aspectos con AspectJ o
  43. 43. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Uso de caracteres comod´ ın Operador suma (+): Clase o interfaz: Representa a las clases hijas o que implementan la clase o interfaz cursillo.Alumno+ : Todas las clases que extienden o implementan de ’cursillo.Alumno’ Programaci´n Orientada a Aspectos con AspectJ o
  44. 44. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static 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) ... Recomendaci´n: Crear un nuevo proyecto o Programaci´n Orientada a Aspectos con AspectJ o
  45. 45. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Static crosscutting (I) En ocasiones modificar el comportamiento mediante un advice no es suficiente, es necesario modificar la estructura est´tica a de la clase Dos tipos de crosscuting: Dynamic crosscutting: modifica el comportamiento de la ejecuci´n o Static crosscutting: modifica la estructura de los tipos Programaci´n Orientada a Aspectos con AspectJ o
  46. 46. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Static crosscutting (II) Se basa en el concepto ’introduction’ anteriormente explicado. Recordatorio: Manipular un target para a˜adirle c´digo, implementaci´n de n o o interfaces, etc Tres tipos de modificaciones: Member/method introduction: Permite a˜adir m´todos y n e atributos Modificaci´n de la jerarquia de clases: Permite implementar o interfaces y extender clases Introducci´n de errores y warnings en tiempo de compilaci´n: o o Permite comprobar si se aplican aspecto no esperados Programaci´n Orientada a Aspectos con AspectJ o
  47. 47. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Static crosscutting (III) Ejemplo member/method introduction: <access-specifier> <type> <class>.<member-name>; 1 2 <access-specifier> <return-type> 3 <class>.<method-name>() 4 { ... } 5 access-specifier Puede ser public, protected o private type Tipo del atributo class Clase a la que se le a˜ade el m´todo o atributo n e member-name Nombre del atributo return-type Tipo de retorno del m´todo e method-name Nombre del m´todo e Programaci´n Orientada a Aspectos con AspectJ o
  48. 48. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Static crosscutting (IV) Ejemplo modificaci´n de la jerarquia de clases o declare parents: <child-type-pattern> 1 implements <interface-list>; 2 3 declare parents: <child-type-pattern> 4 extends [<class> | <interface-list>]; 5 child-type-pattern Patr´n de clases que van a o implementar/extender otra interfaz/clase interface-list Lista de interfaces que se quieren implementar class Clase que se quiere extender Programaci´n Orientada a Aspectos con AspectJ o
  49. 49. Introducci´n o Introducci´n o Sintaxis b´sica a AOP Pointcut kinds AspectJ Uso de caracteres comod´ ın Aplicaci´n de los aspectos o Static crosscutting Static crosscutting (V) Ejemplo introducci´n de errores y advertencias en tiempo de o compilaci´n o declare error: <pointcut> : <message>; 1 2 declare warning: <pointcut> : <message>; 3 pointcut Pointcut en el que, en caso de aplicar un advice, aparecer´ el error o la advertencia a message Mensaje a mostrar en el error o advertencia Programaci´n Orientada a Aspectos con AspectJ o
  50. 50. Introducci´n o AOP Introducci´n o AspectJ Ejemplos Aplicaci´n de los aspectos o Introducci´n a la aplicaci´n de aspectos o o ¿Donde aplicar todo esto? Logging, tracing y profiling Aplicaci´n de politicas o Optimizaci´n: Pools y caches o Patrones de dise˜o n Autenticaci´n y autorizaci´n o o Gesti´n de transacciones o ... Programaci´n Orientada a Aspectos con AspectJ o
  51. 51. Introducci´n o AOP Introducci´n o AspectJ Ejemplos Aplicaci´n de los aspectos o Ejemplos Logging Caches Reglas de negocio Programaci´n Orientada a Aspectos con AspectJ o
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×