Escolar Documentos
Profissional Documentos
Cultura Documentos
Artigo POA
Artigo POA
Este trabalho é um estudo sobre programação orientada a aspectos. Tem como objetivo
apresentar os conceitos fundamentais sobre o assunto (o que são aspectos e por que utiliza-los),
e como pode ser feito um programa orientado a aspectos utilizando o AspectJ.
1 de 4 20-06-2010 17:29
Programação Orientada a Aspectos http://www.lisha.ufsc.br/teaching/sce/ine5612-2001-...
O que é AspectJ?
AspectJ é uma extensão da linguagem de programação Java que permite a implementação
de aspectos, alem disso AspectJ conta com um montador que serve para unir o programa de
componente com o programa de aspecto.
Depois de definirmos as responsabilidades pertencentes a todo sistema, inserimos essa
responsabilidade em um modulo – chamado aspecto, definimos isso usando uma linguagem de
aspecto – AspectJ por exemplo, após unimos isso com o sistema propriamente dito, essa união
é feita com um montador (weaver). E então temos como resultado dessa união um programa
completo – programa + aspectos do programa.
logger.exit("doGet");
}
Sem uma exaustiva varredura de código, isso seria difícil de implementar. Nesta versão,
haviam aproximadamente 80 chamadas de logs distintas espalhadas por 15 classes. Na versão
1.3 deste mesmo framework, essas 80 chamadas foram substituídas por um simples aspecto
que automaticamente age sobre os métodos desejados. A seguir temos uma idéia de como foi
declarado o aspecto citado anteriormente:
2 de 4 20-06-2010 17:29
Programação Orientada a Aspectos http://www.lisha.ufsc.br/teaching/sce/ine5612-2001-...
pointcut logObjectCalls() :
execution(* Logger.*(..));
before() : loggableCalls(){
Logger.entry(thisJoinPoint.getSignature().toString());
}
after() : loggableCalls(){
Logger.exit(thisJoinPoint.getSignature().toString());
}
}
Pointcuts e Joinpoints:
Para entender o que é um pointcut, é necessário saber primeiro o que é um joinpoint.
Joinpoints representam pontos bem definidos em uma execução de um programa. Joinpoints
típicos em AspectJ podem ser por exemplo chamadas de métodos, acessos a membros de uma
classe entre outras ações de execução. Join points podem conter outros Join points.
Pointcut é uma construção de linguagem que junta um conjunto de Join Points baseando-se
em um critério pré-definido. O primeiro Pointcut no exemplo chamado “publicMethods”
seleciona as execuções de todos os métodos públicos do pacote “org.apache.cactus “. Execution
é uma primitiva de pointcut (assim como int é uma primitiva de Java Types.) Ele seleciona a
execução de qualquer método que bate com a assinatura definida entre parênteses. Um segundo
pointcut chamado “logObjectCalls” seleciona todas as execuções de métodos da classe Logger.
Finalmente temos o terceiro pointcut – “loggableCalls” que combina os dois pointcuts anteriores
usando && !, ou seja, selecionando todos os métodos públicos em “org.apache.cactus” exceto os
que se encontram também na classe Logger (Aplicar as chamadas de log aos métodos da classe
logging resultaria em uma recursão infinita.)
Advice:
Agora que o aspecto definiu os pontos a serem “logados”, é usado o “advice” para completar
implementação. Advice é o trecho de codigo que é executado antes (before();), depois
(after();) e simultaneamente (around();) a um Joinpoint. É algo como: - “Rode este código
antes de todos os métodos que eu quero escrever um log.
3 de 4 20-06-2010 17:29
Programação Orientada a Aspectos http://www.lisha.ufsc.br/teaching/sce/ine5612-2001-...
O dispositivo utiliza a classe Logger . O método entry desta classe, por exemplo, esta
implementado da seguinte maneira:
public static void entry(String message){
System.out.println("entering method " + message);
}
Conclusão
A programação orientada a aspecto cada dia que passa deixa de ser uma grande promessa
para fazer parte do dia-a-dia dos desenvolvedores, ainda que existam detalhes que precisam ser
melhor estudado – como a falta de uma metodologia. Mas ainda assim vemos um grande futuro
para a programação orientada a aspecto, por dispor de um flexibilidade não disponível na
programação orientada a objetos.
Mas como toda tecnologia pode ser pensada para ser utilizada de uma forma e vir a ser
utilizada de outra. Queremos acreditar que a AOP não seja utilizada apenas para cobrir furos de
maus programas (ou maus desenvolvedores???). Esperamos que a AOP venha a contribuir para
facilitar o entendimento de softwares complexos, e que possibilitem a diminuição do esforço
necessário para a construção e manutenção desses sistemas.
Para maiores informações sobre a AOP e AspectJ recomendamos o site aspectj.org, que
dispõem de inúmeros artigos sobre o assunto.
4 de 4 20-06-2010 17:29