Slideshare.net (beta)

 
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 0 (more)

Curso AOP

From Morelab, 3 weeks ago

56 views  |  0 comments  |  0 favorites  |  1 download
 

Groups/Events

Not added to any group/event

 
 

Privacy InfoNew!

This slideshow is Public

 
CC Attribution License
Embed in your blog
Embed (wordpress.com)

Slideshow Statistics
Total Views: 56
on Slideshare: 56
from embeds: 0* * Views from embeds since 21 Aug, 07

Slideshow transcript

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 8: Introducci´n o AOP Introduccion AspectJ Implementaciones Aplicaci´n de los aspectos o Weaver Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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

Slide 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

Slide 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: 1 import org.aspectj.lang.annotation.Aspect; 2 3 @Aspect 4 public class Aspecto 5 { ... } Con sintaxis adicional 1 public aspect Aspecto 2 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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) 1 @<advice-specification>("<pointcut-kind>( 2 [<access-specifier>] <return-type> 3 <class-name>.<method-name>({<arg-type>}) )") 4 5 public void metodo() 6 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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

Slide 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: 1 @Pointcut("<pointcut-kind>( 2 [<access-specifier>] <return-type> 3 <class-name>.<method-name>({<arg-type>}) )") 4 public void <pointcut-name>() 5 { ... } 6 7 @<advice-specification>("<pointcut-name>()") 8 public void metodo() 9 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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) 1 @Before("execution(public void 2 paquete.clase.metodo(String))") 3 4 public void adviceEjemplo() 5 { 6 System.out.println("Antes del metodo"); 7 } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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) 1 @Pointcut("execution(public void 2 paquete.clase.metodo(String))") 3 public void pointcutEjemplo() {} 4 5 @Before("pointcutEjemplo()") 6 public void adviceEjemplo() 7 { 8 System.out.println("Antes del metodo"); 9 } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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 1 pointcut <pointcut-name>(): <pointcut-kind> 2 ( [<access-specifier>] <return-type> 3 <class-name>.<method-name>({<arg-type>}) ); 4 5 <advice-specification>(): <pointcut-name>() 6 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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 1 pointcut pointcutEjemplo(): execution 2 (public void paquete.clase.metodo()); 3 4 before(): pointcutEjemplo() 5 { 6 System.out.println("Antes del metodo"); 7 } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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 1 JoinPoint de flujo de control (cflow o cflowbelow) 2 JoinPoint para restringir la aplicaci´n del anterior JoinPoint o Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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: 1 @Before("this(instancia) && ...") 2 3 public void advice(Object instancia) 4 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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: 1 @Before("target(instancia) && ...") 2 3 public void advice(Object instancia) 4 { ... } En este tipo de Pointcut no se pueden utilizar los comodines ’*’ y ’..’ El comod´ + es innecesario ya que la herencia de Java ’lo ın hace automaticamente’ Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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 1 @Before("args(arg1) && ...") 2 3 public void advice(<tipo> arg1) 4 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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 1 @Before("args(nuevoValor) && ...") 2 3 public void advice(<tipo> nuevoValor) 4 { ... } Excepciones: Permite acceder a la excepci´n que ha sido o lanzada 1 @Before("args(e) && ...") 2 3 public void advice(<excepcion> e) 4 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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 1 @Pointcut("if() && ...") 2 public static boolean ifPointcut() 3 { <comprobacion> } 4 5 @Before("ifPointcut() && ...") 6 public void ifAdvice() 7 { ... } Programaci´n Orientada a Aspectos con AspectJ o

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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: 1 <access-specifier> <type> <class>.<member-name>; 2 3 <access-specifier> <return-type> 4 <class>.<method-name>() 5 { ... } access-specifier Puede ser public, protected o 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

Slide 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 1 declare parents: <child-type-pattern> 2 implements <interface-list>; 3 4 declare parents: <child-type-pattern> 5 extends [<class> | <interface-list>]; child-type-pattern 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

Slide 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 1 declare error: <pointcut> : <message>; 2 3 declare warning: <pointcut> : <message>; 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

Slide 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

Slide 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