24/09/2005
AOP – ConceitosFundamentais
por Paulo César M. Jeveaux
24/09/2005 2
Agenda
Apresentação
Vocabulário Básico
Conceitos I
Conceitos II
FrameWorks
HelloWorld
Mercado
Tendências
24/09/2005 3
Paulo César M. Jeveaux
Javanês desde 2000;Mantenedor do Portal Java
www.portaljava.comConsultor Java/J2EE pela Consist Software Brasil;Participante de diversos grupos e comunidades de Java, Linux e Software Livre em Geral.
24/09/2005
Apresentação
24/09/2005 5
Apresentação
O ProblemaSeparar das Regras de Negócio códigos que são fundamentais para o funcionamento da Aplicação.
24/09/2005 6
Apresentação
Um exemploLogging. Fundamental em inúmeras aplicações. Precisam ser implementados. Alteram diversas (ou todas) classes e métodos do sistema.
24/09/2005 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 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 9
Apresentação
AOP X OOPApesar 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 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
Vocabulário Básico
24/09/2005 12
Vocabulário Básico
Join Points
PointCuts
Advices
Aspects
Weaver
AOP Proxy
Concern
Target Object
24/09/2005
Conceitos Fundamentais I
24/09/2005 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 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 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 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 "montar" o objeto final a partir de uma classe e um aspecto, que foram desenvolvidos de maneira separada.
24/09/2005 18
Conceitos Fundamentais I
24/09/2005
Conceitos Fundamentais II
24/09/2005 20
Conceitos Fundamentais II
É preciso entender algumas fases fundamentais para o desenvolvimento baseado em Aspectos:
Decomposição;Implementação;Recomposição;
24/09/2005 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 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 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 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
Frameworks
24/09/2005 26
Frameworks
AspectJ – www.eclipse.org/aspectjCriado 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 27
Frameworks
AspectWerkz –www.aspectwerkz.codehaus.org
Alta Simplicidade;Boa performance;Aspectos codificados em Java;
24/09/2005 28
Frameworks
JBoss AOP –www.jboss.org/products/aop
100% em Java;Permite Aspectos dinâmicos. Definidosem XML;Suporte a Anotações do Java5;
24/09/2005 29
Frameworks
Spring Framework –www.springframework.org
Permite Aspectos dinâmicos. Definidosem XML;Suporte a Anotações do Java5;Integrado ao “resto” do Spring =P
24/09/2005 30
Frameworks
Nanning – www.nanning.codehaus.org
Dynaop – dynaop.dev.java.net
CAESAR – www.caesarj.org
EAOP - http://www.emn.fr/x-info/eaop/tool.html
JAC – jac.objectweb.org
Colt - http://hoschek.home.cern.ch/hoschek/colt
DynamicAspects - http://dynamicaspects.sourceforge.net
24/09/2005
Exemplo: HelloWorld
24/09/2005 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 33
HelloWorldAOP01 package br.com.jeveaux.palestras.aop;0203 /**04 * @author Jeveaux05 *06 */07 public class HelloWorldAOP {0809 public static void main(String args[]) {10 HelloWorldAOP world = new HelloWorldAOP();11 world.irAoEJES();12 }1314 public void irAoEJES() {15 System.out.println(“Estou no EJES!");16 }17 }
24/09/2005 34
HelloWorldAOP01 package br.com.jeveaux.palestras.aop;0203 /**04 * @author Jeveaux05 *06 */07 import org.codehaus.aspectwerkz.joinpoint.JoinPoint;0809 public class MyAspect {1011 public void antesDoEJES(JoinPoint joinPoint) {12 System.out.println(“Pegar o onibus ou o taxi...");13 }1415 public void depoisDoEJES(JoinPoint joinPoint) {16 System.out.println(“Sair com o pessoal do Evento e voltar pra casa...");17 }18 }
24/09/2005 35
HelloWorldAOP
01 <aspectwerkz>02 <system id="AspectWerkzExample">03 <package name=" br.com.jeveaux.palestras.aop">04 <aspect class="MyAspect">05 <pointcut name="greetMethod"expression="execution(* HelloWorldAOP.irAoEJES(..))"/>06 <advice name=“antesDoEJES" type="before" bind-to="greetMethod"/>07 <advice name=“depoisDoEJES" type="after" bind-to="greetMethod"/>08 </aspect>09 </package>10 </system>11 </aspectwerkz>
24/09/2005 36
HelloWorldAOP
Compilando a Aplicação
javac –d target HelloWorldAOP.java
Compilando o Aspecto
javac -d target -classpath $ASPECTWERKZ_HOME/lib/aspectwerkz-2.0.jar MyAspect.java
Rodando
$ASPECTWERKZ_HOME/bin/aspectwerkz -Daspectwerkz.definition.file=aop.xml -cp target br.org.justjava.palestras.aop.HelloWorldAOP
24/09/2005 37
HelloWorldAOP
Pegar o onibus ou o taxi…
Estou no EJES!
Sair com o pessoal do Evento e voltarpra casa…
24/09/2005
Mercado
24/09/2005 39
Mercado
Muito pouco usado profissionalmente;
Poucos projetos totalmente Orientadosa Aspectos;
Grande Adoção em Projetos Open Source;
24/09/2005
Tendências
24/09/2005 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 42
Referências
AspectJ Project: http://www.eclipse.org/aspectj
AOSD Aspect Oriented Software Development: http://aosd.net
Fórum do Portal Java: http://www.portaljava.com
IBM: http://www-106.ibm.com/developerworks/library/j-aspectj
Multi-Dimensional Separation of Concerns: www.research.ibm.com/hyperspace
24/09/2005 43
That’s all folks
Muito Obrigado a todos;
Contatos:
Paulo César M. Jeveaux (Jevô)
www.portaljava.com
24/09/2005
AOP – ConceitosFundamentais
por Paulo César M. Jeveaux
Top Related