SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
AOP – Conceitos
Fundamentais

     por Paulo César M. Jeveaux




                          24/09/2005
Agenda

       Apresentação         FrameWorks

       Vocabulário Básico   HelloWorld

       Conceitos I          Mercado

       Conceitos II         Tendências


24/09/2005                               2
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
Apresentação




               24/09/2005
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
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
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
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
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
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
Vocabulário Básico




                     24/09/2005
Vocabulário Básico

       Join Points   Weaver

       PointCuts     AOP Proxy

       Advices       Concern

       Aspects       Target Object


24/09/2005                           12
Conceitos Fundamentais I




                       24/09/2005
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
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
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
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
Conceitos Fundamentais I




24/09/2005                 18
Conceitos Fundamentais II




                       24/09/2005
Conceitos Fundamentais II

       É preciso entender algumas fases
       fundamentais para o desenvolvimento
       baseado em Aspectos:
             Decomposição;
             Implementação;
             Recomposição;



24/09/2005                                   20
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
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
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
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
Frameworks




             24/09/2005
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
Frameworks

       AspectWerkz –
       www.aspectwerkz.codehaus.org
             Alta Simplicidade;
             Boa performance;
             Aspectos codificados em Java;




24/09/2005                                   27
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
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
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                                                      30
Exemplo: HelloWorld




                      24/09/2005
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
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 }
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
HelloWorldAOP
01 <aspectwerkz>
02         <system id=quot;AspectWerkzExamplequot;>
03           <package name=quot;
br.com.jeveaux.palestras.aopquot;>
04             <aspect class=quot;MyAspectquot;>
05               <pointcut name=quot;greetMethodquot;
expression=quot;execution(* HelloWorldAOP.ir
AoEJES(..))quot;/>
06               <advice name=“antesDoEJESquot; ty
pe=quot;beforequot; bind-to=quot;greetMethodquot;/>
07               <advice name=“depoisDoEJESquot; t
ype=quot;afterquot; bind-to=quot;greetMethodquot;/>
08             </aspect>
09           </package>
10         </system>
11 </aspectwerkz>
24/09/2005                                     35
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                                                      36
HelloWorldAOP

       Pegar o onibus ou o taxi…

       Estou no EJES!

       Sair com o pessoal do Evento e voltar
       pra casa…


24/09/2005                                     37
Mercado




          24/09/2005
Mercado

       Muito pouco usado profissionalmente;

       Poucos projetos totalmente Orientados
       a Aspectos;

       Grande Adoção em Projetos Open
       Source;
24/09/2005                                    39
Tendências




             24/09/2005
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
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                                                        42
That’s all folks
       Muito Obrigado a todos;

       Contatos:

             Paulo César M. Jeveaux (Jevô)

             jeveaux@portaljava.com

             www.portaljava.com
24/09/2005                                   43
AOP – Conceitos
Fundamentais

     por Paulo César M. Jeveaux




                          24/09/2005

Mais conteúdo relacionado

Semelhante a AOP - ESJUG - 2005

Reutilização
ReutilizaçãoReutilização
Reutilizaçãoemjorge
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento webArlindo Santos
 
Tech Thursday -Spring Roo
Tech Thursday -Spring RooTech Thursday -Spring Roo
Tech Thursday -Spring Roomarcosbeirigo
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Fernando Godóy
 
Tópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsTópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsSaulo Lopes
 
Implementing Product Line Variabilities
Implementing Product Line VariabilitiesImplementing Product Line Variabilities
Implementing Product Line VariabilitiesMichel Alves
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...JP Clementi
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014Giovanni Bassi
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindJaydson Gomes
 
Padrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVMPadrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVMAricelio Souza
 
Vue.js o poder das render functions
Vue.js  o poder das render functionsVue.js  o poder das render functions
Vue.js o poder das render functionsVinicius Reis
 
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio PagotiComponentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio PagotiFábio Luiz Esperati Pagoti
 

Semelhante a AOP - ESJUG - 2005 (20)

Reutilização
ReutilizaçãoReutilização
Reutilização
 
Frameworks de desenvolvimento web
Frameworks de desenvolvimento webFrameworks de desenvolvimento web
Frameworks de desenvolvimento web
 
Tech Thursday -Spring Roo
Tech Thursday -Spring RooTech Thursday -Spring Roo
Tech Thursday -Spring Roo
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
Aumento de Produtividade no Desenvolvimento de Aplicações em Java com Spring ...
 
Tópicos Emergentes - DevOps
Tópicos Emergentes - DevOpsTópicos Emergentes - DevOps
Tópicos Emergentes - DevOps
 
Implementing Product Line Variabilities
Implementing Product Line VariabilitiesImplementing Product Line Variabilities
Implementing Product Line Variabilities
 
Palestra
PalestraPalestra
Palestra
 
JAVA REFLETCION
JAVA REFLETCIONJAVA REFLETCION
JAVA REFLETCION
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
TechEd Brasil 2010 - Novidades e razões para migrar para o microsoft .net fra...
 
Aop Aspect J 1.5.4
Aop Aspect J 1.5.4Aop Aspect J 1.5.4
Aop Aspect J 1.5.4
 
Aula 05
Aula 05Aula 05
Aula 05
 
ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014ASP.NET vNext no .NET Architects Days 2014
ASP.NET vNext no .NET Architects Days 2014
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMindCriando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMind
 
Padrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVMPadrões Arquiteturais - MVC, MVP e MVVM
Padrões Arquiteturais - MVC, MVP e MVVM
 
Vue.js o poder das render functions
Vue.js  o poder das render functionsVue.js  o poder das render functions
Vue.js o poder das render functions
 
Oficina cake php
Oficina cake phpOficina cake php
Oficina cake php
 
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio PagotiComponentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
 

Mais de Paulo César M Jeveaux

Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataformaWine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataformaPaulo César M Jeveaux
 
Empreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasiaEmpreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasiaPaulo César M Jeveaux
 
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...Paulo César M Jeveaux
 
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaCase Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaPaulo César M Jeveaux
 
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatosSCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatosPaulo César M Jeveaux
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMPaulo César M Jeveaux
 
Negociação de contratos de projetos de software
Negociação de contratos de projetos de softwareNegociação de contratos de projetos de software
Negociação de contratos de projetos de softwarePaulo César M Jeveaux
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMPaulo César M Jeveaux
 
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate SearchTurbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate SearchPaulo César M Jeveaux
 
Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004Paulo César M Jeveaux
 

Mais de Paulo César M Jeveaux (20)

Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataformaWine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
Wine.com.br - De zero a 300 milhões de faturamento na mesma plataforma
 
Empreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasiaEmpreendedorismo além do mundo da fantasia
Empreendedorismo além do mundo da fantasia
 
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
Case Giran 2011: os desafios no uso de práticas ágeis no dia-a-dia de uma sta...
 
E-commerce Além dos Sites
E-commerce Além dos SitesE-commerce Além dos Sites
E-commerce Além dos Sites
 
Controle de versão com GIT
Controle de versão com GITControle de versão com GIT
Controle de versão com GIT
 
Resenha Rework por Jeveaux
Resenha Rework por JeveauxResenha Rework por Jeveaux
Resenha Rework por Jeveaux
 
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-diaCase Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
Case Giran - Os desafios no uso de XP e SCRUM no dia-a-dia
 
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatosSCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
SCRUM e XP - Desenvolvimento Ágil de Software - Experiências e relatos
 
Desafios no e-commerce brasileiro
Desafios no e-commerce brasileiroDesafios no e-commerce brasileiro
Desafios no e-commerce brasileiro
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
 
Negociação de contratos de projetos de software
Negociação de contratos de projetos de softwareNegociação de contratos de projetos de software
Negociação de contratos de projetos de software
 
Desenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUMDesenvolvimento Ágil de Software com SCRUM
Desenvolvimento Ágil de Software com SCRUM
 
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate SearchTurbinando sua aplicação com Lucene, Solr e Hibernate Search
Turbinando sua aplicação com Lucene, Solr e Hibernate Search
 
Palestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnitPalestra Testes De Unidade Com JUnit
Palestra Testes De Unidade Com JUnit
 
Extreme Programming - XP
Extreme Programming - XPExtreme Programming - XP
Extreme Programming - XP
 
Desenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUMDesenvolvimento Ágil com SCRUM
Desenvolvimento Ágil com SCRUM
 
Certificação Digital
Certificação DigitalCertificação Digital
Certificação Digital
 
Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004Comunidades Virtuais Java - Conexão Java - 2004
Comunidades Virtuais Java - Conexão Java - 2004
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
JGoodies - Conexão Java 2005
JGoodies - Conexão Java 2005JGoodies - Conexão Java 2005
JGoodies - Conexão Java 2005
 

AOP - ESJUG - 2005

  • 1. AOP – Conceitos Fundamentais por Paulo César M. Jeveaux 24/09/2005
  • 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
  • 4. Apresentação 24/09/2005
  • 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
  • 11. Vocabulário Básico 24/09/2005
  • 12. Vocabulário Básico Join Points Weaver PointCuts AOP Proxy Advices Concern Aspects Target Object 24/09/2005 12
  • 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
  • 25. Frameworks 24/09/2005
  • 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
  • 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 30
  • 31. 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 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
  • 35. HelloWorldAOP 01 <aspectwerkz> 02 <system id=quot;AspectWerkzExamplequot;> 03 <package name=quot; br.com.jeveaux.palestras.aopquot;> 04 <aspect class=quot;MyAspectquot;> 05 <pointcut name=quot;greetMethodquot; expression=quot;execution(* HelloWorldAOP.ir AoEJES(..))quot;/> 06 <advice name=“antesDoEJESquot; ty pe=quot;beforequot; bind-to=quot;greetMethodquot;/> 07 <advice name=“depoisDoEJESquot; t ype=quot;afterquot; bind-to=quot;greetMethodquot;/> 08 </aspect> 09 </package> 10 </system> 11 </aspectwerkz> 24/09/2005 35
  • 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 36
  • 37. HelloWorldAOP Pegar o onibus ou o taxi… Estou no EJES! Sair com o pessoal do Evento e voltar pra casa… 24/09/2005 37
  • 38. Mercado 24/09/2005
  • 39. Mercado Muito pouco usado profissionalmente; Poucos projetos totalmente Orientados a Aspectos; Grande Adoção em Projetos Open Source; 24/09/2005 39
  • 40. 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 41
  • 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 42
  • 43. That’s all folks Muito Obrigado a todos; Contatos: Paulo César M. Jeveaux (Jevô) jeveaux@portaljava.com www.portaljava.com 24/09/2005 43
  • 44. AOP – Conceitos Fundamentais por Paulo César M. Jeveaux 24/09/2005