AOP - Aspect Oriented Programing

Algém ai já mexeu em AOP e AspectJ???
Será que podia dar uma idéia não tá bem claro

eu mexo com muito pouco de AOP, junto com o Spring, mas a ideia é basicamente a mesmo,
posso ajudar em alguma coisa??

Olá

O que especificamente não está claro?

[]s
Luca

Ae
Meu trabalho de diplomação basicamente eh implementar um sistema de exemplo OO e outro AOP utilizando AspectJ…
QQ coisa eh soh perguntar ae…

Abraços

[quote=“YellowBike”]Algém ai já mexeu em AOP e AspectJ???
Será que podia dar uma idéia não tá bem claro[/quote]

Procure aqui no forum do GUJ… ja teve milhares de discussoes sobre AOP.

Rafael

Bom eu gostaria de alguns tutorias, eu peguei um no site do eclipse se acho mas ele atropela. O que são POINTCUTS, JOIN POINTS, ADVICES.
No tutorial que eu achei ele explica pouco e usando um exemplo com programação distribuida, que eu tb nunca estudei, a sintaxe não é explicada e não mostra como integrar os aspéctos criados com o código Java.
Será que alguém pode me dar uma luz, eu estou pensando em inovar aqui na facul e iniciar um projeto de iniciação ciêntifica usando AspectJ, a AOP é novidade por aqui!

Valeu!!!

Olá

Isto não pretende ser um tutorial, apenas algumas dicas para introduzir AOP usando AspectJ.

AOP geralmente é usado para implementar regras que devem atuar em locais do programa que podem ser reconhecidos por seu aspecto. Uma aplicação clássica é a inclusão de logs. Usando AOP poderíamos fazer com que determinados trechos de código pudessem ser logados sem alterar o código original. Usando AspectJ, incluímos algumas instruções específicas do AspectJ citando os trechos de código que podem ser reconhecidos e que devem ser logados. O AspectJ vai costurar no código as instruções de log que queremos incluir. Outras implementações fazem coisa parecida as vezes fazendo um pouco menos privilegiando a simplicidade ou tentando fazer muitas coisas mas de forma complexa e difícil de disseminar no dia a dia das empresas. O último é mais ou menos é o caso do AspectJ.

Com AOP se pode separar o trecho de código que realmente resolve seu problema daqueles trechos administrativos que acabam aparecendo repetidas vezes no sistema. Pode ser o caso da impressão de logs, autorizações e autenticações, controle de transações e tudo o mais que pode ser retirado do código e programado a parte para ser costurado no código a posteriori. Vantagens:

  • O código fica limpo,
  • as responsabilidades no desenvolvimento podem ser separadas pois o cara bom de log nem sempre entende do negócio,
  • posterga decisões de projeto que as vezes podem influir no código todo,
  • melhora as chances de reaproveitamento de código.

Em AOP você escreve seu código normalmente e depois escreve mais algumas linhas de código (instruções AOP, os pointcuts) que cita as instruções do seu código e diz como elas devem ser modificadas de modo global.

Exemplos:
Posso dizer (nos pointcuts) que sempre que um determinado método (tipo de join point) for chamado quero que (um tipo de advice) antes seja impresso uma linha no log. Ou escrever (pointcut) que quando um determinado campo mudar de valor (Join point) depois disto deve ser chamado (advice) um determinado método. A inclusão da impressão do log ou da chamada do tal método é feita pelo AspectJ que faz isto remendando (ou costurando) o código original com a inclusão das instruções AOP. Isto acontece em tempo de execução, não é um pré-processador que inclui trechos de códigos (advices) nos pontos selecionados (join points).

Conceitos:
Crosscutting implementação das regras chamadas de weaving rules

weaving rules regras especificando qual ação deve ser feita quando certos trechos de código são encontrados

Elementos para fazer o crosscutting
O AspectJ usa extensões de programação Java para especificar as regras weaving rules. As extensões reconhecem trechos do seu programa e dizem ao AspectJ como recosturar seu programa com a inclusão das regras.

Join point é um ponto identificável do seu código. Pode ser a chamada de um método ou a atribuição de um objeto.

Pointcut é o código AOP a ser escrito para reconhecer os join points

Advice é o código a ser executado com o join point selecionado pelo Pointcut. Pode ser executado antes, durante ou depois da execução do join point

[]s
Luca

O seguinte trecho seria corréto:

// Classe TEST
public class Test {

  public void main(String[] args) {
    Class.forName("Uma_Classe _Qualquer");
    System.out.printf("Class foi carregada com sucesso");
  }

}




// Aspecto
public aspect Execao {

  poitcut loadClass():
  within(Class) && call(* forName(String)) && args(classe);

  after(String classe) thowing[ClassNotFoundException]: loadClass(classe)
  {
    System.err.println("A classe " + classe + " não foi encontrada");
    System.exit(-1);
  }

}

… ou seja eu não verifiquei a exeção na classe Test.

Mais uma coisa existe algum plugin pro Eclipse ou IDE p/ desevolver em AspectJ?

sim existe o ajdt , mas ele nao ajuda muita coisa nao…
me passe seu mail q eu te passo uns artigos bons…

Antes que comece a feira, ponha o artigo disponivel em alguma URL, e poste o link aqui… se voce nao tiver acesso a nenhum host, da um toque pros moderadores (em private message), que a gente disponibiliza aqui no GUJ :wink:

Olá

Yellow
O plugin do AJDT do AspectJ para o eclipse é um daqueles que se busca usando o próprio eclipse “Help”/“Software Updates”/“Update Manager” O resto das instruções vc busca aqui

Duardor
Coloca os links aqui mesmo.

[]s
Luca

Ok mas não são artigos meus…
Sao principalmente do Gregor Kiczales e têm um da UFPE do Paulo Borba interessante tb…
Soh q eu nao tenho mais os links, soh os pdf’s
Como faço??

Abraços

Manda pro meu e-mail, que eu dou um jeito :slight_smile:

cv@codehaus.org

yellowbike@ibestvip.com.br

Ai valeu mesmo, agora so uma ultima duvida qual a realidade sobre AOP?
Eu ouvi falar sobre programacao subjetiva, indireta mas parece que AOP e a proposta mais promissora. Existe alguma aplicacao seria que faz uso desse paradigma, quais sao as previsoes dos profissionais?

Aqui na facul nenhum professor ouviu falar de AOP!

Esse artigo do Paulo Borba me interessaria muito!!!

Dae galera mandei pro cv e ele vai fazer um broadcast pra vcs…
Cobrem dele agora! :twisted: :twisted: :twisted:

Abraços

Pro cara que tá com os artigos será que podia repassar p/ mim tenho um trabalho p/ fazer p/ final desse mes e gostaria de utilizar AspectJ.

Mas uma pergunta, tem como instalar manualmente o AJDT? Aqui tá dando um erro e o eclipse não consegue abrir o editor de AspectJ.
Estou usando o Eclipse 3.8 a versão do AJDT eu não sei bem qual é pois usei o próprio eclipse p/ baixar e instalar.

Ae Yellow cobre do cv
Jah mandei pra ele…

Para akeles q nao podem esperar , referencias do livro Mastering AspectJ:

Overview Sites

