O documento apresenta os conceitos fundamentais de Programação Orientada a Aspectos (AOP). Resume os principais pontos como join points, pointcuts, advices e aspects. Explica como a AOP separa os crosscutting concerns dos comuns e como são implementados e recompostos através do weaver. Apresenta exemplos de frameworks como AspectJ e AspectWerkz e um exemplo Hello World usando este último framework.
2. Agenda
Apresentação FrameWorks
Vocabulário Básico HelloWorld
Conceitos I Mercado
Conceitos II Tendências
24/09/2005 2
3. Paulo César M. Jeveaux
Javanês desde 2000;
Mantenedor do Portal Java
www.portaljava.com
Consultor Java/J2EE pela Consist
Software Brasil;
Participante de diversos grupos e
comunidades de Java, Linux e
Software Livre em Geral.
24/09/2005 3
5. Apresentação
O Problema
Separar das Regras de Negócio códigos
que são fundamentais para o
funcionamento da Aplicação.
24/09/2005 5
6. Apresentação
Um exemplo
Logging. Fundamental em inúmeras
aplicações. Precisam ser implementados.
Alteram diversas (ou todas) classes e
métodos do sistema.
24/09/2005 6
7. Apresentação
Usar AOP possibilita que classes
contenham apenas o código necessário
para os seus objetivos, sem a necessidade
de inclusão de blocos auxiliares para outros
fins, como auditoria, segurança, controle de
transações, gerência de threads, tratamento
de erros e, claro, logging. Com a separação
destes aspectos do código, conseguimos:
24/09/2005 7
8. Apresentação
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 têm
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 a diferentes
classes de um projeto.
24/09/2005 8
9. Apresentação
AOP X OOP
Apesar dos nomes Programação Orientada a
Aspectos e Programação Orientada a Objetos
nos fazer pensar, erroneamente, em
metodologias concorrentes, elas não são, na
verdade elas se completam e se refinam
quando são usadas juntas, uma auxiliando e
melhorando a implementação da outra, a AOP e
OOP quando usadas corretamente,
proporcionam a real separação e organização
da aplicação, não só de camadas, mas também
dos aspectos ligados ao projeto.
24/09/2005 9
10. Apresentação
A Programação Orientada a Aspectos foi introduzida em 1996
por Gregor Kickzales, quando estava no Xerox Palo Alto
Research Center.
G. Kiczales et al., Xerox PARC, 1997 - principles of AOP; first
AOP framework - AspectJ (extensão para o Java +
ferramentas);
Desenvolvido no Xerox PARC (Palo Alto RC) e lançada em
1998
O PARC transferiu AspectJ para eclipse.org em Dez/2002.
24/09/2005 10
14. Conceitos Fundamentais I
Join Points - Pontos bem definidos de
execução de um programa, que são
utilizados para inserção de aspectos.
São basicamente as chamadas de
métodos e acesso de membros de
classes.
24/09/2005 14
15. Conceitos Fundamentais I
Pointcuts - Construções no aspecto
que reúnem um ou mais join points.
Um pointcut pode ser criado a partir da
utilização de expressões baseadas em
outros pointcuts.
24/09/2005 15
16. Conceitos Fundamentais I
Advices - São os códigos inseridos
para modificar o comportamento de
uma classe. Podem ser executados
antes, depois ou simultaneamente a
um join point.
24/09/2005 16
17. Conceitos Fundamentais I
Aspects - Encapsula os advices e os
pointcuts em unidades funcionais. Os
aspcectos estão para a Orientação a
Aspectos assim como as classes estão para
a Orientação a Objetos.
Weaver - Programa capaz de quot;montarquot; o
objeto final a partir de uma classe e um
aspecto, que foram desenvolvidos de
maneira separada.
24/09/2005 17
20. Conceitos Fundamentais II
É preciso entender algumas fases
fundamentais para o desenvolvimento
baseado em Aspectos:
Decomposição;
Implementação;
Recomposição;
24/09/2005 20
21. Conceitos Fundamentais II
Decomposição: os vários concerns do
sistema são identificados e classificados
como comuns ou crosscutting.
Implementação: os concerns são
implementados separadamente em classes
(para os concerns comuns) e aspectos
(para os crosscutting concerns).
24/09/2005 21
22. Conceitos Fundamentais II
Recomposição: o sistema é
recomposto à partir dos concerns
implementados segundo regras de
recomposição. Esta fase é chamada
de weaving.
24/09/2005 22
23. Conceitos Fundamentais II
Uma implementação básica de AOP
consiste em: uma linguagem para
programar os componentes (por
exemplo, Java), uma linguagem para
programar os aspectos (por exemplo,
o AspectJ ou Java) e um weaver para
combinar as duas linguagens.
24/09/2005 23
24. Conceitos Fundamentais II
O weaver é uma espécie de montador
que tem como entrada um programa
de componente e o(s) programa(s) de
aspectos e como saída um programa
em uma linguagem específica (por
exemplo, Java).
24/09/2005 24
26. Frameworks
AspectJ – www.eclipse.org/aspectj
Criado pelo Xerox SPARC em 1997 (deu
origem a AOP);
Primeiro Framework de Aspectos a ser
usado em aplicações profissionais;
Transferido para o Eclipse Foundation
em 2002;
Os aspectos não são codificados em
Java;
24/09/2005 26
27. Frameworks
AspectWerkz –
www.aspectwerkz.codehaus.org
Alta Simplicidade;
Boa performance;
Aspectos codificados em Java;
24/09/2005 27
28. Frameworks
JBoss AOP –
www.jboss.org/products/aop
100% em Java;
Permite Aspectos dinâmicos. Definidos
em XML;
Suporte a Anotações do Java5;
24/09/2005 28
29. Frameworks
Spring Framework –
www.springframework.org
Permite Aspectos dinâmicos. Definidos
em XML;
Suporte a Anotações do Java5;
Integrado ao “resto” do Spring =P
24/09/2005 29
32. HelloWorld
Usaremos no Exemplo o Framework
AspectWerkz
Mais Simples;
Aspectos em Java;
Boa documentação;
Baixar em:
http://aspectwerkz.codehaus.org/releases.html
Última versão estável: 2.0
24/09/2005 32
33. HelloWorldAOP
01 package br.com.jeveaux.palestras.aop;
02
03 /**
04 * @author Jeveaux
05 *
06 */
07 public class HelloWorldAOP {
08
09 public static void main(String args[]) {
10 HelloWorldAOP world = new HelloWorldAOP();
11 world.irAoEJES();
12 }
13
14 public void irAoEJES() {
15 System.out.println(“Estou no EJES!quot;);
16 }
24/09/2005 33
17 }
34. HelloWorldAOP
01 package br.com.jeveaux.palestras.aop;
02
03 /**
04 * @author Jeveaux
05 *
06 */
07 import org.codehaus.aspectwerkz.joinpoint.JoinPoint
;
08
09 public class MyAspect {
10
11 public void antesDoEJES(JoinPoint joinPoint) {
12 System.out.println(“Pegar o onibus ou o
taxi...quot;);
13 }
14
15 public void depoisDoEJES(JoinPoint joinPoint) {
16 System.out.println(“Sair com o pessoal do
Evento e voltar pra casa...quot;);
17 }
18 }
24/09/2005 34
39. Mercado
Muito pouco usado profissionalmente;
Poucos projetos totalmente Orientados
a Aspectos;
Grande Adoção em Projetos Open
Source;
24/09/2005 39
41. Tendências
Para os que acompanham AOP podem ser
algumas tendências já bem batidas.
Aspectos Dinâmicos
Grande expectativa no Spring Framework e DynAOP
Simplicidade e Performance
AspectWerkz
24/09/2005 41