quarta-feira, 7 de março de 2007

AOP - Aspect Oriented Programming

Bem como este assunto está tão em voga actualmente decidi falar o pouco que sei sobre este tipo de programação.
Basicamente e pelo que entendi este tipo de programação é equivalente ao conceito dos triggers/eventos, ou seja, algo que é executado antes de uma determinada operação ou depois dessa operação.
Vou tentar explicar o conceito com um exemplo.
Se tivermos uma aplicação que utilize um sistema de logs, esse sistema de logs é distribuido e utilizado por toda a aplicação. Assim sendo, o remédio é duplicar invocações em todo o lado que queremos invocar o log para podermos logar determinada coisa.
Com linguagem orientada a aspectos podemos definir pointcuts que vão ser inspeccionados a nivel de execução segundo expressões do género:

before(Point p, int x): target(p)
&& call(* * setX(int)) {
if (!p.assertX(x)) {
System.out.println("Illegal value for x"); return;
}
}

linha "call(* * setX(int))"
O que estamos aqui a dizer com este pointcut é que quando invocarmos uma classe Point com um método com qualquer tipo de visibilidade (público,privado,protegido) que devolva qualquer tipo de resultados (*), entao é executado o conteúdo desse pointcut
a primeira palavra indica se queremos que o conteúdo seja invocado antes ou após a invocação do setX.
De seguida temos "(Point p, int x)" -> isto são os argumentos que o nosso pointcut necessita.
"target(p)" -> Estamos a dizer que isso só se aplica à instância p que estamos a passar por parâmetro para o pointcut. Aqui também poderiamos especificar uma classe.
Assim sendo com apenas 2 ou 3 linhas podemos especificar um comportamento que teriamos que repetir em N classes de acordo com a linguagem Object Oriented Programming.
Como estas coisas se tornam difíceis de explicar correctamente, aqui vai o link da documentação do AspectJ uma linguagem orientada a aspecto derivada do JAVA

AOP

Sem comentários: