Você está na página 1de 25

Desenvolvimento

Orientado a Aspectos
rof. 1h|ago V|ana
Lamnv[reclfe.lfpe.edu.br
Viso Geral do
AspectJ
Viso Geral do AspectJ
!oln olnLs
! !"#$ &"#$'( (onLos de [uno) e qualquer ponLo
ldenucvel pelo AspecL! duranLe a execuo de um
programa.
! C AspecL! permlLe dlversos upos de )"#$ *"#$'(: enLradas e
saldas de meLodos, LraLamenLo de excees, consLruLores,
enLre ouLros.
olnLcuLs
! &"#$'+,'( so elemenLos da CrlenLao a AspecLos
uullzados para denlr um )"#$ *"#$'- como uma especle de
regra crlada pelo programador para especlcar evenLos
que sero aLrlbuldos a esses ponLos.
! Aps a ldenucao dos )"#$ *"#$'( para um deLermlnado
lnLeresse slsLmlco, e necessrlo agrup-los em um
*"#$'+,'. C *"#$'+,' aLua como um agrupador para um
deLermlnado )"#$ *"#$' a ser LraLado.
Viso Geral do AspectJ
Advlce
! L um Lrecho de cdlgo que deve ser execuLado para um ou
mals )"#$ *"#$'( seleclonados por um *"#$'+,'.
Viso Geral do AspectJ
AspecLos
! C aspecLo e a unldade modular prlnclpal em AspecL!, asslm
como a classe e a unldade prlnclpal em !ava. um aspecLo
agrupa *"#$'+,'( e ./0#+1(.
Viso Geral do AspectJ
AspecLos
! C elemenLo prlnclpal do AspecL! e o aspecLo. Cada aspecLo
assemelha-se a uma classe e pode Ler Ludo que uma classe
Lem: denles de varlvels, meLodos e resLrles de
acesso.
! Alem desses elemenLos, no enLanLo, aspecLos podem Ler
ouLros elemenLos. Cs dols upos prlnclpals de elemenLos no
AspecL! so *"#$'+,'( (ponLos de corLe) e advlces.
Viso Geral do AspectJ
AspecLos
! &"#$'+,'( so denles de lnsLanLes duranLe a execuo
de um programa. Cs ponLos de corLe no Lem nenhum
comporLamenLo. Lles denoLam onde e quando os aspecLos
Lero efelLo no programa como um Lodo.
! um ./0#+1 e um comporLamenLo. Lle especlca no s o
que ser felLo, na forma de uma sequncla de operaes
!ava, mas Lambem o momenLo em que sero felLas as
operaes. 1odo ./0#+1 e relaclonado a um ou mals
*"#$'+,'.
Viso Geral do AspectJ
AspecLos
! 213 1415*6" /" 7(*1+'"8"5,$#+./"39.) $" 1+6#*(1 15
7,6.:;9*3")1+'
! 213 1415*6" /" 7(*1+'"<"35.6#=.8.#4.9.) $" 1+6#*(1 15
7,6.:;9*3")1+'
! 213 1415*6" /" 7(*1+'">1?,@9.) $" 1+6#*(1 15
7,6.:;9*3")1+'
Viso Geral do AspectJ
Join Points
! um )"#$ *"#$' e qualquer ponLo ldenucvel pelo AspecL!
duranLe a execuo de um programa. AspecLos podem ser
assoclados a )"#$ *"#$'( e execuLados anLes, depols, ou ao
lnves deles. LxlsLem dlversos ponLos de [uno
reconhecldos pelo AspecL!, so eles:
Join Points
MeLodos:
! LxlsLem dols upos de ponLos de [uno relaclonados a
meLodos: ponLos de chamada de meLodos e ponLos de
execuo de meLodos:
! Chamada de meLodos - So os ponLos lndlcauvos de
onde, no cdlgo, o meLodo e chamado.
! Lxecuo de meLodos - L o corpo dos meLodos
proprlamenLe dlLos.
Join Points
MeLodos:
! or qu preclsamos de dols ponLos de [uno dlferenLes?
no basLarla um desses? Lles no so equlvalenLes?
! na verdade, h uma dlferena: como em llnguagens
orlenLadas a ob[eLos exlsLe pollmorsmo, e posslvel
chamarmos um mtodo de uma c|asse e executarmos um
mtodo de uma de suas subc|asses. Asslm, e uul fazer a
dlsuno em se LraLando de aspecLos.
Join Points
ConsLruLores:
! Asslm como meLodos, consLruLores Lm dols ponLos de
[uno: um para chamadas ao consLruLor e ouLro para a
execuo do consLruLor.
! !"#$ &"#$'( de chamada de consLruLores so enconLrados
em locals onde um ob[eLo e lnsLanclado com comandos
new. onLos de [uno de execuo de consLruLores so o
prprlo cdlgo do consLruLor.
Join Points
Acesso a campos:
! ode exlsur um )"#$ *"#$' em cada acesso aos dados de
uma classe. Cs ponLos so dlvldldos em ponLos de lelLura,
onde o dado e usado mas no modlcado, e ponLos de
escrlLa, onde o dado e modlcado.
! L lmporLanLe noLar que s h ponLos de [uno em dados
declarados no escopo da classe. no h ponLos de [uno
para varlvels locals a meLodos.
Join Points
1raLamenLo de excees:
! um )"#$ *"#$' de LraLamenLo de excees e com a
declarao de um bloco caLch que 'capLura' algum upo de
exceo.
Join Points
lnlclallzao de classes:
! So )"#$ *"#$'( que represenLam o lnsLanLe em que uma
classe e carregada na memrla e seus dados esLucos so
lnlclallzados.
Join Points
Pointcuts
! um *"#$'+,' (ponLo de corLe) e uma consLruo slnLuca
do AspecL! para se agrupar um con[unLo de ponLos de
[uno.
! Sua slnLaxe bslca e a segulnLe:
public pointcut nome() : call (void Receita.print())
Pointcuts
Sua slnLaxe bslca e a segulnLe:
public pointcut nome() : call (void Receita.print())
! A prlmelra parLe e a declarao de restr|o de acesso - nesse caso,
pub||c, mas polnLcuLs Lambem podem ser pr|vate ou protected
(asslm como [ava).
! A pa|avra-chave po|ntcut denoLa que esLamos declarando um ponLo
de corLe.
! 1odo polnLcuL tem um nome qualquer, e pode receber parmeLros -
nesse caso, o polnLcuL no recebe parmeLros.
! uepols dos dols ponLos (:) obrlgaLrlos vem o npo dos ponLos de
[uno agrupados pelo polnLcuL - nesse caso Lemos um polnLcuL do
upo ca||, que lndlca uma chamada de mtodo.
! llnalmenLe vem a ass|natura do po|ntcut, uma especlcao dos
ponLos de [uno aos quals o polnLcuL se refere.
Pointcuts
CaracLeres especlals:
! na descrlo da asslnaLura, pode-se usar alguns caracLeres especlals
para lnclulr mals de um ponLo de [uno no polnLcuL. Cs caracLeres
so:
! Lxemplo:
pointcut string() : call (*.toString());
Pointcuts
Caractere S|gn|hcado
* Cualquer sequncla de caracLeres no conLendo ponLos.
.. Cualquer sequncla de caracLeres, lncluslve conLendo ponLos.
+ Cualquer subclasse de uma classe.
Lxpresses Lglca:
! um polnLcuL pode conLer vrlas asslnaLuras llgadas aLraves de
operadores lglcos. Cs operadores so:

Pointcuts
Operador Significado Exemplo Interpretao do exemplo
! Negao ! Receita Qualquer classe exceto
Receita
||
"ou" lgico
Receita ||
Ingrediente
Classe receita ou classe
ingrediente
&& "e" lgico Cloneable &&
Runnable
Classes que implementam
ambas as interfaces
Cloneable e Runnable
olnLcuLs por upo de ponLo de [uno:
! ! vlmos polnLcuLs do upo call, que se refere a chamadas de meLodos.
Alem desse, exlsLem ouLros upos, llsLados a segulr com suas slnLaxes:

Pointcuts
Categoria de ponto de juno Sintaxe do pointcut
Chamada de mtodo ou construtor call(AssinaturaDoMetodo)
Execuo de mtodo ou construtor execution(AssinaturaDoMetodo)
Inicializao de classe staticinitialization(Classe)
Leitura de dado de classe get(AssinaturaDoCampo)
Escrita de dado de classe set(AssinaturaDoCampo)
Tratamento de exceo handler(Exceo)
olnLcuLs baseados na esLruLura lexlca:
! uols upos de polnLcuLs levam em conslderao Lrechos do cdlgo do
programa, sem levar em conslderao a execuo. C prlmelro e
wlLhln(1lpo). Lsse polnLcuL lnclul Lodos os ponLos de [uno denLro de
uma classe ou aspecLo passada como parmeLro. C segundo e
wlLhlncode(MeLodo), que lnclul Lodos os ponLos de [uno denLro de
um meLodo ou consLruLor.

Pointcuts
Ponto de corte Descrio
within(Receita+) Todos os pontos de juno que ocorrem dentro da classe
Receita ou de qualquer de suas subclasses.
withincode(* Receita.set*(..) Todos os pontos de juno que ocorrem dentro de
mtodos da classe Receita cujos nomes comeam com
"set".
olnLcuLs de ob[eLos em execuo:
! C polnLcuL Lhls(Classe) compreende Lodos os ponLos de [uno de um
ob[eLo que e da classe dada ou de qualquer subclasse dela.
olnLcuLs condlclonals:
! C polnLcuL lf(condlo) compreende Lodos os ponLos de [uno em
que a condlo for verdadelra, em Lempo de execuo.

Pointcuts