Introducão a AOP


Vinicius Ronconi
Extraído do site: www.portaljava.com


Orientação a Aspectos – Conceitos Fundamentais

Por muitos anos os desenvolvedores se depararam com um problema na Programação Orientada a Objetos:

Como tratar códigos que não fazem parte da regra de negócio, mas que precisam ser implementadas para

garantir o correto funcionamento do sistema? Para ilustrar este problema, vamos usar o log de utilização das classes, necessário em diversos projetos, e que afeta muitas (às vezes todas) as classes do sistema. A forma comum de tratar este problema é inserir em cada método onde o log é necessário um bloco de código, que se repetirá em todos os pontos do sistema. Isto torna o código complexo, por misturar as regras de negócio da classe com outras características. Estas características, doravante chamadas "aspectos", ficam dispersas através dos métodos, dificultando futuras manutenções. Utilizado inicialmente no meio acadêmico e instituições de pesquisas, a Orientação a Aspectos vem ganhando espaço nas publicações sobre Programação Orientada a Objetos. Neste artigo, visamos mostrar ao leitor os principais conceitos desta nova tecnologia, demonstrar algumas situações onde pode ser utilizada e apresentar alguns dos principais frameworks para sua implementação. A Orientação a Aspectos permite que as classes desenvolvidas contenham apenas o código necessário para os objetivos das classes, sem a necessidade de inclusão de blocos auxiliares para outros fins, como auditoria, segurança, log, controle de transações, threads, tratamento de erros. Com a separação destes aspectos do código básico das classes, conseguimos obter as seguintes vantagens:

· Códigos mais simples, uma vez que as classes possuem apenas as regras de negócio, deixando de lado aspectos de projeto;

· Alterações nos aspectos de projeto não geram impacto nas classes. As classes passam a possuir

apenas a regra de negócio;

· Maior produtividade na manutenção, uma vez que um mesmo aspecto pode ser aplicado às

diferentes classes de um projeto.

 

Vocabulário Básico

Para melhor compreender a Orientação a Aspectos, é importante conhecer seus principais conceitos:

· JoinPoints - Pontos bem definidos de execução de um programa, que poderão ser utilizados para

inserção de aspectos. São basicamente as chamadas de métodos e acesso de membros de

classes;

· Pointcuts - Construções no aspecto que reúnem um ou mais joinpoints. Um pointcut pode ser criado a partir da utilização de expressões baseadas em outros pointcuts;

· Advices - São os códigos inseridos para modificar o comportamento de uma classe. Podem ser

executados antes, depois ou simultaneamente a um joipoint;

· Aspects - Encapsula os advices e os pointcuts em unidades funcionais. Está para a Orientação a

Aspectos assim como as classes estão para a Orientação a Objetos.

· Weaver - Programa capaz de "montar" o objeto final a partir de uma classe e um aspecto, que foram desenvolvidos de maneira separada.

Frameworks

Atualmente nenhuma linguagem orientada a objetos possui suporte nativo à Orientação a Aspectos. Para poder implementar a orientação a aspectos, é necessário instalar um framework próprio. Existem algumas opções gratuitas disponíveis no mercado:

· AspectJ – Criado pelo Xerox PARC em 1997 e transferido para o grupo Eclipse.org em 2002, o

AspectJ foi o primeiro framework Java a atingir um estado de maturidade suficiente para ser utilizado em aplicações profissionais. A maior crítica feita ao AspectJ é não utilizar a linguagem Java para codificação dos aspectos, o que requer um esforço adicional para o entendimento de uma nova
Portal Java – A maior comunidade virtual de Java do Brasil – www.portaljava.com

Todos os direitos reservados. Proibida a utilização ou replicação deste material sem prévio aviso.

linguagem. Possui plugins para Eclipse, JBuilder e SunONE/NetBeans. Encontra-se atualmente na

versão 1.2.1, disponível em http://www.eclipse.org/aspectj/;

· AspectWerkz – Possivelmente um dos frameworks mais simples para AOP disponíveis, visando

principalmente ganhos em performance. Possui plugin para o NetBeans 3.6. Surportado pela BEA

Systems e disponível em http://aspectwerkz.codehaus.org/index.html, encontra-se na versão 2.0

RC2 (Release Candidate 2);

· JBoss AOP - Um framework 100% java, que torna possível o uso de arquivos XML para

armazenar as configurações dos aspectos. Isto permite a alteração dos aspectos apenas alterando

o arquivo XML, sem a necessidade de recompilar as classes. Esta característica já é considerada

uma grande evolução dentro da Orientação a Aspectos, sendo chamada de "Aspectos Dinâmicos".

Para aqueles que já utilizam a JDK 1.5, o recurso Annotations também poderá ser utilizado. Este

framework oferece facilidades para quem trabalha com os outros projetos do grupo JBoss, como a

IDE e servidor de aplicações. Encontra-se na versão 1.1, disponível em

http://www.jboss.org/products/aop/;

· Spring Framework – Um framework para desenvolvimento de aplicações J2EE, contendo suporte a outras tecnologias, mas possibilitando apenas o uso do framework AOP. Assim como o JBoss,

permite a configuração dos aspectos através de arquivos XML e de JDK 1.5 Annotations. O Spring

Framework possui plugins para o Eclipse. Atualmente na versão 1.1.4, está disponível em

http://www.springframework.org/.

Devido à variedade de frameworks existentes, surgiu um projeto chamado "AOP Alliance", que fornece algumas interfaces pre-definidas, visando tornar as implementações mais próximas de um padrão, o que facilitará a compreensão dos diferentes frameworks pelos novos desenvolvedores. Dos frameworks citados, apenas o Spring atende plenamente as interfaces definidas pela AOP Alliance. Maiores informações sobre este projeto estão disponíveis em http://www.sourceforge.net/projects/aopalliance/.

Conclusão

Como podemos observar, o conceito de Orientação a Aspectos vem amadurecendo nestes últimos anos, e já existem algumas opções de frameworks em nível de maturidade suficiente para que seu uso saia  dos meios acadêmicos e de pesquisa, e que alcance também os centros de  desenvolvimento de software, tornando o desenvolvimento orientado a objetos uma tarefa mais simples.