AspectJ Project home site (www.eclipse.org/aspectj)
Mastering AspectJ: Aspect-Oriented Programming in Java book Web
site (www.wiley.com/compbooks/gradecki)
Aspect-Oriented Software Development (www.aosd.net)
Research on Aspect-Oriented Programming
(www.emn.fr/sudholt/research/aop.html)
University of Washington—Gregor Kiczales Presentation
(http://murl.microsoft.com/LectureDetails.asp?185)

People

Gregor Kiczales, ApectJ team lead (www2.parc.com/csl/members/gregor/)
Concurrent Programming Research Group (www.iit.edu/~concur/)

Tutorial in Nature

Improve Modularity with Aspect-Oriented Programming (www-
106.ibm.com/developerworks/java/library/j-aspectj/)
I Want My AOP! Part 1 (www.javaworld.com/javaworld/jw-01-2002/jw-0118-
aspect.html)
I Want My AOP! Part 2 (www.javaworld.com/javaworld/jw-03-2002/jw-0301-
aspect2.html)
I Want My AOP! Part 3 (www.javaworld.com/javaworld/jw-04-2002/jw-0412-
aspect3.html)
PowerPoint Presentation on Aspect-Oriented and Adaptive Programming
(www.ccs.neu.edu/research/demeter/talks/erfurt-keynote/erfurttalk.
ppt)
Aspect-Oriented Programming in Java
(www.voelter.de/data/articles/aop/aop.html)
Aspect-Oriented Decomposition and Composition (www.prakinf.
tu-ilmenau.de/~czarn/aop/)
Three Examples of Aspect-Oriented Programming
(www.cse.ogi.edu/~black/3AspectExamples/)
Aspect-Oriented Programming with AspectJ (www.sauria.com/
presentations/Seajug-12-2001.pdf)
Aspect-Oriented Programming with C# and .NET (www.dcl.hpi.unipotsdam.
de/folien/Net-Days/AOP-with-NET_files/frame.htm)
Aspect-Oriented Programming with AspectJ: A Short Introduction
(http://rzserv2.fhnon.de/~lg002556/basics/AspectOrientedProgramming.pdf)
Untangle Your Code with Aspect-Oriented Programming
(www.trcinc.com/knowledge/presentations/Untangle_Your_Code_with_
Aspect-Oriented_Programming_TRCInc.ppt)
Aspect-Oriented Programming (www.cs.tut.fi/~bitti/
generat-seminaari/aop.pdf)

Papers

Aspect-Oriented Programming (www2.parc.com/csl/groups/sda/
publications/papers/Kiczales-ECOOP97/)
Untangling Code
(www.technologyreview.com/articles/tr10_kiczales0101.asp)
Emerging Technologies That Will Change the World (www.
technologyreview.com/articles/tr10_toc0101.asp)
Aspect-Oriented Programming Enables Better Code Encapsulation and
Reuse (http://msdn.microsoft.com/msdnmag/issues/02/03/AOP/AOP.asp)
Separation of Concerns
(ftp://www.ccs.neu.edu/pub/people/crista/papers/separation.ps)
Thoughts on Aspect-Oriented Programming
(http://openmap.bbn.com/~kanderso/aop/AOP-thoughts.html)
Gregor Kiczales’ Publications (www2.parc.com/csl/groups/sda/
publications.shtml)
Semantics of Aspect-Oriented Programming (www.cwi.nl/~ralf/saop/)
AOP Publications (www.emn.fr/sudholt/research/by_name.html)
An Initial Assessment of Aspect-Oriented Programming
(www.cs.ubc.ca/labs/se/papers/1999/icse99-aop.pdf)
Applying Aspect-Oriented Programming to Security
(www.viega.org/papers/aop-cutter.pdf)
The Impact of Aspect-Oriented Programming on Future Design
(www.inf.ethz.ch/vs/edu/WS0001/UI/slides/ui_08AspectOP.pdf)
Aspect-Oriented Programming with Reflection and Dynamism
(www.ai.mit.edu/~gregs/dyn-aop.html)
Can Aspect-Oriented Programming Lead to More Reliable Software?
(www.computer.org/software/so2000/s6019abs.htm)
Aspect-Oriented Programming with Model Checking (www.graco.c.
u-tokyo.ac.jp/~tamai/pub/aosd2002.pdf)
Treecc: An Aspect-Oriented Approach to Writing Compilers
(www.southern-storm.com.au/treecc_essay.html)

Other Paradigms

Multi-Dimensional Separation of Concerns: Software Engineering
using Hyperspaces (IBM) (www.research.ibm.com/hyperspace/)
IBM’s Subject-Oriented Programming (www.research.ibm.com/sop/)
Software Development and Systems
Demeter: Aspect-Oriented Software Development
(www.ccs.neu.edu/research/demeter/)
Java Aspect Components (http://jac.aopsys.com/)
TransWarp and Python
(www.zope.org/Members/pje/Wikis/TransWarp/HomePage)
Aspect-Oriented Programming and the CLR
(www.iunknown.com/Weblog/fog0000000093.html)
Aspect-Oriented Modeling with UML
(http://lglwww.epfl.ch/workshops/aosd-uml/papers.html)

Events

Tutorial and Workshop on Aspect-Oriented Programming and
Separation of Concerns
(www.comp.lancs.ac.uk/computing/users/marash/aopws2001/)
Third International Conference on Metalevel Architectures and
Separation of Crosscutting Concerns (Reflection 2001)
(www.openjit.org/reflection2001/)
OOPSLA 2001 Workshop on Advanced Separation of Concerns in
Object-Oriented Systems (www.cs.ubc.ca/%7ekdvolder/Workshops/
OOPSLA2001/ASoC.html)
ETAPS 2002 Software Composition Workshop
(http://www.easycomp.org/sc2002/index.hei?&card=heises.8f16020fdfb773a08
7b31726d96698b0)
First International Conference on Aspect-Oriented Software Development
(http://trese.cs.utwente.nl/aosd2002.htm)
Aspect-Oriented Software Development Conference 2003 in Boston
(http://aosd.net/conference)
Aspect-Oriented Programming Conference 1997
(http://trese.cs.utwente.nl/aop-ecoop99/aop97.html)
Aspect-Oriented Programming Conference 1998
(http://trese.cs.utwente.nl/aop-ecoop99/aop98.html)
Aspect-Oriented Programming Conference 1999
(http://trese.cs.utwente.nl/aop-ecoop99/)
Foundations of Aspect-Oriented Programming
(www.cs.wustl.edu/~cytron/FOAL/)

Universities

Aspect-Oriented Software Development (www.comp.lancs.ac.uk/
computing/aop/)
MIT Technology Review and Aspect-Oriented and Adaptive
Programming (www.ccs.neu.edu/research/demeter/aop/publicity/
mit-tech-review.html)
AOP at Northeastern University
(www.ccs.neu.edu/home/lorenz/center/aop.html)

Abraços

Olá! td bem?
Vc ta por dentro da AOP, né?
Tenho uma aplicação web, uso spring, hibernate e struts e gostaria de usar alguns recursos da AOP.
Por exemplo: tenho q fazer a auditoria do sistema e parece q a AOP permite fazer “filtros”, tais como:
exemplo: apos executar o metodo save() passar por outro de minha escolha.
É isso mesmo? vc tem um exemplo de integração ?