Aspect-Oriented Programming
!" #$%& '()" *+%& &+(
"," %- '( '. "-/ -0 1234 5(6% 1.
"-7%&#(8%&9():
;-<%& &(=( >?@ -AB *,%&
%-C%& %- '( 1(8% >B% *@% %-(D
*E(FG%&:
"-$3-H3*+%&&+(%-C%& %-'(1(8%
>B%*@%%-(D123:
"-$3-H3;H$-0-()%"-%&"/B'%*D
*B%%-B'.$5I;-E(-B?B 3J"K5LM"-1.1,
N 5O1.1,"!*(>B%-(D123*E(FG%&:
," B 3J" -) -E%& "+ -0 -B? *P(4 -85
-$Q"+B17"9(8%LM"-'."+-0,( RLS%&:
-T*FG","-#(8%&%8%'%*D*B%J%L6
;(05 $,-U%:
AOP gm ba bưc pht trin :
-V%W"-","?8"X*0,"*M%-'%*D"-%&
'.'%*D*B%%-B:
YV?LZ%&-0-()%[%&'%*D#(8%&9():
P%&-G3","-0-()%:
Đc t ngôn ng AOP: gm 2 thnh phn
-0-()%'%*D:
\Q"=>?!"*B%;@:
Biên d!ch AOP: Tr#nh biên d!ch AOP th$c hi%n theo
tr#nh t$ hai bưc sau:
@-G3"," %-'(#(8%&1]:
-?0%*P(-<%&(%;@>= B%&LK%&5^-Z"-(:
_`
-=%a%& RLS%&#$%&9=$5bc%&LS%&1.#
12%:d*V?"+5I E","c%&LS%&5.*FG" RLS%&"-$
'()"9=$5be
-Z"-()%*(D;-(0%#?"b35I","-*I"1b3'2(1$&("
c%&LS%&:-B?'f3-=("+",""-J";#g#.%&%-F"-J";""J
J##$%&5h( 5%-K?"=549K%"+-0-$.% %-*FG"
'%*D%.?-<%&>B","B 3J"'."-$3-H3",""-?8%&(B
3-,#(0%b3#%&'.$1$&("L$B%-%&-()3:
-Z"-()%",""-W%- ,"-9=$5bc%&LS%&%-F"5%
1b3 #f%- &i( "," -F '()% jk *I%& 'W LS %-F
JJ"JkJ#?:l"c;-(%.$-F'()%*+*FG"&i(49K%"+
-0 RLS%&B 3J"*0*FB'.$5I%&$K(1)'.&-(5I","-
"-W%-,"*MB*(05-()%","1T(&i(%&?-(05:
mnLo%&&(=(>?@%-C%& %-'(1(8%
>B%*@%%-(D*E(FG%&
BH5I9.($,%"S-0eX%V?LZ%&
5I "-FU%& #f%- 'p -f%- *U% &(=%4 ?8 "X
"/B9.($,%e
,"-f%--i""U9=%e*(054*$K%-q%&4-f%-
"-C%-b4-f%-#r%s
(0%-M","-f%-t","'M#W;-,"%-B#$%&
;-%&'p:
-=("b3%-b1K(-f%-K('M#W52(5h(;-(
L("-?0%4"$&(^%-f%-
mnLo%&&(=(>?@%-C%& %-'(1(8%
>B%*@%%-(D*E(FG%&
mnLo%&&(=(>?@%-C%& %-'(1(8%
>B%*@%%-(D*E(FG%&
jRLS%&B p5<-f%--+B?8"X %-","*E(
FG%&%-F Be
23 Shapee 1. 5I 123 Abstract "-cB 3-FU%& -c"
moveBy (int, int) – L("-?0%-f%-:
23Displaye-(0%-M-f%-=%-:
23Pointe5<=5I*(05-f%--i":-cB-B(-I"
W%-1.-B(iB*I4?'.*FG";@-[B[123Shape:
23(%Je5<=*$K%-q%&4"-cB-B(-I"W%-1.-B(
*(05 57 "/B*$B% -q%& '. "u%& *FG" ;@ -[B [ 123
j-B3J:
mnLo%&&(=(>?@%-C%& %-'(1(8%
>B%*@%%-(D*E(FG%&
*(05"/B
<v*%-+B%-C%&'%*D*B%J%%-B:
,( RLS%&5^%&w%E-U%:
n6L.%&3-,#(0%-)-E%&:
(=5-T(&(B%-("<%&-)-E%&:
(=5&(, %-"/B =%3-x5:
-FG"*(05"/B
-Z" #B ;-<%& &(=( >?@ "," '% *D
52(4 ;-<%& &(=( >?@ *FG" '% *D 'y% "-FB
*FG"&(=(>?@:
;-<%&1."c",%-"-$","-(@;@"x
-=:
3-,'zW%-*+%&&+(:
$%"J#%
#$%&4[{ 3J"|"-W%-1.'%*D
}$%"J#%~ %&FT( 1b3 #f%- >B% V5 '. %+
-()% #$%& # %-(D "1B "u%& %-F
%-(D5J-$L;-,"%-B:
$%"J#%
B-FT%&&Q3-B(1$K({"$%"J#%|e"$#J"$%"J#% '."#$ v
"(%&"$%"J#% e
$#J"$%"J#%e1.#J>(#J5J%"-W%-"/B"-FU%&#f%-4'W
LS%-F31$BL•(1J€•$1LJ#4*i"LB%- ,"- J#4s
#$ v"(%&"$%"J##% e1.%-C%&R1O3-S"X%*FG"
-Z" -()% ;-( {"$#J "$%"J#%| *FG" &i(: #$ v"$%&
"$%"J#% -FT%&=?#B%-(D%U(#$%&"-FU%&#f%-4%+
"+-0=?#B#$%&%-(D1B?J#"/Bc%&LS%&4%-(D"1B 4
%-(D5J-$L•"-q%&-K%%-FW%-$,%-T(&(B%"-K?","
5*i"&-(LBB9B J4&-(1$&1K(5h(1X%"b3%-b-<%&
(% J#4s
$%"J#%
3J"v#(J%JL #$&#B55(%& "r% *FG" &i( 1.
3J"v#(J%JL j$•‚B#J nJ'J1$35J% jn 1. 5I
%&?8%!"-(@;@&(73,"-#T(","?8"X-B?","'%*D
*FG">B%V5 J3B#B($%$•"$%"J#% #$%&"-FU%&#f%-
%-"," %-3-X%*I"1b3'.[*+a%&W%-?0%"-?0%
"-$ "-FU%& #f%-: {jJ3B#B($% $• "$%"J#% | 1. 5I #$%&
%-C%&;ƒ-b*FG">B%V5%-#$%&%&.%-3-X%5D5
$%"J#%
d'B(#r"/B%&FT(-(@;@3-X%5D54"-7%&B
%8% *FB #B "," ","- 1.5*U%&(=% %-: \0 -AB5^%
?8"X"/B"-FU%&#f%-4%&FT(B pK$#B %-3-X%
"-W%- "/B "-FU%& #f%- &w5 ","
"1B €"$53$%J%€5J-$L• "," "-c" %a%& 9P %& %-F
1$&(%&4W%-$,%3J#•$#5B%"J4::"u%& p*FG"J5H
*0K$#B:mfL$",""-c%&%a%&9P%&%.?;-<%&3-=(
1.?8"X"-W%-"/B-)-E%&%8%%&FT(B p"+?8"X
9b!"-7%&-J$O5E%:mb?1.5-@%.$*0"+-0
K$#B"-FU%&#f%-"+-01(%--$K*FG"%-F-@V
#=1T(1.{jJ3B#BJ$•"$%"J#% |
$%"J#%
d'B(#r"/B%&FT(-(@;@3-X%5D54"-7%&B
%8% *FB #B "," ","- 1.5*U%&(=% %-: \0 -AB5^%
?8"X"/B"-FU%&#f%-4%&FT(B pK$#B %-3-X%
"-W%- "/B "-FU%& #f%- &w5 ","
"1B €"$53$%J%€5J-$L• "," "-c" %a%& 9P %& %-F
1$&(%&4W%-$,%3J#•$#5B%"J4::"u%& p*FG"J5H
*0K$#B:mfL$",""-c%&%a%&9P%&%.?;-<%&3-=(
1.?8"X"-W%-"/B-)-E%&%8%%&FT(B p"+?8"X
9b!"-7%&-J$O5E%:mb?1.5-@%.$*0"+-0
K$#B"-FU%&#f%-"+-01(%--$K*FG"%-F-@V
#=1T(1.{jJ3B#BJ$•"$%"J#% |
„„…
†$(%3$(%e"+-01.9;‡*(05%.$"+-0,"*M%-*FG";-(-Z"-()%"-FU%&#f%-:+
-01.1T(&i(*@%5I3-FU%&-c"-$Q"5I1)%-&,%"-$5I9(@%"/B*E(FG%&:
-V%1$K(e
•
join point tại các phương thức
•
join point tại hàm dựng (contructor)
•
join point tại điểm truy cập các thuộc tính
•
join point tại điểm điều khiển ngoại lệ: được biểu diễn trong khối điều khiển ngoại lệ.
„„…
mWLSe
public class Account
{
…
void credit(float amount)
{
balance + = amount;
}
}
„„…
$(%"e1.5I"#7""-FU%&#f%-5.%+"-i%
","ˆ$(%3$(%'.%&C"=%-K(","ˆ$(%3$(%*+:mWLS
5I3$(%""+-0"-i%5Iˆ$(%3$(%1.5I1T(&i(
*@%5I3-FU%&-c"'.1?-<%&(%%&C"=%-"/B
3-FU%&-c"*+%-F*E(FG%&"-cB3-FU%&-c"4","
*E( E"/B3-FU%&-c"*+
mWLSe
execution(void Account.creadit(float))
„„…
L'("Je.5^*FG"-Z"-()%K(5Iˆ$(%3$(%5.
*^*FG""-i%9t(3$(%":
L'("J*FG""-(B %-‰1$K( Be
•
9J•$#J: Được thực hiện trước join point
•
B•J#: Được thực hiện sau join point
•
B#$%L: Bao quanh sự thực hiện join point, advice này
có thể thực hiện vòng, thực hiện tiếp của mã nguồn ban
đầu hoặc thực hiện thay đổi ngữ cảnh (tham số của
hàm, …)
„„…
Ví dụ