1
7
7
Jerzy R. Jaworowski,
Jerzy R. Jaworowski,
dr in
dr in
ż
ż
.
.
Instytut Teleinformatyki PK
Instytut Teleinformatyki PK
Zaawansowane techniki
Zaawansowane techniki
programowania
programowania
2013 / 2014
2013 / 2014
7
7
Aspect
Aspect
-
-
Oriented Programming
Oriented Programming
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
3
3
7
7
Paradygmaty programowania
Paradygmaty programowania
•
•
Procedural programming
Procedural programming
•
•
Functional programming
Functional programming
•
•
Logic programming
Logic programming
•
•
Object
Object
-
-
oriented programming (OOP)
oriented programming (OOP)
–
–
Zbi
Zbi
ó
ó
r obiekt
r obiekt
ó
ó
w, z kt
w, z kt
ó
ó
rych ka
rych ka
ż
ż
dy posiada sw
dy posiada sw
ó
ó
j
j
w
w
ł
ł
asny zakres odpowiedzialno
asny zakres odpowiedzialno
ś
ś
ci
ci
–
–
Smalltalk, Java, C++
Smalltalk, Java, C++
•
•
Aspect
Aspect
-
-
oriented programming (AOP)
oriented programming (AOP)
–
–
Wykonanie pewnego kodu ilekro
Wykonanie pewnego kodu ilekro
ć
ć
program
program
wykazuje okre
wykazuje okre
ś
ś
lone zachowanie
lone zachowanie
–
–
AspectJ
AspectJ
(
(
rozszerzenie j
rozszerzenie j
ę
ę
zyka Java
zyka Java
)
)
–
–
Nie zast
Nie zast
ę
ę
puje programowania obiektowego,
puje programowania obiektowego,
raczej go uzupe
raczej go uzupe
ł
ł
nia
nia
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
4
4
7
7
Sformu
Sformu
ł
ł
owanie problemu
owanie problemu
•
•
Pewne zadania (operacje) nie mog
Pewne zadania (operacje) nie mog
ą
ą
zosta
zosta
ć
ć
zamkni
zamkni
ę
ę
te w postaci obiektu,
te w postaci obiektu,
lecz pozostaj
lecz pozostaj
ą
ą
rozrzucone w kodzie
rozrzucone w kodzie
•
•
Przyk
Przyk
ł
ł
ady
ady
:
:
–
–
logowanie
logowanie
(
(
zapisywanie
zapisywanie
ś
ś
ladu wykonania
ladu wykonania
programu
programu
np
np
. do pliku)
. do pliku)
–
–
profilowanie
profilowanie
(
(
okre
okre
ś
ś
lanie ilo
lanie ilo
ś
ś
ci czasu, kt
ci czasu, kt
ó
ó
r
r
ą
ą
program wykorzystuje na wykonywanie
program wykorzystuje na wykonywanie
fragment
fragment
ó
ó
w kodu
w kodu
)
)
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
5
5
7
7
Sformu
Sformu
ł
ł
owanie problemu
owanie problemu
–
–
ś
ś
ledzenie
ledzenie
(
(
okre
okre
ś
ś
lanie kt
lanie kt
ó
ó
re metody kiedy
re metody kiedy
s
s
ą
ą
wo
wo
ł
ł
ane
ane
)
)
–
–
ś
ś
ledzenie sesji
ledzenie sesji
,
,
monitorowanie momentu
monitorowanie momentu
wyga
wyga
ś
ś
ni
ni
ę
ę
cia sesji
cia sesji
–
–
pewne zagadnienia monitorowania
pewne zagadnienia monitorowania
bezpiecze
bezpiecze
ń
ń
stwa
stwa
•
•
Efektem jest kod
Efektem jest kod
‘
‘
tkany
tkany
’
’
–
–
zasadniczy
zasadniczy
kod obiekt
kod obiekt
ó
ó
w przeplatany jest
w przeplatany jest
‘
‘
w
w
poprzek
poprzek
’
’
wielu klas i metod
wielu klas i metod
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
6
6
7
7
Przyk
Przyk
ł
ł
ad
ad
class Fraction {
class Fraction {
int numerator;
int numerator;
int denominator;
int denominator;
...
...
public Fraction multiply(Fraction that) {
public Fraction multiply(Fraction that) {
traceEnter("multiply
traceEnter("multiply
",
",
GGGG
GGGG
..
..
);
);
Fraction result = new Fraction(
Fraction result = new Fraction(
this.numerator * that.numerator,
this.numerator * that.numerator,
this.denominator * that.denominator);
this.denominator * that.denominator);
result
result
=
=
result.reduceToLowestTerms
result.reduceToLowestTerms
();
();
traceExit("multiply
traceExit("multiply
", result);
", result);
return
return
result
result
;
;
}
}
...
...
}
}
2
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
7
7
7
7
Konsekwencje
Konsekwencje
G
G
•
•
Redundantny kod
Redundantny kod
–
–
Te same fragmenty kodu w r
Te same fragmenty kodu w r
ó
ó
ż
ż
nych
nych
miejscach
miejscach
•
•
Utrudniaj
Utrudniaj
ą
ą
cy analizowanie logiki
cy analizowanie logiki
–
–
Brak jednoznacznej struktury
Brak jednoznacznej struktury
–
–
Pl
Pl
ą
ą
tanina zapis
tanina zapis
ó
ó
w zaciera obraz
w zaciera obraz
•
•
Trudny do zmian (utrzymania)
Trudny do zmian (utrzymania)
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
8
8
7
7
Konsekwencje
Konsekwencje
G
G
–
–
Jak znale
Jak znale
źć
źć
ca
ca
ł
ł
y wprowadzony kod
y wprowadzony kod
...
...
–
–
...
...
mie
mie
ć
ć
pewno
pewno
ść
ść
ż
ż
e zosta
e zosta
ł
ł
zmieniony w
zmieniony w
spos
spos
ó
ó
b sp
b sp
ó
ó
jny
jny
–
–
...
...
mie
mie
ć
ć
pewno
pewno
ść
ść
,
,
ż
ż
e nie zniekszta
e nie zniekszta
ł
ł
cili
cili
ś
ś
my
my
funkcjonalno
funkcjonalno
ś
ś
ci
ci
‘
‘
przez przypadek
przez przypadek
’
’
•
•
Nieefektywny w sytuacji, gdy staje si
Nieefektywny w sytuacji, gdy staje si
ę
ę
zb
zb
ę
ę
dny
dny
–
–
Sk
Sk
ą
ą
d
d
mie
mie
ć
ć
pewno
pewno
ść
ść
ż
ż
e zosta
e zosta
ł
ł
usuni
usuni
ę
ę
ty w
ty w
ca
ca
ł
ł
o
o
ś
ś
ci
ci
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
9
9
7
7
AspectJ
AspectJ
TM
TM
•
•
AspectJ
AspectJ
jest
jest
stosumkowo
stosumkowo
prostym
prostym
(niewielkim) rozszerzeniem j
(niewielkim) rozszerzeniem j
ę
ę
zyka Java
zyka Java
•
•
AspectJ
AspectJ
modularyzuje
modularyzuje
powtarzaj
powtarzaj
ą
ą
ce si
ce si
ę
ę
elementy
elementy
–
–
tzn. kod dla pewnego zagadnienia (
tzn. kod dla pewnego zagadnienia (
aspect
aspect
)
)
w programie
w programie
(
(
takiego jak
takiego jak
np
np
.
.
ś
ś
ledzenie
ledzenie
)
)
jest zebrany razem w jednym miejscu
jest zebrany razem w jednym miejscu
•
•
Kompilator
Kompilator
AspectJ
AspectJ
jest rozwi
jest rozwi
ą
ą
zaniem
zaniem
typu
typu
open
open
source
source
–
–
wolnym od op
wolnym od op
ł
ł
at
at
licencyjnych
licencyjnych
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
10
10
7
7
AspectJ
AspectJ
TM
TM
•
•
AspectJ
AspectJ
pracuje z takimi platformami
pracuje z takimi platformami
jak
jak
JBuilder
JBuilder
,
,
Fort
Fort
é
é
, Eclipse,
, Eclipse,
G
G
(by
(by
ć
ć
mo
mo
ż
ż
e z innymi r
e z innymi r
ó
ó
wnie
wnie
ż
ż
)
)
•
•
Niez
Niez
ł
ł
y opis koncepcji i rozwi
y opis koncepcji i rozwi
ą
ą
zania
zania
:
:
http://
http://
www.eclipse.org/aspectj
www.eclipse.org/aspectj
/
/
–
–
Fragmenty wykorzystano w tej prezentacji
Fragmenty wykorzystano w tej prezentacji
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
11
11
7
7
Terminolog
Terminolog
ia
ia
•
•
join point
join point
jest dobrze okre
jest dobrze okre
ś
ś
lonym
lonym
(zdefiniowanym) punktem przeci
(zdefiniowanym) punktem przeci
ę
ę
cia w
cia w
programie
programie
•
•
pointcut
pointcut
jest grup
jest grup
ą
ą
punkt
punkt
ó
ó
w przeci
w przeci
ę
ę
cia
cia
•
•
a
a
dvice
dvice
(wskaz
(wskaz
ó
ó
wka) jest fragmentem
wka) jest fragmentem
kodu wykonywanym w pewnej grupie
kodu wykonywanym w pewnej grupie
punkt
punkt
ó
ó
w przeci
w przeci
ę
ę
cia
cia
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
12
12
7
7
Terminolog
Terminolog
ia
ia
•
•
Introduction
Introduction
modyfikuje obiekty klas
modyfikuje obiekty klas
oraz relacje mi
oraz relacje mi
ę
ę
dzy nimi
dzy nimi
•
•
As
As
pect
pect
jest fragmentem kodu
jest fragmentem kodu
realizuj
realizuj
ą
ą
cym operacje
cym operacje
zwi
zwi
ą
ą
zane z
zane z
kodem tkanym
kodem tkanym
–
–
Definiowane w odniesieniu do
Definiowane w odniesieniu do
pointcuts
pointcuts
,
,
advice
advice
,
,
oraz
oraz
introduction
introduction
–
–
Aspekt jest fragmentem kodu kt
Aspekt jest fragmentem kodu kt
ó
ó
ry z
ry z
definicji jest wsp
definicji jest wsp
ó
ó
ł
ł
u
u
ż
ż
ytkowany
ytkowany
3
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
13
13
7
7
Przyk
Przyk
ł
ł
ad
ad
aspect
aspect
PointBoundsChecking
PointBoundsChecking
{
{
pointcut
pointcut
checkX(int
checkX(int
x)
x)
:
:
(
(
call(void
call(void
FigureElement.setXY(int
FigureElement.setXY(int
,
,
int
int
)) &&
)) &&
args(x
args(x
, *)) ||
, *)) ||
(
(
call(void
call(void
Point.setX(int
Point.setX(int
)) &&
)) &&
args(x
args(x
));
));
pointcut
pointcut
checkY(int
checkY(int
y)
y)
:
:
(
(
call(void
call(void
FigureElement.setXY(int
FigureElement.setXY(int
,
,
int
int
)) &&
)) &&
args
args
(*, y)) ||
(*, y)) ||
(
(
call(void
call(void
Point.setY(int
Point.setY(int
)) &&
)) &&
args(y
args(y
));
));
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
14
14
7
7
Przyk
Przyk
ł
ł
ad
ad
cd
cd
.
.
before
before
(int x):
checkX(x
checkX(x
)
)
{
if ( x < MIN_X || x > MAX_X )
throw new IllegalArgumentException
("x is out of bounds.");
}
before
before
(int y):
checkY(y
checkY(y
)
)
{
if ( y < MIN_Y || y > MAX_Y )
throw new IllegalArgumentException
("y is out of bounds.");
}
} //aspect
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
15
15
7
7
Przyk
Przyk
ł
ł
ad
ad
•
•
pointcut
pointcut
o nazwie
o nazwie
move
move
kt
kt
ó
ó
ry wylicza
ry wylicza
przer
przer
ó
ó
ż
ż
ne wywo
ne wywo
ł
ł
ania metod pewnego
ania metod pewnego
modelu
modelu
:
:
pointcut
pointcut
move():
move():
call(void
call(void
FigureElement.setXY(int,int
FigureElement.setXY(int,int
))
))
||
||
call(void
call(void
Point.setX(int
Point.setX(int
)) ||
)) ||
call(void
call(void
Point.setY(int
Point.setY(int
)) ||
)) ||
call(void Line.setP1(Point)) ||
call(void Line.setP1(Point)) ||
call(void Line.setP2(Point));
call(void Line.setP2(Point));
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
16
16
7
7
Przyk
Przyk
ł
ł
ad
ad
•
•
Advice
Advice
(
(
kod
kod
)
)
kt
kt
ó
ó
ry wykonywany jest
ry wykonywany jest
ka
ka
ż
ż
dorazowo przed
dorazowo przed
pointcut
pointcut
move
move
:
:
before
before
()
()
: move()
: move()
{
{
System.out.println("About to move");
System.out.println("About to move");
}
}
•
•
Advice
Advice
–
–
kod kt
kod kt
ó
ó
ry wykonywany jest
ry wykonywany jest
ka
ka
ż
ż
dorazowo po wykonaniu
dorazowo po wykonaniu
pointcut
pointcut
move
move
:
:
after
after
()
()
: move()
: move()
{
{
System.out.println("Just successfully
System.out.println("Just successfully
moved");
moved");
}
}
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
17
17
7
7
Join points
Join points
•
•
join point
join point
jest dobrze okre
jest dobrze okre
ś
ś
lonym punktem w
lonym punktem w
strukturze programu, w kt
strukturze programu, w kt
ó
ó
rym
rym
–
–
Chcieliby
Chcieliby
ś
ś
my wykona
my wykona
ć
ć
pewien fragment
pewien fragment
kodu
kodu
(
(
advice
advice
)
)
ilekro
ilekro
ć
ć
ten punkt programu
ten punkt programu
zostanie osi
zostanie osi
ą
ą
gni
gni
ę
ę
ty
ty
–
–
Nie chcemy za
Nie chcemy za
ś
ś
mieca
mieca
ć
ć
kodu oryginalnego
kodu oryginalnego
obiektu widocznie modyfikuj
obiektu widocznie modyfikuj
ą
ą
c jego tre
c jego tre
ść
ść
jak
jak
ą
ą
kolwiek konstrukcj
kolwiek konstrukcj
ą
ą
m
m
ó
ó
wi
wi
ą
ą
c
c
ą
ą
wprost
wprost
:
:
“
“
to
to
jest
jest
join point
join point
”
”
–
–
AspectJ
AspectJ
dostarcza sk
dostarcza sk
ł
ł
adni umo
adni umo
ż
ż
liwiaj
liwiaj
ą
ą
cej
cej
wskazanie (oznaczenie) tych punkt
wskazanie (oznaczenie) tych punkt
ó
ó
w (
w (
join
join
points
points
)
)
“
“
z zewn
z zewn
ą
ą
trz
trz
”
”
aktualnego kodu
aktualnego kodu
obiektu
obiektu
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
18
18
7
7
Join points
Join points
•
•
Czyli
Czyli
join point
join point
jest wyr
jest wyr
ó
ó
ż
ż
nionym
nionym
punktem w strukturze programu w
punktem w strukturze programu w
kt
kt
ó
ó
rym
rym
“
“
co
co
ś
ś
si
si
ę
ę
zdarzy
zdarzy
”
”
(z punktu
(z punktu
widzenia przep
widzenia przep
ł
ł
ywu sterowania !)
ywu sterowania !)
–
–
A wi
A wi
ę
ę
c
c
np
np
.
.
•
•
Pewna metoda zostanie wywo
Pewna metoda zostanie wywo
ł
ł
ana
ana
•
•
Wyst
Wyst
ą
ą
pi okre
pi okre
ś
ś
lony warunek (
lony warunek (
exception
exception
)
)
•
•
Okre
Okre
ś
ś
lona zmienna zostanie
lona zmienna zostanie
wykorzystana (u
wykorzystana (u
ż
ż
yta)
yta)
4
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
19
19
7
7
Pointcuts
Pointcuts
•
•
Definicja
Definicja
p
p
ointcut
ointcut
sk
sk
ł
ł
ada si
ada si
ę
ę
z dw
z dw
ó
ó
ch
ch
element
element
ó
ó
w : z lewej i prawej strony
w : z lewej i prawej strony
rozdzielonych znakiem dwukropka (:)
rozdzielonych znakiem dwukropka (:)
–
–
Lewa strona definiuje nazw
Lewa strona definiuje nazw
ę
ę
oraz
oraz
ewentualnie list
ewentualnie list
ę
ę
parametr
parametr
ó
ó
w
w
(
(
np
np
.
.
dane dost
dane dost
ę
ę
pne gdy zdarzenie
pne gdy zdarzenie
nast
nast
ą
ą
pi)
pi)
–
–
Prawa strona stanowi opis
Prawa strona stanowi opis
pointcut
pointcut
–
–
a wi
a wi
ę
ę
c wykaz
c wykaz
join
join
points
points
kt
kt
ó
ó
re
re
stanowi
stanowi
ą
ą
grup
grup
ę
ę
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
20
20
7
7
Pointcuts
Pointcuts
Przyk
Przyk
ł
ł
ad
ad
pointcut:
pointcut:
pointcut
pointcut
setter()
setter()
: call(void
: call(void
setX(int
setX(int
))
))
;
;
–
–
Nazw
Nazw
ą
ą
grupy (
grupy (
pointcut
pointcut
) jest
) jest
setter
setter
–
–
pointcut
pointcut
nie posiada parametr
nie posiada parametr
ó
ó
w
w
–
–
p
p
ointcut
ointcut
okre
okre
ś
ś
lony jest jako
lony jest jako
call(void
call(void
setX(int
setX(int
))
))
–
–
pointcut
pointcut
odnosi si
odnosi si
ę
ę
do momentu w
do momentu w
kt
kt
ó
ó
rym wywo
rym wywo
ł
ł
ana b
ana b
ę
ę
dzie metoda
dzie metoda
void
void
setX(int
setX(int
)
)
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
21
21
7
7
P
P
ointcut
ointcut
-
-
desygnatory
desygnatory
•
•
Kiedy pewna metoda jest
Kiedy pewna metoda jest
wykonywana
wykonywana
:
:
execution(void
execution(void
Point.setX(int
Point.setX(int
))
))
•
•
Kiedy pewna metoda jest
Kiedy pewna metoda jest
wywo
wywo
ł
ł
ywana
ywana
:
:
call(void
call(void
Point.setX(int
Point.setX(int
))
))
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
22
22
7
7
P
P
ointcut
ointcut
-
-
desygnatory
desygnatory
•
•
Kiedy nast
Kiedy nast
ę
ę
puje wykonanie kodu
puje wykonanie kodu
obs
obs
ł
ł
ugi warunku
ugi warunku
:
:
handler(ArrayOutOfBoundsException
handler(ArrayOutOfBoundsException
)
)
•
•
Je
Je
ż
ż
eli aktualnie przetwarzanym
eli aktualnie przetwarzanym
obiektem jest obiekt okre
obiektem jest obiekt okre
ś
ś
lonego typu
lonego typu
(
(
tzn.
tzn.
np
np
.
.
this
this
jest typu
jest typu
SomeTyp
SomeTyp
)
)
:
:
this(SomeType
this(SomeType
)
)
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
23
23
7
7
P
P
ointcut
ointcut
-
-
desygnatory
desygnatory
•
•
Kiedy obiekt docelowy jest typu
Kiedy obiekt docelowy jest typu
SomeType
SomeType
target(SomeType
target(SomeType
)
)
•
•
Kiedy wykony kod
Kiedy wykony kod
‘
‘
nale
nale
ż
ż
y
y
’
’
do klasy
do klasy
MyClass
MyClass
within(MyClass
within(MyClass
)
)
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
24
24
7
7
Desygnatory
Desygnatory
-
-
wildcards
wildcards
•
•
U
U
ż
ż
ywane s
ywane s
ą
ą
konstrukcje
konstrukcje
:
:
execution(* *(..))
execution(* *(..))
•
•
Wskazuje na wykonanie dowolnej
Wskazuje na wykonanie dowolnej
metody zwracaj
metody zwracaj
ą
ą
cej rezultat dowolnego
cej rezultat dowolnego
typu i niezale
typu i niezale
ż
ż
nie od listy parametr
nie od listy parametr
ó
ó
w
w
call(* set(..))
call(* set(..))
•
•
Dowolna metoda o nazwie
Dowolna metoda o nazwie
set
set
niezale
niezale
ż
ż
nie od typu wyniku oraz
nie od typu wyniku oraz
parametr
parametr
ó
ó
w
w
•
•
W przypadku przeci
W przypadku przeci
ąż
ąż
enia metody
enia metody
set
set
dotyczy wszelkich wywo
dotyczy wszelkich wywo
ł
ł
a
a
ń
ń
5
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
25
25
7
7
Desygnatory
Desygnatory
-
-
wildcards
wildcards
•
•
Mo
Mo
ż
ż
na skorzysta
na skorzysta
ć
ć
z typ
z typ
ó
ó
w,
w,
np
np
.
.
execution(int *())
execution(int *())
•
•
Dowolna metoda bez parametr
Dowolna metoda bez parametr
ó
ó
w
w
zwracaj
zwracaj
ą
ą
ca
ca
int
int
call(*
call(*
setY(long
setY(long
))
))
•
•
Dowolne wywo
Dowolne wywo
ł
ł
anie
anie
metody
metody
setY
setY
z
z
parametrem typu
parametrem typu
long
long
niezale
niezale
ż
ż
nie
nie
od typu wyniku oraz
od typu wyniku oraz
deklarowanego typu parametru
deklarowanego typu parametru
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
26
26
7
7
Desygnatory
Desygnatory
-
-
wildcards
wildcards
•
•
Mo
Mo
ż
ż
na skorzysta
na skorzysta
ć
ć
z typ
z typ
ó
ó
w,
w,
np
np
.
.
call(*
call(*
Point.setY(int
Point.setY(int
))
))
•
•
Wywo
Wywo
ł
ł
anie metody
anie metody
setY
setY
na obiekcie
na obiekcie
Point
Point
z argumentem typu
z argumentem typu
int
int
,
,
niezale
niezale
ż
ż
nie od typu zwracanego wyniku
nie od typu zwracanego wyniku
call(*.new(int, int))
call(*.new(int, int))
•
•
Wskazuje na wywo
Wskazuje na wywo
ł
ł
anie konstruktora
anie konstruktora
dowolnej klasy
dowolnej klasy
,
,
o ile u
o ile u
ż
ż
ywa on dok
ywa on dok
ł
ł
adnie
adnie
dw
dw
ó
ó
ch
ch
arument
arument
ó
ó
w
w
typu
typu
int
int
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
27
27
7
7
D
D
esignator
esignator
composition
composition
•
•
Kompozycja konstruowana jest z u
Kompozycja konstruowana jest z u
ż
ż
yciem
yciem
operator
operator
ó
ó
w logicznych
w logicznych
or
or
(
(
“
“
||
||
”
”
),
),
and
and
(
(
“
“
&&
&&
”
”
)
)
oraz
oraz
not
not
(
(
“
“
!
!
”
”
)
)
•
•
Przyk
Przyk
ł
ł
ady
ady
:
:
target(Point
target(Point
) && call(int *())
) && call(int *())
•
•
Wskazuje na ka
Wskazuje na ka
ż
ż
de odwo
de odwo
ł
ł
anie do metody nie
anie do metody nie
posiadaj
posiadaj
ą
ą
cej parametr
cej parametr
ó
ó
w oraz zwracaj
w oraz zwracaj
ą
ą
cej wynik typu
cej wynik typu
int
int
wykonywanej na instancji obiektu
wykonywanej na instancji obiektu
Point
Point
,
,
niezale
niezale
ż
ż
nie
nie
od jej nazwy
od jej nazwy
call(* *(..)) && (within(Line) || within(Point))
call(* *(..)) && (within(Line) || within(Point))
•
•
Wskazuje na ka
Wskazuje na ka
ż
ż
de wywo
de wywo
ł
ł
anie dowolnej metody o ile to
anie dowolnej metody o ile to
wywo
wywo
ł
ł
anie nast
anie nast
ę
ę
puje w kodzie deklaracji obiektu
puje w kodzie deklaracji obiektu
Point
Point
lub
lub
Line
Line
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
28
28
7
7
D
D
esignator
esignator
composition
composition
•
•
Examples:
Examples:
within(*) && execution(*.new(int))
within(*) && execution(*.new(int))
•
•
Wskazuje na wykonanie dowolnego
Wskazuje na wykonanie dowolnego
konstruktora posiadaj
konstruktora posiadaj
ą
ą
cego dok
cego dok
ł
ł
adnie
adnie
jeden argument typu
jeden argument typu
int
int
,
,
niezale
niezale
ż
ż
nie od
nie od
tego, sk
tego, sk
ą
ą
d to wo
d to wo
ł
ł
anie nast
anie nast
ę
ę
puje
puje
!this(Point) && call(int *(..))
!this(Point) && call(int *(..))
•
•
Wskazuje na wywo
Wskazuje na wywo
ł
ł
anie dowolnej
anie dowolnej
metody zwracaj
metody zwracaj
ą
ą
cej wynik typu
cej wynik typu
int
int
o ile
o ile
tylko wykonuj
tylko wykonuj
ą
ą
cym wywo
cym wywo
ł
ł
anie obiektem
anie obiektem
jest dowolny inny ni
jest dowolny inny ni
ż
ż
Point
Point
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
29
29
7
7
Desygnatory
Desygnatory
i modyfikatory
i modyfikatory
call(public * *(..))
call(public * *(..))
–
–
Dowolne wywo
Dowolne wywo
ł
ł
anie metody
anie metody
public
public
execution(!static
execution(!static
* *(..))
* *(..))
–
–
Dowolne wykonanie metody innej ni
Dowolne wykonanie metody innej ni
ż
ż
statyczna
statyczna
execution(public !static * *(..))
execution(public !static * *(..))
–
–
Dowolne wykonanie metody publicznej o
Dowolne wykonanie metody publicznej o
ile nie jest ona statyczna
ile nie jest ona statyczna
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
30
30
7
7
Advice
Advice
-
-
rodzaje
rodzaje
•
•
AspectJ
AspectJ
umo
umo
ż
ż
liwia wiele rodzaj
liwia wiele rodzaj
ó
ó
w
w
definiowania wskaz
definiowania wskaz
ó
ó
wek
wek
:
:
–
–
Before advice
Before advice
wykonywanie wskaz
wykonywanie wskaz
ó
ó
wki
wki
nast
nast
ę
ę
puje po osi
puje po osi
ą
ą
gni
gni
ę
ę
ciu okre
ciu okre
ś
ś
lonego
lonego
punktu (
punktu (
join
join
point) przed rozpocz
point) przed rozpocz
ę
ę
ciem
ciem
jego wykonywania
jego wykonywania
–
–
After advice
After advice
wykonywanie wskaz
wykonywanie wskaz
ó
ó
wki
wki
nast
nast
ę
ę
puje po osi
puje po osi
ą
ą
gni
gni
ę
ę
ciu okre
ciu okre
ś
ś
lonego
lonego
punktu (
punktu (
join
join
point) po zako
point) po zako
ń
ń
czeniu jego
czeniu jego
wykonywania
wykonywania
6
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
31
31
7
7
Advice
Advice
-
-
rodzaje
rodzaje
•
•
after returning
after returning
advice
advice
wykonywane
wykonywane
po normalnym zako
po normalnym zako
ń
ń
czeniu
czeniu
•
•
after throwing
after throwing
advice
advice
wykonywane
wykonywane
jest je
jest je
ż
ż
eli metoda
eli metoda
‘
‘
rzuci
rzuci
’
’
wyj
wyj
ą
ą
tkiem
tkiem
•
•
after
after
advice
advice
wykonywane jest w
wykonywane jest w
ka
ka
ż
ż
dym przypadku, niezale
dym przypadku, niezale
ż
ż
nie od
nie od
tego czy metoda zako
tego czy metoda zako
ń
ń
czy si
czy si
ę
ę
normalnie, czy te
normalnie, czy te
ż
ż
‘
‘
rzuci
rzuci
’
’
wyj
wyj
ą
ą
tkiem
tkiem
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
32
32
7
7
Parametry
Parametry
•
•
Mo
Mo
ż
ż
na uzyska
na uzyska
ć
ć
dost
dost
ę
ę
p do kontekstu
p do kontekstu
join point:
join point:
•
•
pointcut
pointcut
setXY(FigureElement
setXY(FigureElement
fe
fe
, int x, int y):
, int x, int y):
call(void
call(void
FigureElement.setXY(int
FigureElement.setXY(int
, int))
, int))
&&
&&
target(fe
target(fe
)
)
&&
&&
args(x
args(x
, y);
, y);
•
•
after(FigureElement
after(FigureElement
fe
fe
, int x, int y) returning:
, int x, int y) returning:
setXY(fe
setXY(fe
, x, y) {
, x, y) {
System.out.println(fe
System.out.println(fe
+
+
" moved to (" + x + ", " + y
" moved to (" + x + ", " + y
+ ")"
+ ")"
);
);
}
}
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
33
33
7
7
Introduction
Introduction
•
•
introduction
introduction
jest elementem aspektu,
jest elementem aspektu,
ale definiuje lub modyfikuje elementy
ale definiuje lub modyfikuje elementy
innego typu
innego typu
(class).
(class).
Przy pomocy
Przy pomocy
introduction
introduction
mo
mo
ż
ż
emy m.in.
emy m.in.
–
–
Doda
Doda
ć
ć
metod
metod
ę
ę
do istniej
do istniej
ą
ą
cej klasy
cej klasy
–
–
Doda
Doda
ć
ć
atrybut do istniej
atrybut do istniej
ą
ą
cej klasy
cej klasy
–
–
Rozszerzy
Rozszerzy
ć
ć
istniej
istniej
ą
ą
c
c
ą
ą
klas
klas
ę
ę
z u
z u
ż
ż
yciem
yciem
innej
innej
–
–
Zaimplementowa
Zaimplementowa
ć
ć
interfejs w istniej
interfejs w istniej
ą
ą
cej
cej
klasie
klasie
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
34
34
7
7
Przyk
Przyk
ł
ł
ad
ad
aspect
aspect
PointWatching
PointWatching
{
{
private Vector Point.watchers = new Vector();
private Vector Point.watchers = new Vector();
public static void
public static void
addWatcher(Point
addWatcher(Point
p, Screen s) {
p, Screen s) {
p.Watchers.add(s);
p.Watchers.add(s);
}
}
public static void
public static void
removeWatcher(Point
removeWatcher(Point
p, Screen s)
p, Screen s)
{
{
p.Watchers.remove(s);
p.Watchers.remove(s);
}
}
static void
static void
updateWatcher(Point
updateWatcher(Point
p, Screen s) {
p, Screen s) {
s.display(p);
s.display(p);
}
}
// continued on next slide
// continued on next slide
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
35
35
7
7
Przyk
Przyk
ł
ł
ad
ad
// continued from previous slide
// continued from previous slide
pointcut
pointcut
changes(Point p): target(p) &&
changes(Point p): target(p) &&
call(void
call(void
Point.set*(int));
Point.set*(int));
after(Point p): changes(p) {
after(Point p): changes(p) {
Iterator
Iterator
iter
iter
=
=
p.Watchers.iterator
p.Watchers.iterator
();
();
while (
while (
iter.hasNext
iter.hasNext
() ) {
() ) {
updateWatcher(p
updateWatcher(p
, (
, (
Screen)iter.next
Screen)iter.next
());
());
}
}
}
}
}
}
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
36
36
7
7
Podsumowanie
Podsumowanie
•
•
Aspect
Aspect
-
-
oriented programming (AOP)
oriented programming (AOP)
jest
jest
nowym sposobem spojrzenia na
nowym sposobem spojrzenia na
programowanie
programowanie
•
•
AOP
AOP
jest swego rodzaju metod
jest swego rodzaju metod
ą
ą
analagiczn
analagiczn
ą
ą
do obs
do obs
ł
ł
ugi zdarze
ugi zdarze
ń
ń
(kod
(kod
‘
‘
na zewn
na zewn
ą
ą
trz
trz
’
’
)
)
•
•
AspectJ
AspectJ
nie jest sam w sobie j
nie jest sam w sobie j
ę
ę
zykiem
zykiem
programowania ale rozszerzeniem Javy
programowania ale rozszerzeniem Javy
•
•
AspectJ
AspectJ
nie wprowadza nowych element
nie wprowadza nowych element
ó
ó
w
w
poszerzaj
poszerzaj
ą
ą
cych zakres stosowania Javy, lecz
cych zakres stosowania Javy, lecz
mechanizmy umo
mechanizmy umo
ż
ż
liwiaj
liwiaj
ą
ą
ce inne (nowe)
ce inne (nowe)
podej
podej
ś
ś
cie do modularyzacji kodu
cie do modularyzacji kodu
7
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
37
37
7
7
Chwila na refleksj
Chwila na refleksj
ę
ę
...
...
•
•
Czy dowiedzia
Czy dowiedzia
ł
ł
e
e
ś
ś
si
si
ę
ę
czego
czego
ś
ś
nowego ?
nowego ?
•
•
Czy dowiedzia
Czy dowiedzia
ł
ł
e
e
ś
ś
si
si
ę
ę
czego
czego
ś
ś
Twym zdaniem
Twym zdaniem
wa
wa
ż
ż
nego ?
nego ?
•
•
Czy dostrzegasz zwi
Czy dostrzegasz zwi
ą
ą
zek i przydatno
zek i przydatno
ść
ść
przekazanych tre
przekazanych tre
ś
ś
ci w zawodzie, kt
ci w zawodzie, kt
ó
ó
ry sobie
ry sobie
wybra
wybra
ł
ł
e
e
ś
ś
?
?
•
•
Masz ewentualne uwagi b
Masz ewentualne uwagi b
ą
ą
d
d
ź
ź
sugestie,
sugestie,
podziel si
podziel si
ę
ę
nimi ...
nimi ...
jrj@pk.edu.pl
jrj@pk.edu.pl
2014
2014
-
-
02
02
-
-
06
06
©
©
2014, Jerzy R. Jaworowski
2014, Jerzy R. Jaworowski
38
38
7
7
Dzi
Dzi
ę
ę
kuj
kuj
ę
ę
za uwag
za uwag
ę
ę