SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
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
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
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
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
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
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
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
Introducci´n
                                 o
                              AOP     Introduccion
                           AspectJ    Implementaciones
         Aplicaci´n de los aspectos
                 o


Weaver




                                      Programaci´n Orientada a Aspectos con AspectJ
                                                o
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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

Weitere ähnliche Inhalte

Ähnlich wie Curso Aop

Curso AOP
Curso AOPCurso AOP
Curso AOPMoreLab
 
Introducción a la Dirección de Proyectos. Parte II
Introducción a la Dirección de Proyectos. Parte IIIntroducción a la Dirección de Proyectos. Parte II
Introducción a la Dirección de Proyectos. Parte IIPablo Diaz
 
Demo de sistema sap – aio consulting
Demo de sistema sap – aio consultingDemo de sistema sap – aio consulting
Demo de sistema sap – aio consultingaioconsulting
 
Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...
Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...
Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...GFI Informática
 
Diapositivas form y eval de pytos2 (4)
Diapositivas form y eval de pytos2 (4)Diapositivas form y eval de pytos2 (4)
Diapositivas form y eval de pytos2 (4)19770806
 
Clase Magistral Marcos Zúñiga
Clase Magistral Marcos ZúñigaClase Magistral Marcos Zúñiga
Clase Magistral Marcos Zúñigadardanella
 
Clase Magistral Marcos Zúñiga
Clase Magistral Marcos ZúñigaClase Magistral Marcos Zúñiga
Clase Magistral Marcos Zúñigatelematica.usm
 
Introducción a las Presentaciones Electrónicas
Introducción a las Presentaciones ElectrónicasIntroducción a las Presentaciones Electrónicas
Introducción a las Presentaciones ElectrónicasBANCA SERFIN
 
Aspect Oriented Programming Middleware
Aspect Oriented Programming MiddlewareAspect Oriented Programming Middleware
Aspect Oriented Programming MiddlewareLenin Lozano
 
Informática II
Informática IIInformática II
Informática IIEloisa
 
Resumen presupuestos
Resumen presupuestosResumen presupuestos
Resumen presupuestossuecarpio
 
Modelos de desarrollo_de_sistemas
Modelos de desarrollo_de_sistemasModelos de desarrollo_de_sistemas
Modelos de desarrollo_de_sistemaseepc246
 
AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)Mayer Horna
 

Ähnlich wie Curso Aop (20)

Curso AOP
Curso AOPCurso AOP
Curso AOP
 
Equipo 2 Modelos de Ciclo de Vida de Software
Equipo 2 Modelos de Ciclo de Vida de SoftwareEquipo 2 Modelos de Ciclo de Vida de Software
Equipo 2 Modelos de Ciclo de Vida de Software
 
Introducción a la Dirección de Proyectos. Parte II
Introducción a la Dirección de Proyectos. Parte IIIntroducción a la Dirección de Proyectos. Parte II
Introducción a la Dirección de Proyectos. Parte II
 
Demo de sistema sap – aio consulting
Demo de sistema sap – aio consultingDemo de sistema sap – aio consulting
Demo de sistema sap – aio consulting
 
Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...
Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...
Migración de Oracle IAS (Forms, Reports, aplicaciones J2EE) a Oracle WebLogic...
 
Diapositivas form y eval de pytos2 (4)
Diapositivas form y eval de pytos2 (4)Diapositivas form y eval de pytos2 (4)
Diapositivas form y eval de pytos2 (4)
 
Clase Magistral Marcos Zúñiga
Clase Magistral Marcos ZúñigaClase Magistral Marcos Zúñiga
Clase Magistral Marcos Zúñiga
 
Clase Magistral Marcos Zúñiga
Clase Magistral Marcos ZúñigaClase Magistral Marcos Zúñiga
Clase Magistral Marcos Zúñiga
 
Introducción a las Presentaciones Electrónicas
Introducción a las Presentaciones ElectrónicasIntroducción a las Presentaciones Electrónicas
Introducción a las Presentaciones Electrónicas
 
Presentacion pp
Presentacion ppPresentacion pp
Presentacion pp
 
Bloque 4
Bloque 4Bloque 4
Bloque 4
 
Unidad 4
Unidad 4Unidad 4
Unidad 4
 
Aop
AopAop
Aop
 
Aspect Oriented Programming Middleware
Aspect Oriented Programming MiddlewareAspect Oriented Programming Middleware
Aspect Oriented Programming Middleware
 
Informática II
Informática IIInformática II
Informática II
 
Resumen presupuestos
Resumen presupuestosResumen presupuestos
Resumen presupuestos
 
Modelos de desarrollo_de_sistemas
Modelos de desarrollo_de_sistemasModelos de desarrollo_de_sistemas
Modelos de desarrollo_de_sistemas
 
Tema 8
Tema 8Tema 8
Tema 8
 
AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)AOP - OSUM springperu(1era Reunion)
AOP - OSUM springperu(1era Reunion)
 
Poa 01
Poa 01Poa 01
Poa 01
 

Mehr von AmistadLealtad

Mehr von AmistadLealtad (6)

Proyecto De Tecnica De Programacioin I I
Proyecto De Tecnica De Programacioin  I IProyecto De Tecnica De Programacioin  I I
Proyecto De Tecnica De Programacioin I I
 
Programacionorientadaaaspectos
ProgramacionorientadaaaspectosProgramacionorientadaaaspectos
Programacionorientadaaaspectos
 
Wp Aspect J
Wp Aspect JWp Aspect J
Wp Aspect J
 
Poa
PoaPoa
Poa
 
Charla 2005 09 16
Charla 2005 09 16Charla 2005 09 16
Charla 2005 09 16
 
Curso Aop01
Curso Aop01Curso Aop01
Curso Aop01
 

Curso Aop

  • 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. 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. 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. 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. 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. 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. 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. Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Weaver Programaci´n Orientada a Aspectos con AspectJ o
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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