Anda di halaman 1dari 15

AOP

PROGRAMAO ORIENTADA A ASPECTOS

SURGIMENTO
O conceito foi criado por Gregor Kiczales e a sua equipe na Xerox PARC (a diviso de pesquisa da Xerox). Eles desenvolveram o AspectJ, a primeira e mais popular linguagem OAP.

ANLISE
Os paradigmas de programao mais antigos, como a programao orientada a objeto, implementam a separao do cdigo, atravs de entidades nicas. Todo o programa escrito em OO possui cdigo que alheio a implementao do comportamento do objeto. Este cdigo todo aquele utilizado para implementar funcionalidades secundrias e que encontra-se espalhado por toda a aplicao. A OAP permite que esse cdigo seja encapsulado e modularizado.

RESUMINDO
A OAP lida com um problema especfico: capturar unidades consistentes de um sistema de software que as limitaes dos modelos de programao tradicionais foram a ficar espalhados por diversos pontos do sistema.

OOP/AOP
Estas responsabilidades so difceis de isolar porque so necessrias em vrios pontos do cdigo. Em OOP, uma classe oferece uma boa maneira de se separar a maioria das responsabilidades funcionais, mas bastante limitada quando se trata de responsabilidades transversais.

EXEMPLO
Imagine um sistema bancrio. Este sistema tem como uma de suas responsabilidades funcionais centrais o controle das contas correntes dos clientes, candidata natural a se tornar uma classe. Mas este mesmo sistema tem diversas outras responsabilidades no-funcionais como: logging, integridade das transaes, autenticao dos usurios, segurana, performance, etc., que so necessrias como suporte a vrias classes funcionais, isto , elas so transversais s divises de responsabilidades entre os mltiplos mdulos bsicos do sistema.

OOP/AOP
A AOP complementa a OOP por introduzir uma nova dimenso para a decomposio destas responsabilidades transversais: os aspectos.

Cdigo
void transferir(Conta origem, Conta destino, int valor) { if (origem.getSaldo() < valor) { throw new SaldoInsuficienteException(); } origem.debitar(valor); destino.creditar(valor); }

void transferir(Conta origem, Conta destino, int valor) { if(!getUsuarioCorrente().temPermissao(OP_TRANSFERENCIA)) { throw new PermissaoException(); } if (valor < 0) { throw new TransferenciaNegativaException(); } if (origem.getSaldo() < valor) { throw new SaldoInsuficienteException(); } Transaction tx = database.newTransaction(); try { origem.debitar(valor); destino.creditar(valor); tx.commit(); logger.logOperation(OP_TRANSFERENCIA, origem, destino, valor); } catch(Exception e) { tx.rollback(); } }

AOP
Assim sendo, a AOP consiste na separao das responsabilidades transversais de um sistema em aspectos (unidades modulares) e a sua posterior composio junto s classes, formando um sistema nico. Os aspectos podem ser inseridos, alterados ou removidos em tempo de compilao. Por estarem em um nico bloco de cdigo, sua manuteno mais simples, diminuindo a complexidade do sistema e facilitando o seu entendimento. Alm disso, o cdigo das classes fica livre do cdigo relacionado s responsabilidades transversais, o que facilita sua reutilizao em diferentes contextos, combinando diferentes aspectos dependendo das necessidades da aplicao.

FASES
Decomposio: os vrios concerns (interesses) do sistema so identificados e classificados como comuns ou crosscutting (transversais). Implementao: os concerns (interesses) so implementados separadamente em classes (para os concerns comuns) e aspectos (para os crosscutting concerns). Recomposio: o sistema recomposto partir dos concerns implementados segundo regras de recomposio. Esta fase chamada de weaving.

FERRAMENTAS
Uma implementao bsica de AOP consiste em: Uma linguagem para programar os componentes (por exemplo, Java) Uma linguagem para programar os aspectos (por exemplo, o AspectJ) e um Weaver para combinar as duas linguagens (ferramenta que tambm faz parte do AspectJ). O Weaver uma espcie de montador que tem como entrada um programa de componente e o(s) programa(s) de aspectos, e como sada um programa em uma linguagem especfica (por exemplo, Java).

CONCLUSO
A aplicao de tcnicas de OOP para a implementao dos crosscutting concerns (interesses transversais) resulta em sistemas que so trabalhosos para implementar, difceis de entender e manter, e tambm dificultam a evoluo do sistema pois pequenas modificaes na especificao podem resultar em intervenes em um grande nmero de classes. Utilizando a AOP, pode-se criar implementaes que so fceis de desenhar, entender e manter. Deste modo, AOP traz maior produtividade, qualidade e facilidade para a implementao de novas funcionalidades.

CONSIDERAES FINAIS
Acreditamos que os conceitos relacionados com aspectos esto na sua infncia. Muito trabalho de pesquisa ainda est sendo realizado sobre o assunto, mas, apesar disto, j podemos tirar proveito prtico deste novo paradigma de programao.

REFERNCIAS
AspectJ Project: www.eclipse.org/aspectj/ AOSD Aspect Oriented Software Development: aosd.net/. Multi-Dimensional Separation of Concerns: www.research.ibm.com/hyperspace/

Anda mungkin juga menyukai