segunda-feira, 5 de março de 2012

Entendendo a Programação Orientada a Aspectos



A Programação Orientada a Aspectos - Aspect-Oriented Programming ou simplesmente AOP - foi introduzida em 1996 por Gregor Kickzales, quando estava no Xerox Palo Alto Research Center.


A AOP, assim como a Programação Orientada a Objetos (Object-Oriented Programming ou OOP), introduz um novo paradigma e um conjunto de diretrizes para facilitar o desenvolvimento de software. Ela pode ser vista como um estilo de programação, por abordar de maneira mais elegante questões que poderiam ser resolvidas de outras formas.


A AOP lida com um problema específico: capturar unidades consistentes de um sistema de software que as limitações dos modelos de programação tradicionais forçam a ficar espalhados por diversos pontos do sistema.


Para entender o espírito da AOP, temos que entender alguns conceitos fundamentais.
· Responsabilidades (concerns)






o Sistemas de software consistem de um conjunto de "áreas de interesse" ou responsabilidades distintas como, por exemplo, responsabilidades funcionais (lógica de negócio) e não-funcionais (performance, persistência de dados, logging, autenticação de usuários, segurança, verificação de erros, etc.). Existem também as preocupações relacionadas com o processo de desenvolvimento de software, como clareza de entendimento, facilidade de manutenção, rastreabilidade, simplicidade de evolução do software, etc.




· Separação de responsabilidades (separation of concerns)






o A melhor maneira de se projetar um sistema é através da separação de suas responsabilidades distintas de tal modo que podemos alterar/re-projetar cada uma sem que isto afete as demais partes do sistema. A eficiência do desenvolvimento aumenta na medida em que conseguimos separar as suas diferentes responsabilidades em módulos estanques. Este princípio é razoavelmente antigo, e a OOP nos trouxe uma importante resposta a ele: a classe como uma dimensão para a decomposição de responsabilidades. Mas algumas responsabilidades não são tão facilmente decompostas em apenas uma dimensão...








· AspectJ






o O AspectJ é uma ferramenta open source que acrescenta os conceitos de AOP à linguagem Java, através de uma extensão à linguagem: os "aspects". Ele utiliza Java como a linguagem para a implementação dos concerns individuais, e tem construções para a especificação das regras de weaving, que são especificadas em termos de join points, pointcuts e advices, e tudo isto é encapsulado em um aspect.


o Join points: representam pontos bem definidos na execução de um programa onde um determinado aspecto pode ser aplicado. Em AspectJ, join points podem ser chamadas de métodos, acessos a membros de uma classe, etc. Join points podem conter outros join points.


o Pointcuts: pointcut é um agrupamento de join points baseando-se em um critério pré-definido.


o Advices: trechos de código que são executados nos pointcuts. Um advice contém as alterações que devem ser aplicadas ortogonalmente ao sistema.


o Aspects: são similares a classes: têm um tipo, podem ser estendidos, podem ser abstratos ou concretos e podem conter campos, métodos e tipos como membros. Mas são diferentes de classes: não têm construtor nem destrutor, não podem ser criados com o operador "new", podem conter pointcuts e advices como membros e podem acessar membros de outros tipos.




· Conclusão






o A aplicação de técnicas de OOP para a implementação dos crosscutting concerns resulta em sistemas que são trabalhosos para implementar, difíceis de entender e manter, e também dificultam a evolução do sistema pois pequenas modificações na especificação podem resultar em intervenções em um grande número de classes.


o Utilizando a AOP, pode-se criar implementações que são fáceis de desenhar, entender e manter. Deste modo, AOP traz maior produtividade, qualidade e facilidade para a implementação de novas funcionalidades.


o Acreditamos que os conceitos relacionados com aspectos estão na sua infância. Muito trabalho de pesquisa ainda está sendo realizado sobre o assunto, mas, apesar disto, já podemos tirar proveito prático deste novo paradigma de programação com o AspectJ.






fonte: http://www.dextra.com.br/empresa/artigos/aspectprog.html


Postado por: Murilo Almeida, ADS - 6º Período.

Nenhum comentário:

Postar um comentário