DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Artigo Java Magazine 70 - Fundamentos de AOP para aplicações Java

Desenvolva aspectos que interajam com objetos de negócio de forma transparente, mantendo eficiência e coerência do modelo de negócio






Fundamentos de AOP para aplicações Java

Aprenda a desenvolver aspectos para encapsular implementações de arquitetura das implementações de negócio

Desenvolva aspectos que interajam com objetos de negócio de forma transparente, mantendo eficiência e coerência do modelo de negócio

 

De que se trata o artigo:

O artigo fundamenta o paradigma Orientado a Aspecto abordando seus elementos e duas formas de implementação Java. Uma através da linguagem AspectJ e outra através do framework Spring AOP. O artigo aborda também os benefícios do uso de design patterns através de AOP.

Para que serve:

Este artigo fundamenta e ilustra as implementações e conceitos do paradigma Orientado a Aspecto, utilizando duas ferramentas conhecidas: AspectJ e Spring AOP.

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

O paradigma Orientado a Aspecto deve ser utilizado como um complemento ao paradigma Orientado a Objetos. Portanto, na análise e modelagem de uma aplicação, podemos usufruir destes conceitos para facilitar o desenvolvimento da aplicação.

Fundamentos de AOP para aplicações Java:

O uso do paradigma Orientado a Aspecto (AOP) complementa implementações no modelo orientado a objeto, facilitando o desenvolvimento das aplicações e separando a implementação de regras de negócio de infra-estrutura. AOP traz mecanismos que interagem e controlam objetos em tempo de execução e compilação, abstraindo qualquer implementação que afetará o uso da aplicação “horizontalmente”. O corte “horizontal” na aplicação é feito quando funcionalidades genéricas que interagem diversas vezes no ciclo de vida dos objetos são candidatas a esta abstração por parte de um aspecto.

AOP também facilita a utilização de design patterns dentro de uma aplicação, atuando em segundo plano sobre o controle dos objetos por parte da implementação destes padrões.

  

Como todos os paradigmas de programação, AOP (Aspect-Oriented Programming) é baseado em conceitos pré-existentes, que já foram explorados no passado, porém são limitados para algumas situações. AOP utiliza vários conceitos de diferentes domínios de tecnologia, focando-se em metaprogramação. Também se utiliza do conceito "programação baseada por contratos", considerado chave no paradigma orientado a objeto (OO), mas pouco utilizado. Este conceito é realizado através de pré-condições e pós-condições, implementáveis em AOP por instruções (métodos) "before" e "after".

Atualmente, o paradigma orientado a objeto vem sendo primordial para o desenvolvimento de aplicações. A cada momento, novas aplicações complexas são escritas utilizando linguagens orientadas a objeto, em nosso caso, Java. AOP aparece neste cenário não como uma alternativa, e sim, como um complemento ao paradigma orientado a objetos.

Duas limitações podem ser vistas ao desenvolver de aplicações orientadas a objetos: crosscutting functionalities e code scattering.

A primeira limitação refere-se ao desenvolvimento da integridade de negócio, onde serão criadas verificações sobre dependências no modelo de negócio, como por exemplo: Um objeto Cliente não pode ser removido enquanto uma Ordem de Pagamento, em seu nome, não for paga. A solução mais comum, conforme descrito acima é aplicar verificações (os famosos IFs) dentro do método de remoção do Cliente. Porém, tal comportamento não deve ser atribuído ao Cliente, e sim, ao controle de Ordem de Pagamento. Uma solução mais eficiente é adotar o uso de AOP para realizar o comportamento esperado à remoção do Cliente. Essa solução será realizada através de um aspecto. A Figura 1 mostra a integração de um AOP em um modelo de negócio.

 

Figura 1. Integrando funcionalidades de “crosscutting”.

Observem que o aspecto (no caso, implementado pelo Hibernate, que pode ser considerado uma ferramenta AOP especializada no aspecto de persistência) abstraiu das classes de negócio o uso da persistência, assim como a dependência de bibliotecas para tal objetivo. Quanto maior a transparência do uso de tecnologias das classes da aplicação, maior fidelidade e coerência ao modelo de negócio.

A segunda limitação refere-se à mudança dinâmica de métodos e seus argumentos. Esta limitação alerta para constantes atualizações ao código da aplicação, conforme sua evolução e manutenção. Ou seja, caso exista dependência na chamada de métodos de um serviço, que terá seus argumentos alterados, por exemplo, esta modificação terá um impacto grande em sua estrutura de objetos. Para diminuir este problema, devem-se agrupar os métodos deste serviço que realizam o processo ou processamento de negócio em um método, tendo assim, uma chamada e apenas uma dependência a este serviço, veja a Figura 2.

 

Figura 2. O impacto de um aspecto em uma estrutura com múltiplas dependências de um processo comum.

As dependências criadas entre objetos da aplicação e APIs técnicas ou bibliotecas de terceiros, causam uma limitação indireta no uso do paradigma orientado a objetos, tanto em implementação como em modelagem da aplicação.

Este problema é comum em aplicações Java orientada a objetos quando se utilizam de frameworks como: Hibernate, JSF (Java Server Faces), Struts, etc. O modelo de objetos não leva em consideração o encapsulamento para o uso de tais dependências, causando assim, um forte acoplamento da aplicação com as bibliotecas de terceiros.

O conceito de Dependency Inversion (inversão de dependência) ajuda a aumentar o encapsulamento da aplicação e baixar a dependência entre os objetos da aplicação e bibliotecas de terceiros, veja a Figura 3.

 

Figura 3. Injeção de dependência entre objetos e bibliotecas de terceiro em um modelo OO e AOP.

Este conceito auxilia no desenvolvimento de modelos baseados na programação por interface. Um exemplo de tecnologia e framework que auxiliam neste desenvolvimento são: EJB (Enterprise JavaBeans) e Spring.

Fundamentos do AOP

Todo paradigma de programação novo trás novos fundamentos e definições. Portanto, AOP trás elementos importantes para o seu entendimento, são eles:

·         Aspect - unidade de programação criada para capturar uma funcionalidade que "corta" (crosscut) a aplicação. Alguns exemplos de possíveis aspectos são: Controle de Log, Controle de Exceção, Persistência, Segurança, Transação, etc.

"


ATENÇÃO! A exibição deste artigo foi interrompida.


  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Java Magazine DIGITAL ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!






    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Fábio Augusto Falavinha

Fábio Augusto Falavinha é Arquiteto de Software/Desenvolvedor pela ZBRA Solutions, atuando há mais de 10 anos com Java/Java EE. Bacharel em Ciência da Computação pela Faculdade Sumaré e pós-graduado em Gestão de Qualidade de Software pela faculdade Senac. Torcedor fanático do Corintinhas.


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
0   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03