AOP - ESJUG - 2005

44
24/09/2005 AOP – Conceitos Fundamentais por Paulo César M. Jeveaux

Transcript of AOP - ESJUG - 2005

Page 1: AOP - ESJUG - 2005

24/09/2005

AOP – ConceitosFundamentais

por Paulo César M. Jeveaux

Page 2: AOP - ESJUG - 2005

24/09/2005 2

Agenda

Apresentação

Vocabulário Básico

Conceitos I

Conceitos II

FrameWorks

HelloWorld

Mercado

Tendências

Page 3: AOP - ESJUG - 2005

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.

Page 4: AOP - ESJUG - 2005

24/09/2005

Apresentação

Page 5: AOP - ESJUG - 2005

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.

Page 6: AOP - ESJUG - 2005

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.

Page 7: AOP - ESJUG - 2005

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:

Page 8: AOP - ESJUG - 2005

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.

Page 9: AOP - ESJUG - 2005

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.

Page 10: AOP - ESJUG - 2005

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.

Page 11: AOP - ESJUG - 2005

24/09/2005

Vocabulário Básico

Page 12: AOP - ESJUG - 2005

24/09/2005 12

Vocabulário Básico

Join Points

PointCuts

Advices

Aspects

Weaver

AOP Proxy

Concern

Target Object

Page 13: AOP - ESJUG - 2005

24/09/2005

Conceitos Fundamentais I

Page 14: AOP - ESJUG - 2005

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.

Page 15: AOP - ESJUG - 2005

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.

Page 16: AOP - ESJUG - 2005

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.

Page 17: AOP - ESJUG - 2005

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.

Page 18: AOP - ESJUG - 2005

24/09/2005 18

Conceitos Fundamentais I

Page 19: AOP - ESJUG - 2005

24/09/2005

Conceitos Fundamentais II

Page 20: AOP - ESJUG - 2005

24/09/2005 20

Conceitos Fundamentais II

É preciso entender algumas fases fundamentais para o desenvolvimento baseado em Aspectos:

Decomposição;Implementação;Recomposição;

Page 21: AOP - ESJUG - 2005

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).

Page 22: AOP - ESJUG - 2005

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.

Page 23: AOP - ESJUG - 2005

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.

Page 24: AOP - ESJUG - 2005

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).

Page 25: AOP - ESJUG - 2005

24/09/2005

Frameworks

Page 26: AOP - ESJUG - 2005

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;

Page 27: AOP - ESJUG - 2005

24/09/2005 27

Frameworks

AspectWerkz –www.aspectwerkz.codehaus.org

Alta Simplicidade;Boa performance;Aspectos codificados em Java;

Page 28: AOP - ESJUG - 2005

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;

Page 29: AOP - ESJUG - 2005

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

Page 30: AOP - ESJUG - 2005

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

Page 31: AOP - ESJUG - 2005

24/09/2005

Exemplo: HelloWorld

Page 32: AOP - ESJUG - 2005

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

Page 33: AOP - ESJUG - 2005

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 }

Page 34: AOP - ESJUG - 2005

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 }

Page 35: AOP - ESJUG - 2005

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>

Page 36: AOP - ESJUG - 2005

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

Page 37: AOP - ESJUG - 2005

24/09/2005 37

HelloWorldAOP

Pegar o onibus ou o taxi…

Estou no EJES!

Sair com o pessoal do Evento e voltarpra casa…

Page 38: AOP - ESJUG - 2005

24/09/2005

Mercado

Page 39: AOP - ESJUG - 2005

24/09/2005 39

Mercado

Muito pouco usado profissionalmente;

Poucos projetos totalmente Orientadosa Aspectos;

Grande Adoção em Projetos Open Source;

Page 40: AOP - ESJUG - 2005

24/09/2005

Tendências

Page 41: AOP - ESJUG - 2005

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

Page 42: AOP - ESJUG - 2005

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

Page 43: AOP - ESJUG - 2005

24/09/2005 43

That’s all folks

Muito Obrigado a todos;

Contatos:

Paulo César M. Jeveaux (Jevô)

[email protected]

www.portaljava.com

Page 44: AOP - ESJUG - 2005

24/09/2005

AOP – ConceitosFundamentais

por Paulo César M. Jeveaux