Programação Orientada a Aspectos Disciplina: Especificação e Manutenção de Sistemas de Informação Alunas: Lia Mara Borges de Freitas Fabíola Ribeiro de Carvalho
Aspects
AspectJ AspectJ é uma linguagem orientada a aspectos na qual podemos dizer que é uma extensão da linguagem Java, pois usa todos os recursos da linguagem e acrescenta recursos de Programação Orientada a Aspectos (POA). AspectJ acrescenta os seguintes conceitos e construções associadas: Aspectos Join Ponts Pointcuts Advices Inter-types declarations
Aspects É a unidade de modularidade para crosscutting concerns em AspectJ. Um aspecto é definido por uma declaração de aspecto, que tem uma forma similar a declaração de classe em Java, contendo métodos, atributos, etc. Um aspecto é combinado com as classes que ele afeta de acordo com especificações definidas dentro dele.
Join Points Join Points são pontos de programas onde os aspectos e o código Java se “encontram” (Processo de composição). Um join point é um ponto bem definido da execução de um programa, como a chamada de um método, o acesso a um atributo, a inicialização de um objeto, o levantamento de uma exceção, etc A partir dos pontos de junção, são criadas as regras que darão origem aos pontos de atuação ou ponto de corte.
Pointcuts Pointcuts são os pontos responsáveis por detectarem quais Join Points o aspecto deverá interceptar. Pointcuts são alguns join points de um programa que são capturados pelo mecanismo de AOP do AspectJ. Exemplos de Pointcuts:
Advices Os Pointcuts apenas selecionam os pontos onde o AspectJ irá interceptar. Um aspecto pode especificar advices que são usados para definir algum código que deve ser executado quando um pointcut é atingido. Advice é um mecanismo parecido com um método que consiste de código que é executado: - Antes (before) de um pointcut. - Depois (after) de um pointcut. - No lugar (around) de um pointcut.
Inter-types declarations Um aspecto pode introduzir métodos, atributos, declarações de implementação de interface e declaração de extensão de classe usando a construção chamada de inter-type declaration. Membros introduzidos podem ser visíveis a todas as classes e aspectos (inter-type declaration pública) ou apenas internamente ao aspecto (inter-type declaration privada).
Exemplo de definição de um aspecto em AspectJ 01 aspect FaultHandler { 02 03 private boolean Server.disabled = false; 04 05 private void reportFault() { 06 System.out.println(“Failure! Please fix it!.”); 07 } 08 public static void fixServer(Server s) { 09 s.disabled = false; 10 } 11 12 pointcut services(Server s): target(s) && call(public * * (..)); 13 14 before(Server s): services(s) { 15 if (s.disabled) throw new DisabledException(); 16 } 17 after(Server s) throwing (FaultException e): services(s) { 18 s.disabled = true; 19 reportFault(); 20 } 21 } Aspecto FaultHandler Inter-type declaration que introduz um atributo na classe Server Método privado Método público Pointcut Adivice do tipo Before Adivice do tipo After
Exemplo de definição de uma classe JAVA e de um aspecto em AspectJ public class HelloWorld { public static void main(String[] args) { } public aspect HelloFromAspectJ { pointcut mainMethod() : execution(public static void main(String[])); after() returning : mainMethod() { System.out.println("Hello World");
Referências http://www.webartigos.com/articles/1954/1/Projeto-De-Software-Orientado-A Aspectos/pagina1.html. http://pt.wikipedia.org/wiki/Programa%C3%A7%C3%A3o_orientada_a_aspecto www.geomatica.eng.uerj.br/docentes/araujo/_media/carac:aspectj.ppt DA SILVA, L. F.; LEITE, J.C. Uma Linguagem de Modelagem de Requisitos Orientada a Aspectos. Disponível em: http://gnomo.fe.up.pt/~wer2005/docs/papers/LyreneFernandes.pdf. Ultimo acesso: 07 de maio de 2006. HUGO, G., GROTT, C. M. Estudo de Caso Aplicado a Programação Orientada a Aspecto. Disponível em: http://www.inf.furb.br/seminco/2005/artigos/108-vf.pdf. Ultimo acesso: 04 de maio de 2006
Referências RAMOS, R., A; PAZIN, A.; PENTEADO, R. A. D. Reengenharia de Sistemas Orientados a Objetos para Sistemas Orientados a Aspectos. Disponível em: http://www.dc.ufscar.br/~rar/Ramos_Pazin_Clei2004.pdf. RAMOS, R. , A; CASTRO, J. F.B Avaliação de uma Metodologia de Medição da Qualidade em um Documento de Requisitos Orientados a Aspectos. Disponível em: http://wer.inf.puc-rio.br/WERpapers/artigos/artigos_WER05/ricardo_ramos.pdf . Ultimo acesso: 04 de maio de 2006. RAMOS, R., A; PENTEADO, R; MASIERO, P. C. Um Processo de Reestruturação de Código Baseado em Aspectos. Disponível em: http://www.dc.ufscar.br/~rar/RAR_SBES2004.pdf. Ultimo acesso: 04 de maio de 2006. KAWAKAMI D.; RAMOS, R., A; PENTEADO, R Uma Abordagem para Reengenharia de Sistemas implementados em Java para AspectJ. Disponível em: http://www.univasf.edu.br/~ricardo.aramos/publicacoes/Kawakami_LAWASP2007.pdf