Artigo Engenharia de Software 10 - Programação Orientada a Aspectos

Esse artigo apresenta fundamentos da programação orientada a aspectos, através do AspectJ, uma extensão da linguagem Java, exemplificando seu uso e seus principais componentes através de um estudo de caso.

Esse artigo faz parte da revista Engenharia de Software 10 edição especial. Clique aqui para ler todos os artigos desta edição

 

Desenvolvimento

Programação Orientada a Aspectos

Um exemplo prático utilizando AspectJ

 

De que se trata o artigo

Apresenta fundamentos da programação orientada a aspectos, através do AspectJ, uma extensão da linguagem Java, exemplificando seu uso e seus principais componentes através de um estudo de caso.

Para que serve:

Demonstrar a utilização da orientação a aspectos em conjunto com conceitos de Orientação a Objetos (OO), permitindo a compreensão das estruturas básicas em AspectJ e sua relação com a linguagem Java.

 Em que situação o tema é útil:

Na construção de sistemas complexos, criando alternativas através da separação de interesses, que permitam maior reusabilidade e manutenibilidade do software.

 

 

A Engenharia de Software busca o aperfeiçoamento dos produtos de software, através de técnicas e métodos para facilitar sua reutilização, manutenção e evolução. Dentre as diversas práticas de desenvolvimento sugeridas, uma das mais consolidadas e eficientes, é a divisão de um sistema em partes para compreensão das fronteiras que definem suas funções. Essa divisão pode ser conhecida também como separação de interesses (separation of concerns). O ideal nessa abordagem seria que toda parte relacionada a um interesse fosse transportada para uma localização física separada das demais, que se relacionam a outros interesses, facilitando seu estudo e compreensão. 

O paradigma de orientação a objetos emprega a separação de interesses através dos objetos, seus estados e operações, visando a redução da complexidade no desenvolvimento de software e aumentando sua produtividade. Embora a Orientação a Objetos (OO) dê suporte a essa divisão, ela ainda não é totalmente contemplada, devido aos interesses sistêmicos não serem tratados da forma adequada e muitas vezes se encontrarem espalhados por todo o sistema. Interesses sistêmicos são requisitos que não se aplicam à lógica de negócios como, por exemplo, segurança, desempenho, persistência, integridade de dados e tratamento de erros, dentre outros. Em decorrência disso, os sistemas OO mais complexos tendem a ter forte acoplamento, fraca coesão e grande redundância, o que dificulta sua compreensão, manutenção, evolução e reutilização. Quando um interesse se espalha por todo o sistema e se mistura entre outras funcionalidades, é denominado de interesse transversal, ou crosscutting concern. Como exemplo de interesses transversais pode-se citar logging, segurança, tratamento de erros, persistência de dados ou autenticação, entre outros.

A Programação Orientada a Aspectos surge com uma boa proposta para solucionar esse problema, através do encapsulamento dos crosscutting concern em módulos separados do restante do código. Esses módulos são denominados aspectos. Dessa forma, ao invés dos interesses estarem espalhados pelo código do sistema, eles são combinados nos locais desejados (ver Figura 1). A idéia é permitir que os objetos tratem apenas dos interesses de negócio a que são destinados sem se importar com a forma com que os interesses sistêmicos serão tratados pelos aspectos. Por isso, o ideal é que um objeto não saiba da existência de um aspecto, sendo obrigação deste acessar e tratar os interesses sistêmicos de acordo com a necessidade de um objeto.

 

Figura 1. Diferença entre interesses transversais espalhados no sistema e a abordagem de modularização através dos aspectos.

 

Dentro desse contexto, este artigo tem por objetivo apresentar o desenvolvimento de sistemas utilizando AspectJ, uma extensão da linguagem Java, através da ferramenta AJDT – AspectJ Development Tool (ver seção Links) auxiliando na criação de aspectos que serão desenvolvidos através de um estudo de caso em Java, que permitirá ao leitor maior entendimento dos conceitos abordados. A plataforma utilizada para a realização do estudo de caso foi a IDE Eclipse. Para o entendimento da linguagem, faz-se necessário a compreensão dos conceitos básicos sobre o desenvolvimento orientado a aspectos, que serão explicados na seção seguinte.

Fundamentos básicos da Programação Orientada a Aspectos (POA)

Programação de Orientada a Aspectos (POA) foi criada para complementar a programação orientada a objetos através de novos conceitos e técnicas de modularização de código. Para isso, a programação orientada a aspectos envolve basicamente três etapas de desenvolvimento (ver Figura 2):

1.Decomposição aspectural (aspectual decomposition): nesta etapa, os interesses transversais são identificados e separados dos interesses de negócio;" [...] continue lendo...

Artigos relacionados