Professional Documents
Culture Documents
Pttkhdtduml
Pttkhdtduml
b = 3.1416;
a[50] = 9.0; // cng s lm b = 9.0 v vng nh ca bin b cng
// chnh l vng nh ca phn t a[50]
Chng 9 : Kim th
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 212
Tng qut v hot ng debug ng dng
3. cc li do truy xut ti nguyn ng thi vi cc ng dng khc (mn HH
s trnh by c th li ny v cch gii quyt). Th d 2 ng dng truy xut
ti khon A ng thi :
1. hin th giao din & ch
ngi dng ra lnh
2. Ngi dng ra lnh np
vo ti khon A s tin
700USD x l :
21a c ti khon A vo
b nh,
22a Tng gi tr ti
khon trong b nh
ln 700USD.
23a Ghi li gi tr mi.
3. Quay v bc 1
1. hin th giao din & ch
ngi dng ra lnh
2. Ngi dng ra lnh rt tin
t ti khon A 500USD
x l :
21b c ti khon A vo
b nh,
22b Gim gi tr ti
khon trong b nh
i 500USD.
23b Ghi li gi tr mi.
3. Quay v bc 1
Ti khon
A
Nu ti khon A l 1000USD v HH iu khin chy 2 process P1 v P2 theo
th t 21a22a21b22b23b23a th kt qu ti khon A s l 1700USD
(gi tr ng l 1200USD).
Chng 9 : Kim th
107
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 213
Trong qu trnh debug, ng dng s 1 trong 2 ch sau :
Pause : ch ca ng dng trc khi chy hay khi dng li theo 1 iu kin
dng no ca ngi debug. VC++ s ghi nh lnh sp thi hnh trc khi
dng (lnh u tin ca ng dng nu n cha bt u chy). Do tnh lch s,
ta dng thut ng PC - program counter ni v lnh ny. ch ny,
ngi debug c th xem trng thi ca ng dng : gi tr ca cc bin d liu
bit ng dng chy ng hay sai theo yu cu, lch s gi hm trong call
strack, thm/bt cc iu kin dng, iu khin vic thi hnh tip theo ca
ng dng, lc ny ng dng s chuyn sang ch Running.
Running : ch m ng dng ang chy cc lnh ca n n khi n gp 1
iu kin dng thit lp trc, lc ny ng dng s chuyn v ch
Pause.
Trong qu trnh debug, ng dng ch Pause ch yu thi gian v ngi
debug tng tc vi ng dng ch yu ch ny. Mi khi ng dng c chy
tip, n chuyn qua ch Running, nhng s nhanh chng chy n lnh dng
v chuyn v ch Pause (tr phi b 'blocked' ch I/O hay b 'loop' trong cc vng
lp v tn).
Tng qut v tin ch debug tch hp trong VC++
Chng 9 : Kim th
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 214
Ca s Variable
Ca s Watch
Ca s Debug
Ca s Registers
Ca s Memory
Ca s CallStack
108
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 215
xem ni dung ca 1 bin d liu, ngi debug c th :
di chut n tn bin trong ca s code, 1 ca s nh cha gi tr ca bin
s c hin th ngi debug xem xt.
Xem ni dung ca bin trong ca s Variable.
nhp biu thc (thng l bin d liu) vo vng Name ca ca s Watch
xem ni dung ca n.
hiu chnh gi tr ca 1 bin no (do b sai, nhng mun sa li cho ng
hu c th kim th cc lnh cn li), ngi debug c th di cursor v cell cha
gi tr hin hnh ca bin (trong ca s Variable hay trong ca s Watch ri
hiu chnh li gi tr mi).
Cc thao tc xem v hiu chnh bin d liu
Chng 9 : Kim th
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 216
hin th ca s cha danh sch cc hm ang thc hin d dang (cc hm
lng nhau theo th t), ngi debug c th :
chn menu View.Debug Windows.Call Stack.
n phi chut trn gy ca s bt k ri chn mc Call Stack.
xem v tr PC hin hnh (lnh sp thc hin k tip), ngi debug c th :
chn menu Debug.Show Next Statement (thng khi ng dng dng li, n
s hin th lnh chy k tip - lnh b dng vi mu t c bit v c du mi
tn l tri ca lnh).
Cc thao tc xem v tr thi hnh hin ti
Chng 9 : Kim th
109
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 217
xem/hiu chnh cc im dng (breakpoint), ta chn menu Edit.Breakpoints
hin th ca s Breakpoints, t thc hin chc nng mong mun :
Xem danh sch cc im dng hin hnh, c th xa ht chng bng cch
chn button Remove All, c th xa tng im dng bng cch chn n ri
n button Remove.
Mun thit lp im dng mi, chn tab Location, nhp v tr lnh cn dng
v iu kin dng mong mun (mc nh l lun lun dng v tr qui nh).
Mun thit lp im dng mi da trn 1 bin no b thay i gi tr, chn
tab Data, nhp biu thc cn tnh ton (bin cn quan tm).
Mun thit lp im dng mi da trn thng bo (message) ca Windows,
chn tab Message, chn hm x l, chn thng bo cn dng.
Ta c th (v nn) thit lp nhiu im dng ng thi 'ro chn' nhiu lung
thi hnh khc nhau ca chng trnh.
Cc lnh thit lp iu kin dng
Chng 9 : Kim th
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 218
chy tip ng dng t v tr PC hin hnh, ngi debug c th :
o chn menu Debug.Go bt u chy ng dng, ng dng ch dng li khi
gp iu kin dng no c thit lp.
o chn menu Debug.Go chy tip t v tr PC hin hnh, ng dng ch dng
li khi gp iu kin dng no c thit lp.
o chn menu Debug.Step Over chy tip 1 lnh ri dng li (Pause), nu
lnh thi hnh l lnh gi th tc th ton b th tc s c chy. y l lnh
cho php thc hin tng lnh theo mc v m.
o chn menu Debug.Step Into chy tip 1 lnh ri dng li (Pause), nu
lnh thi hnh l lnh gi th tc th ng dng s dng li lnh u tin ca
th tc. y l lnh cho php thc hin tng lnh theo mc vi m.
o chn menu Debug.Step Out chy tip cc lnh cn li ca th tc hin
hnh ri quay v v dng li sau lnh gi th tc ny (Pause).
o chn menu Debug.Run to Cursor chy tip ng dng t v tr PC hin hnh
n lnh cha cursor hin hnh ri dng li (Pause).
Cc lnh iu khin chy tip ng dng
Chng 9 : Kim th
110
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 219
Ngoi ra khi ng dng trng thi 'Pause', ngi debug c th thc hin
cc lnh sau :
chn menu Debug.Stop Debugging kt thc vic chy ng dng.
chn menu Debug.Restart kt thc vic chy ng dng ri bt u chy li
t u.
Khi ng dng trng thi Running', ngi debug c th thc hin cc lnh sau :
chn menu Debug.Break dng t ngt vic chy ng dng, lnh ang
thc hin s c nh du ta d theo di. Chc nng ny gip ta bit ng
dng ang b 'loop' on lnh no. Nu ng dng ang b 'block' ch bin
c I/O, s khng c lnh no c dnh du c.
Cc lnh iu khin khc
Chng 9 : Kim th
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 220
Trng i Hc Bch Khoa Tp. HCM
Khoa Cng ngh Thng tin
Chng 10
CC MU CU TRC
Mu Adapter
Mu Composite
Mu Proxy
Mu Decorator
Mu Flyweigth
Mu Facade
Chng 10 : Cc mu cu trc
111
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 221
Thit k phn mm l mt vn rt kh khn, nht l khi phn mm
ln, mi quan h gia cc phn t nhiu bn thit k thng khng
hiu qu hoc c li.
Cc li thit k thng phi tr gi cao do nh hng n nhiu giai
on sau (vit code, kim tra).
Phng php lp trnh hng i tng cung cp c ch c th xy
dng c phn mm d nng cp, thay i (VD: c tnh tha k, a
hnh). Tuy nhin vic xy dng nhng phn mm HT nh th ph
thuc nhiu vo kh nng ngi thit k.
Mc tiu ca thit k: khng ch thit k nhng phn mm ng m cn
c th hn ch hoc h tr ti thit k trong tng lai.
Gii thiu
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 222
C nhiu nguyn nhn dn n ti thit k :
Ph thuc vo phn cng, h iu hnh (OS) hay phn mm khc: cc
phn mm xc nh qu cht ch cc thng s phn cng hay phn mm
lin quan s phi thay i khi cc thng s ny thay i.
Ph thuc vo gii thut: khi h thng c nhiu gii php, nhiu mc x
l cho cng mt vn , vic rng buc cht ch h thng vi gii php c
th s dn n kh b sung, thay i h thng.
Khng tng qut ha khi lp trnh, nht l lp trnh hng i tng. VD:
rng buc thng s hnh thc vi i tng lp con thay v c th l i
tng lp cha.
Cc component lin quan nhau qu cht ch: mi quan h gia cc
component nhiu dn n hin tng thay i dy chuyn khi phi thay i
mt component no . VD: lm dng tha k trong lp trnh hng i
tng, cc component gi ln nhau nhiu
Gii thiu (tt)
Chng 10 : Cc mu cu trc
112
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 223
Mt bin php c xut c nhng bn thit k tt: s dng li
nhng mu thit k ca nhng chuyn gia qua kim nghim thc t.
Mu thit k (Design pattern) thng c c im:
L nhng thit k c s dng v c nh gi tt.
Gip gii quyt nhng vn thit k thng gp.
Ch trng vic gip cho bn thit k c tnh uyn chuyn, d nng cp,
thay i.
Gii thiu (tt)
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 224
Cung cp phng php gii quyt nhng vn thc t thng gp
c nh gi, kim nghim.
L bin php ti s dng tri thc cc chuyn gia phn mm.
Hnh thnh kho tri thc, ng vng trong giao tip gia nhng ngi lm
phn mm.
Gip ngi tm hiu nm vng hn c im ngn ng lp trnh, nht l
lp trnh hng i tng.
tng tin cy, tit kim ngun lc
Vai tr ca design pattern
Chng 10 : Cc mu cu trc
113
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 225
C nhiu loi Software patterns: analysis patterns, design patterns,
organization patterns, process patterns Bi ging ny ch tp trung
vo Object Oriented Design Patterns (t y v sau gi l Design
Patterns hay mu thit k).
Design patterns c ba nhm chnh
Structural Cung cp c ch x l nhng lp khng th thay i (lp th
vin ca third party), rng buc mun (lower coupling) v cung cp cc
c ch khc tha k.
Creational Khc phc cc vn khi to i tng, hn ch s ph
thuc platform.
Behavioral Che du hin thc ca i tng, che du gii thut, h tr
vic thay i cu hnh i tng mt cch linh ng.
Phn loi software patterns
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 226
Mi nhm Design Pattern c cc pattern v lp (class patterns) v
pattern v i tng (object patterns).
Class patterns da trn mi quan h tha k gia cc lp, mi quan h
ny l tnh (xc nh ti thi im dch), do class patterns thch hp
cho h thng khng cn thay i ng trong thi gian chy.
Object patterns da trn mi quan h gia cc i tng, do c th
thay i thi im chy.
Phn loi Object Oriented Design Patterns
Chng 10 : Cc mu cu trc
114
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 227
Tm kim i tng: vic phn chia h thng thnh mt tp hp cc i
tng hot ng hiu qu l cng vic kh khn. Design pattern gip
a ra nhng i tng thng gp trong nhng trng hp thit k
tng t gp trc y.
Xc nh s lng v kch thc i tng: trong trng hp h thng
cn rng buc s lng xc nh i tng ang hot ng hay ngi
thit k bn khon v vic nn tp trung mt s chc nng no vo
trong 1 i tng hay tch ra thnh nhiu i tng.
Xc nh interface v hin thc (implementation) ca i tng. Hng
chng trnh n c im: program to an interface, not an
implementation.
Gip thit k theo hng ti s dng v linh ng bng cch s dng
mi quan h gia cc i tng (bao gp, tha k) mt cch ph hp
v thit k theo hng tin on trc cc thay i trong tng lai.
Kh nng ng dng design patterns
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 228
Tn
Mc tiu v nhu cu p dng
V d s dng
Lc class miu t mu : cha cc phn t (lp, i tng) trong
pattern v mi quan h gia chng.
Cc ng cnh nn p dng pattern.
Cu trc design pattern s trnh by
Chng 10 : Cc mu cu trc
115
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 229
Cc mu cu trc (Structural Patterns) tp trung gii quyt vn kt
hp cc lp v/hoc i tng thnh mt kin trc ln hn.
Cc mu cu trc lp (structural class patterns) s dng tha k kt
hp cc lp hay cc interface. Tng t qu trnh a tha k: mt lp
tha k t nhiu lp cha s mang c im ca tt c cc lp cha gp
li.
Cc mu cu trc i tng (structural object patterns) tp trung vo
vic kt hp cc i tng thc hin nhng chc nng no .
Trong cc slide tip theo, chng ta s tm hiu cc mu: Adapter,
Composite, Proxy, Decorator, Facade, Flyweight.
Structural Patterns
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 230
Mc tiu : chuyn i interface ca mt class thnh mt interface khc
theo yu cu s dng ca Client.
Nhu cu p dng : c nhng trng hp chng ta s dng mt class
nhng khng mun tun theo interface ca chnh class m li mun
chuyn sang mt interface khc. Mu Adapter gip chng ta gii quyt
vn ny.
V d : chng trnh drawing editor x l cc i tng ha Line,
Polygon, Text... thng qua interface s dng Shape (c nh ngha
nh class root nu ngn ng lp trnh khng h tr Interface). Hin thc
class Line, Polygon t u kh d v n gin nhng hin thc class
Text th phc tp hn nn dng li class sn c no (th d
TextView cung cp chc nng qun l Text) nhng khng th hay khng
mun thay i class TextView nh ngha class Adapter tn l
TextShape tha k class Shape ca ng dng.
Adapter
Chng 10 : Cc mu cu trc
116
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 231
Th d v mu Adapter dng object
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 232
S cu trc ca mu Adapter dng class
Chng 10 : Cc mu cu trc
Mu Adapter dng class xy
dng lp Adapter bng cch
tha k c interface cn
chuyn v interface ch.
117
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 233
S cu trc ca mu Adapter dng object
Chng 10 : Cc mu cu trc
Mu Object
Adapter xy dng
lp Adapter bng
cch tha k
interface ch v
bao gp i tng
ca interface cn
chuyn.
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 234
Target (Shape) : nh ngha interface cho Client s dng.
Client (DrawingEditor) : s dng cc i tng thng qua interface
Target.
Adaptee (TextView) : nh ngha interface c sn cn chuyn sang
interface Target.
Adapter (TextShape) : chuyn interface Adaptee sang interface Target.
Cc phn t tham gia
Chng 10 : Cc mu cu trc
118
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 235
mun dng mt lp c sn nhng interface ca n khng tng thch
vi interface ang s dng trong khi chng ta ch mun dng interface
ang s dng.
mun to ra cc lp c th giao tip vi cc lp khc nhng cha bit
trc interface ca nhng lp .
(i vi mu object adapter) mun s dng nhiu lp con c sn
nhng s khng hiu qu nu phi chuyn interface (bng mu Adapter)
ca tng lp con. Object Adapter s chuyn interface ca ch lp cha.
Cc ng cnh nn dng mu Adapter
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 236
Mc tiu : to quan h th bc bao gp gia cc i tng. Client c th
xem i tng bao gp v i tng b bao gp nh nhau kh nng
tng qut ha trong code ca client d pht trin, nng cp, bo tr.
Nhu cu p dng : C nhng trng hp h thng mun xem xt cc i
tng n cng nh cc i tng phc (i tng cha nhiu i tng
n). Trong trng hp ny, h thng va phi m bo c tnh bao
gp ln tnh khng phn bit gia cc phn t. Mu Composite cung cp
gii php cho yu cu ny.
V d : chng trnh drawing editor va c cc i tng n nh k t,
im nh va c cc i tng phc nh t (gm nhiu k t), hng
(gm nhiu t), nhm cc phn t nh hnDi gc ngi s dng,
h thng tc ng nh nhau ln mt t v mt k t...
Composite
Chng 10 : Cc mu cu trc
119
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 237
Th d v mu Composite
Chng 10 : Cc mu cu trc
Graphic
Draw()
Add(Graphic)
Remove(Graphic)
GetChild(int)
for all g in graphics
g.Draw()
Line
Draw()
Text
Draw()
Rectangle
Draw()
Picture
Draw()
Add(Graphic)
Remove(Graphic)
GetChild(int)
add g to list of graphics
graphics
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 238
S cu trc ca mu Composite
Chng 10 : Cc mu cu trc
120
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 239
Component
Khai bo interface v hin thc mt s tc v chung cho cc i tng ca
nhng lp tha k (gi chung l cc component)
Khai bo interface cho vic truy xut v qun l i tng ca cc
component.
C th khai bo hay hin thc cc phng thc truy xut n i tng
cha ca nhng component.
Leaf : nh ngha tc v cho cho nhng component c bn.
Composite : nh ngha tc v cho nhng component bao gp nhng
component khc.
Client : S dng cc component thng qua interface Component
Cc phn t tham gia
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 240
chng trnh mun th hin quan h bao gp - b bao gp.
chng trnh mun i x cc phn t bao gp v b bao gp nh nhau.
V d: compiler (chng trnh con hay module c th bao gp cc
chng trnh con hay module khc); chng trnh giao din GUI
(window l i tng phc, button l i tng n); chng trnh text
editor
Cc ng cnh nn dng mu Composite
Chng 10 : Cc mu cu trc
121
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 241
Mc tiu : Cung cp i tng i din cho mt i tng khc h tr
hoc kim sot qu trnh truy xut i tng . i tng thay th gi
l Proxy.
Nhu cu p dng :
Nhng i tng ln khi khi to s tn nhiu ti nguyn, do nn tr hon
thi im khi to thc s cc i tng ny. Trong thi gian tr hon, proxy
ng vai tr thay th i tng.
Chng trnh mun truy xut mt i tng khng gian a ch khc.
Proxy thay th i tng my remote.
i tng cn c bo mt khi tng tc trc tip vi client. Client ch tc
ng c ln Proxy, Proxy chuyn yu cu Client xung i tng thc
hin yu cu.
Chng trnh mun b sung mt s thao tc kim sot ln mt i tng.
Proxy ng vai tr i tng kim sot.
Proxy
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 242
Remote proxy : cung cp i tng i din (local) cho mt i tng
phn b (nonlocal) khc (v d RMI, JINI).
Virtual proxy : cung cp i tng i din cho i tng ln khi khi to
tn nhiu ti nguyn. Mc ch tr hon thi im to i tng ln.
(V d i tng hnh nh trong mt chng trnh x l ng thi nhiu
hnh nh).
Protection proxy : cung cp i tng i din cho mt i tng khc
cn c bo mt t bn ngoi. V d cc KernelProxies cung cp truy
xut n Kernel ca h iu hnh.
Smart proxy : cung cp i tng i din b sung mt s thao tc
khi c truy xut n i tng thc. V d proxy kim tra s tham kho
n i tng, proxy thc hin vic load persistent object trong ln tham
kho u tin
Phn loi Proxy
Chng 10 : Cc mu cu trc
122
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 243
Th d v mu Proxy
Chng 10 : Cc mu cu trc
Image
Draw()
GetExtent()
Store()
Load()
imageImp
extent
if (image==0)
image = LoadImage(filename);
else image->Draw();
ImageProxy
Draw()
GetExtent()
Store()
Load()
filename
extent
image
Graphic
Draw()
GetExtent()
Store()
Load()
DocumentEditor
if (image==0)
return extent;
else return image->GetExtent();
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 244
S cu trc ca mu Proxy
Chng 10 : Cc mu cu trc
RealSubject
Request()
...
...
// prolog code
realSubject->Request();
// epilog code
Proxy
Request()
...
...
realSubject
Subject
Request()
...
Client
123
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 245
Proxy
gi lin h n i tng RealSubject.
c th thay th i tng RealSubject.
kim sot qu trnh truy xut n i tng RealSubject, c th to hoc
delete i tng ny.
Thc hin mt s hot ng khc ty loi Proxy:
+ remote proxy: encode v gi thng tin n i tng RealSubject
khng gian a ch khc.
+ virtual proxy: cha cc thng tin v i tng realSubject c th khi
to li n sau ny.
+ protection proxy: kim tra i tng ang thc hin truy xut c quyn
khng
+ smart proxy: thc hin cc thao tc b sung khi c truy xut n i
tng thc.
Cc phn t tham gia
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 246
Subject :
nh ngha interface chung cho 2 lp i tng RealSubject v Proxy, do
i tng Proxy c th thay th v tr i tng RealSubject.
RealSubject:
Lp th hin i tng thc s Client cn truy xut.
Qu trnh giao tip thi im run-time c th m t bng s :
Cc phn t tham gia
Chng 10 : Cc mu cu trc
124
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 247
Cc chng trnh phn b
Cc h thng chng trnh cn phi hp hot ng ca nhiu i tng.
Cc h thng middleware.
H thng cn chia ti phc v c nhanh.
DBMS, OS
Cc ng cnh nn dng mu Proxy
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 248
Mc tiu : thm ng trch nhim cho i tng.
Nhu cu p dng :
mun thm trch nhim cho 1 s i tng ch khng phi cho ton b cc
i tng ca class tng ng.
V d :
Toolkit GUI cho php user thm border v scrollbar vo bt k phn t GUI
no nh TextView...
Mu Decorator
Chng 10 : Cc mu cu trc
aBorderDecorator
component
aScrollDecorator
component
aTextView
component
125
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 249
Decorator
Chng 10 : Cc mu cu trc
ScrollDecorator
Draw()
ScrollTo()
scrollPosition
BorderDecorator
Draw()
DrawBorder()
borderWidth
Decorator
Draw()
VisualComponent
Draw()
TextView
Draw() component->Draw();
Decorator::Draw();
DrawBorder();
component
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 250
S cu trc ca mu Decorator
Chng 10 : Cc mu cu trc
ConcreteDecoratorA
Operation()
addedState
Decorator
Operation()
Component
Operation()
ConcreteComponent
Operation() component->Operation();
Decorator::Operation();
AddedBehavior();
component
ConcreteDecoratorB
Operation()
AddedBehavior()
addedState
126
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 251
Component (VisualComponent)
nh ngha interface cho cc i tng m ta cn thm trch nhim cho
chng 1 cch ng.
ConcreteComponent (TextView)
nh ngha i tng m ta cn thm trch nhim cho chng 1 cch ng.
Decorator
cha tham kho n i tng Component v nh ngha interface tng
thch vi interface ca Component.
ConcreteDecorator (BorderDecorator, ScrollDecorator)
thm trch nhim cho thnh phn gc.
Cc phn t tham gia
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 252
mun thm ng trch nhim cho 1 vi i tng m khng nh hng
n cc i tng cng loi.
tch ly thm cc trch nhim ca i tng.
khi khng th ni rng i tng bng cch tha k (s bng n h
thng class con-cha).
Cc ng cnh nn dng mu Decorator
Chng 10 : Cc mu cu trc
127
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 253
Mc tiu : cung cp interface hp nht cho tp cc interface ca 1 h
thng con. Facade nh ngha 1 interface cp cao hn cc interface c
sn lm cho h thng con d s dng hn.
Nhu cu p dng :
ti thiu ha tnh "coupling" gia cc h thng con ti thiu ha giao tip
gia cc h thng con.
V d :
h thng con bin dch c nhiu class phc v cc bc bin dch ri rc
nh Scanner, Parser, ProgramNode, BytecodeStream,
ProgramNodeBuilder. dch source code, ta c th vit 1 ng dng gi
dch v ca tng class duyt token, parser, xy dng cy c php, to
code i tng... Tuy nhin lm nh trn s rt kh v d gy ra li. Cch
khc phc l nh ngha 1 class mi vi giao tip hp nht tn l Compiler,
n cung cp 1 hm Compile (file), ng dng no cn dch source code ch
cn gi thng ip Compile n i tng Compiler.
Facade
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 254
Th d v cu trc Facade
Chng 10 : Cc mu cu trc
Stream
BytecodeStream
CodeGenerator
St ack Machi neCodeGe
ner at or
RI SCCodeGene
r at or
Vari abl e No
de
Expr essi onN
ode
St at e me nt N
ode
Progr a mN
ode
Progr a mNode
Buf f er
Sy mb
ol
Toke
n
Parser
Scann
er
Compiler
Compile()
128
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 255
S cu trc ca mu Facade
Chng 10 : Cc mu cu trc
Facade
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 256
Facade (Compiler)
bit class no lin quan n request xc nh.
nh cc i tng lin quan thc hin request.
subsystem classes (Scanner, Parser,..)
hin thc cc chc nng ca h thng con.
x l cng vic c nh t i tng Facade.
khng cn bit Facade, khng c tham kho n Facade.
Cc phn t tham gia
Chng 10 : Cc mu cu trc
129
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 257
mun cung cp 1 giao tip n gin cho 1 h thng con phc tp.
mun to thm lp ngn cch h thng con vi client.
Cc ng cnh nn dng mu Facade
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 258
Mc tiu : dng phng tin dng chung qun l hiu qu 1 s ln
i tng nh.
Nhu cu p dng :
thit k hng i tng thng c nhiu im li, nhng hin thc u tr
bn thit k c th tr gi t v s khng hiu qu.
th d chng trnh x l vn bn c th dng khi nim i tng miu
t bt k phn t c bn no : k t, cng thc, hnh, .... Tuy nhin k t l
i tng rt nh v xut hin rt nhiu ln trong vn bn, nu mi ln xut
hin 1 k t, ta to ring 1 i tng mi cho k t th rt khng hiu
qu. Mu Flyweight rt thch hp gii quyt vn dng chung k t.
Flyweight l i tng dng chung da vo khi nim c bn l trng thi
trong v trng thi ngoi. Trng thi trong c cha trong flyweight, c
lp vi ng cnh s dng (code k t,...). Trng thi ngoi ph thuc v
thay i theo ng cnh, n khng th c cha trong flyweight, ng cnh
cn truyn cho flyweight trng thi ngoi khi nh flyweight 1 cng vic no
.
Mu Flyweight
Chng 10 : Cc mu cu trc
130
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 259
Th d v mu Flyweight
Chng 10 : Cc mu cu trc
Character
Draw(Context)
Intersects(Point,Context
)
char c
Glyph
Draw(Context)
Intersects(Point,Context)
Row
Draw(Context)
Intersects(Point,Contex
t)
Column
Draw(Context)
Intersects(Point,Contex
t)
children
children
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 260
S cu trc ca mu Flyweight
Chng 10 : Cc mu cu trc
ConcreteFlyweight
Operation(extrinsicState
)
intrinsicState
Flyweight
Operation(extrinsicState)
FlyweightFactory
GetFlyweight(key)
UnsharedConcreteFlyweight
Operation(extrinsicState)
allState
Client
if (flyweight(key) exists
return existing flyweight
else {
create new flyweight;
add it to pool of flyweights;
return the new flyweight;
}
131
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 261
Flyweight (Glyph)
nh ngha interface cho i tng nhn yu cu v hot ng theo trng
thi ngoi.
ConcreteFlyweight (Character)
hin thc interface Flyweight thnh cc i tng dng chung.
UnsharedConcreteFlyweight (Character)
hin thc interface Flyweight thnh cc i tng khng dng chung.
FlyweightFactory
to v qun l cc i tng Flyweight.
Client
cha tham kho n flyweight v nh khi cn
Cc phn t tham gia
Chng 10 : Cc mu cu trc
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 262
Khi cc iu kin sau ng thi tha mn :
ng dng dng 1 s ln i tng.
gi b nh cao v phi cha s lng ln i tng.
phn ln trng thi i tng c th bn ngoi.
nhiu nhm i tng c th c thay th bng 1 s nh i tng khi
cc trng thi ngoi ca chng b loi b.
ng dng khng ph thuc vo tn nhn dng i tng.
Cc ng cnh nn dng mu Flyweight
Chng 10 : Cc mu cu trc
132
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 263
Trng i Hc Bch Khoa Tp. HCM
Khoa Cng ngh Thng tin
Chng 11
CC MU CREATIONAL
Mu Abstract Factory
Mu Factory Method
Mu Prototype
Mu Singleton
Mu Builder
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 264
Creational design patterns gip xy dng h thng linh ng v mt khi
to, qun l v s dng i tng. Chng c th cho php h thng ch
ng trong vic xc nh i tng no c to, ai to ra i tng ,
cch thc v thi im khi to i tng .
c im ni bt trong creational patterns l chng trnh cn s dng
i tng khng trc tip sinh ra i tng m nh cc phn t trung
gian tng linh ng.
Class creational patterns s dng c im tha k thay i class s
c s dng sinh ra i tng, Object creational patterns truyn qu
trnh khi to i tng cho mt i tng khc.
Creational Patterns
Chng 11 : Cc mu Creational
133
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 265
Xy dng mt m l (maze) cho cc tr chi c s dng m l.
Mt m l c nh ngha bng mt tp hp cc phng (room), mi
phng bit cc i tng k cn n 4 hng: bc, nam, ng, ty. i
tng k cn c th l mt phng khc, mt bc tng (wall) hay mt
cnh ca (door) sang phng khc.
Cc hng c th c hin thc bi cc hng s hay kiu enum trong
C++:
enum Direction {North , South , East , West }
Lc lp ca h thng nh sau:
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 266
MapSite
Enter()
Room
Enter()
SetSide()
GetSide()
roomNumber
Maze
AddRoom()
RoomNo()
Wall
Enter()
Door
Enter()
isOpen
sides
rooms
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
134
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 267
MapSite l lp cha tru tng ca tt c cc phn t trong m l.
MapSite ch c mt phng thc Enter ch thao tc i vo mt phn
t (room, door, wall). Ty c im ca mnh, cc phn t s phi
override phng thc ny.
Lp Room c th c hin thc trong C++ nh sau :
class Room : public MapSite {
public:
Room (int roomNo);
MapSite* GetSide (Direction) const;
void SetSide(Direction, MapSite*);
virtual void Enter();
private:
MapSite m_sides[4];
int m_roomNumber;
};
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 268
Class Wall c th c hin thc trong C++ nh sau :
class Wall : public MapSite {
public:
Wall ();
virtual void Enter();
};
Class Door c th hin thc trong C++ nh sau :
class Door : public MapSite {
public:
Door (Room* = 0, Room*=0);
virtual void Enter();
Room* OtherSideFrom (Room*);
private:
Room* m_room1, m_room2;
bool m_isOpen;
};
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
135
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 269
Lp Maze c th hin thc trong C++ nh sau :
class Maze {
public:
Maze();
void AddRoom(Room*);
Room* RoomNo(int) const;
private:
//
};
Lp MazeGame tch hp nhng lp gii thiu to thnh mt game
c s dng m l. Lp ny phi to ra mt m l (Maze), method
CreateMaze to mt m l n gin gm 2 phng c th c nh
ngha trong C++ nh sau :
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 270
Maze* MazeGame::CreateMaze() {
Maze* aMaze=new Maze;
Room* r1=new Room(1);
Room* r2=new Room(2);
Door* theDoor = new Door(r1,r2);
aMaze->AddRoom(r1)
aMaze->AddRoom(r2)
r1->setSide(North, new Wall);
r2->setSide(North, new Wall);
return aMaze;
}
Phng thc CreateMaze b rng buc cng (Hard code), iu ny dn n hai nhc
im :
- Khng th sinh ra mt maze c cu trc khc (VD: cc phn t cc hng ca
cc room thay i).
- Rt kh ti s dng phng thc ny to ra mt maze c c im khc (VD:
maze trong cc phng c th c bom hoc qu tng, ca gia cc phng ch c
th m bng cu thn ch) v CreateMaze rng buc cng cc tn lp.
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
136
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 271
Truyn cho phng thc CreateMaze mt i tng c kh nng sinh ra room, wall,
door theo c th ca ng dng. Khi nu mun thay i maze th ch cn truyn
mt i tng khc. y l hng tip cn ca mu Abstract Factory.
Code trong CreateMaze gi cc phng thc thng thng (hoc virtual) khi
to i tng thay v gi constructor ca lp tng ng. Khi nu mun thay i
lp s to i tng th ch cn to mt subclass tha k MazeGame, trong
override cc phng thc khi to i tng trn. y l hng tip cn ca mu
Factory Method.
CreateMaze c truyn cc i tng room, door, wall c kh nng sinh ra i
tng tng t chng (clone). Khi nu mun thay i i tng trong
CreateMaze, ta ch cn truyn vo cc i tng khc. Cc i tng truyn cho
CreateMaze gi l Prototype v hng tip cn ny l ca mu Prototype.
CreateMaze c truyn 1 i tng m c th to ml mi dng cc tc v thm
phng, ca v tng vo ml m n xy dng ri ta dng tha k thay i cc
phn ca ml hay cch thc xy dng ml. y l hng tip cn ca mu
Builder.
Trong cc slide sau chng ta s tm hiu cc mu phn mm ny.
Gii php khc phc
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 272
Abstract Factory
Chng 11 : Cc mu Creational
Mc tiu : cung cp interface cho vic khi to i tng m khng cn
xc nh trc lp c th (concrete) tng ng.
Nhu cu p dng : c nhng trng hp khi xy dng chng trnh
chng ta cha bit chnh xc hay cha mun rng buc lp no s c
s dng sinh ra i tng, chng hn:
chng trnh c kh nng chy trn nhiu platform. Mi platform c mt h
cc lp giao din, vic s dng c th h lp giao din no ch bit khi
chng trnh chy.
framework cn khi to i tng nhng cha bit trc lp c th s s
dng.
Nhng chng trnh nh vy thng c mt s yu cu i vi ngi thit k:
code chng trnh phi c kh nng tng tc tng qut ln cc i tng
s c sinh ra.
d chuyn i gia cc h i tng.
d b sung cc h i tng mi.
137
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 273
Gii php ngh:
Cung cp interface cho cc i tng d nh s c khi to khi h thng
chy, gi l AbstractProduct.
Cung cp interface khi to cc i tng kiu AbstractProduct, gi l
AbstractFactory.
khi to mt i tng c th, cn xy dng 2 lp concrete: mt lp hin
thc interface AbstractFactory khi to i tng t lp hin thc
AbstractProduct.
Hng tip cn trn l ca mu Abstract Factory.
V d v qu trnh khi to i tng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 274
Th d v mu AbstractFactory
Chng 11 : Cc mu Creational
WidgetFactory
CreateScrollbar()
CreateWindow()
MotifWidgetFactory
CreateScrollbar()
CreateWindow()
PMWidgetFactory
CreateScrollbar()
CreateWindow()
Window
Client
PMWindow MotifWindow
Scrollbar
PMScrollbar MotifScrollbar
138
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 275
AbstractFactory
CreateProductA()
CreateProductB()
ConcreteFactory1
CreateProductA()
CreateProductB()
ConcreteFactory2
CreateProductA()
CreateProductB()
AbstractProductA
Client
ProductA2 ProductA1
AbstractProductB
ProductB2 ProductB1
S cu trc ca mu AbstractFactory
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 276
AbstractFactory : nh ngha interface cho vic khi to i
tng. Thng l lp Abstract.
ConcreteFactory : hin thc cc method trong interface
AbstractFactory to ra cc i tng c th. H thng c nhiu
ConcreteFactory, mi ConcreteFactory sinh ra mt nhm i
tng, cc nhm i tng do cc ConcreteFactory sinh ra tng
ng nhau v vai tr.
AbstractProduct : lp Abstract, nh ngha interface cho mt kiu
lp (kiu lp button, kiu lp Scrollbar)
ConcreteProduct : lp hin thc i tng c sinh ra t lp
ConcreteFactory tng ng, tha k lp Abstract Product.
Cc phn t tham gia
Chng 11 : Cc mu Creational
139
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 277
Client : chng trnh cn to cc i tng. Client ch s dng cc
interface AbstractFactory v AbstractProduct.
Qu trnh tng tc gia cc phn t :
Ti thi im compile, Client nm gi pointer n phn t ca lp
AbstractFactory (gi s l _factory).
Ti thi im run-time, Client bit cn s dng h i tng
ConcreteProduct no s khi to i tng ConcreteFactory tng
ng v gn vo _factory. Client thng qua interface AbstractFactory
yu cu i tng ConcreteFactory sinh ra cc i tng mong
mun.
Client da vo interface ca cc i tng ConcreteProduct c
khai bo trong AbstractProduct s dng cc i tng ny.
Cc phn t tham gia
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 278
h thng mun xc nh qu trnh khi to v s dng i tng ti thi
im chy chng trnh.
h thng mun tng tc vi mt h trong mt tp hp h i tng v
vic chn h i tng c xc nh ti thi im run-time.
h thng mun rng buc tnh s dng ng thi cc phn t trong mt
h i tng.
Cc ng cnh nn dng mu Abstract Factory
Chng 11 : Cc mu Creational
140
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 279
Lp MazeFactory (tng ng phn t Abstract Factory) cung cp
phng thc mc nh khi to cc i tng maze, wall, room, door.
Cc lp con tha k c th override cc phng thc ny sinh ra cc
maze, wall, room, door khc.
MazeFactory khng s dng Constructor m cung cp cc method
Make to ra cc i tng.
MazeFactory c th c hin thc trong C++ nh sau:
class MazeFactory {
public: MazeFactory();
virtual Maze* MakeMaze() const { return new Maze;}
virtual Wall* MakeWall() const { return new Wall;}
virtual Room* MakeRoom(int n) const {
return new Room(n); }
virtual Door* MakeDoor(Room* r1, Room* r2) const {
return new Door(r1, r2);
}
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 280
Lp MazeGame ng vai tr l Client s dng mu Abstract Factory.
Phng thc CreateMaze c truyn mt i tng kiu MazeFactory,
CreateMaze s dng i tng ny sinh ra cc i tng cn thit.
CreateMaze c th c hin thc trong C++ nh sau:
Maze* MazeGame::CreateMaze (MazeFactory& factory) {
Maze* aMaze = factory.MakeMaze();
Room* r1 = factory.MakeRoom (1);
Room* r2 = factory.MakeRoom (2);
Door* aDoor = factory.MakeDoor(r1, r2);
aMaze->AddRoom(r1);
aMaze->AddRoom(r2);
r1->SetSide(North, factory.MakeWall());
return aMaze;
}
V d p dng
Chng 11 : Cc mu Creational
141
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 281
thay i i tng to ra, ta ch vic truyn mt i tng factory
khc, min l i tng ny thuc kiu MazeFactory.
VD to mt maze m trong room c th c bom, ta nh ngha lp
RoomWithABomb tha k lp Room v lp BombedMazeFactory tha
k lp MazeFactory trong override phng thc MakeRoom nh sau:
Room* BombedMazeFactory::MakeRoom(int n) const {
return new RoomWithABomb(n);
}
Trong chng trnh Game ch cn thc hin on code:
MazeGame game;
BombedMazeFactory factory;
game.CreateMaze(factory);
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 282
Khi p dng mu Abstract Factory, chng trnh c mt s c im :
c th thch ng vi nhiu kiu maze khc nhau.
vic thm mt kiu maze ch l thm mt h cc lp, khng nh hng n
code chng trnh c.
chng trnh nht qun trong vic s dng mt h cc phn t ca cng
mt kiu maze, khng xy ra trng hp 2 phn t ca 2 h khc nhau
cng tn ti trong code ca client.
vic b sung mt loi phn t vo maze s gp kh khn v phi b sung
vo lp MazeFactory, do s nh hng n hu nh tt c cc lp khc.
V d p dng
Chng 11 : Cc mu Creational
142
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 283
Factory Method
Chng 11 : Cc mu Creational
Mc tiu : nh ngha interface sinh ra i tng nhng cho lp
con quyt nh lp no c dng sinh ra i tng. Factory Method
cho php mt lp chuyn qu trnh khi to i tng cho lp con.
Nhu cu p dng :
Tng t nhu cu p dng mu Abstract Factory: cn phi cung
cp gii php to i tng nhng cha bit c lp c th dng
sinh ra i tng.
Hng gii quyt theo mu Factory Method: thay v to lp Abstract
Factory to cc i tng nh trong mu Abstract Factory,
Factory Method to mt phng thc o, cc lp con s override
phng thc ny khi to i tng.
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 284
Application
CreateDocument()
NewDocument()
OpenDocument()
MyDocument
S th d
Chng 11 : Cc mu Creational
Document
Open()
Close()
Save()
Revert()
Document* doc=CreateDocument();
docs.Add(doc);
doc->Open();
return new MyDocument;
MyApplication
CreateDocument()
docs
143
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 285
S cu trc ca mu Factory method
Chng 11 : Cc mu Creational
Creator
FactoryMethod()
AnOperation()
ConcreteProduct
Product
...
Product = FactoryMethod();
...
return new ConcreteProduct;
ConcreteCreator
FactoryMethod()
docs
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 286
Product : nh ngha interface cho cc i tng sn phm.
ConcreteProduct : lp th hin i tng sn phm cn to. Hin
thc interface Product.
Creator : nh ngha factory method, sn phm tr v l i tng
kiu Product.
ConcreteCreator : tha k lp Creator, override factory method
tr v i tng ConcreteProduct.
Cc phn t tham gia
Chng 11 : Cc mu Creational
144
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 287
mt lp khng bit trc lp ca i tng m n cn khi to.
mt lp mun lp con ca mnh thay i hay xc nh lp ca i tng
cn khi to.
mt lp mun chuyn qu trnh hin thc mt nhim v no cho mt
trong cc lp con nhng cho php ng dng xc nh lp con c th.
Cc ng cnh nn dng mu Factory Method
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 288
Lp MazeGame ng vai tr l Creator, cung cp cc factory method
to cc i tng:
class MazeGame {
public: Maze* CreateMaze();
// factory methods:
virtual Maze* MakeMaze() const { return new Maze; }
virtual Room* MakeRoom(int n) const { return new Room(n); }
virtual Wall* MakeWall() const { return new Wall; }
virtual Door* MakeDoor(Room* r1, Room* r2) const { return
new Door(r1, r2); }
};
V d p dng
Chng 11 : Cc mu Creational
145
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 289
Method CreateMaze c th c nh ngha li nh sau:
Maze* MazeGame::CreateMaze () {
Maze* aMaze = MakeMaze();
Room* r1 = MakeRoom(1); Room* r2 = MakeRoom(2);
Door* theDoor = MakeDoor(r1, r2);
aMaze->AddRoom(r1);
aMaze->AddRoom(r2);
r1->SetSide(North, MakeWall());
//.
r2->SetSide(North, MakeWall());
//.
return aMaze;
}
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 290
Cc maze game khc mun thay i phn t trong game th:
nh ngha cc lp tha k t cc lp th hin cc phn t tng ng
VD: RoomWithABomb tha k Room.
nh ngha lp tha k lp MazeGame, trong lp ny override factory
method to ra i tng mun thay i.
VD:
class BombedMazeGame : public MazeGame {
public: BombedMazeGame();
virtual Wall* MakeWall() const { return new BombedWall; }
virtual Room* MakeRoom(int n) const
{ return new RoomWithABomb(n); }
};
V d p dng
Chng 11 : Cc mu Creational
146
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 291
Prototype
Chng 11 : Cc mu Creational
Mc tiu : gip khi to i tng bng cch copy mt i tng khc
(prototype) ang tn ti.
Nhu cu p dng :
Mun to i tng nhng khng bit hoc khng mun s dng lp
Concrete. V d Editor Framework cho php ng dng b sung cc
control vo toolbox nhng cha bit lp c th s sinh ra Control.
Gii php ngh :
+ Framework cung cp interface copy mt i tng, interface
ny s c cc lp concrete cn sinh ra i tng implement.
+ ng dng pht trin t Framework hay component to ra i
tng mong mun, sau mi ln to thm mt i tng bng
cch gi hm copy i tng ny.
y chnh l phng php ca mu Prototype.
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 292
V d v mu Prototype
Chng 11 : Cc mu Creational
Tool
Manipulate()
return copy of self;
prototype
MusicsalNote
Draw(Position)
Clone()
p = protoype->Clone();
while (user drag mouse) {
p->Draw(new position);
}
insert p onto drawing
WholeNote
Draw(Position)
Clone()
return copy of self;
HalfNote
Draw(Position)
Clone()
MusicalNote
Staff
Draw(Position)
Clone()
GraphicTool
Manipulate()
RotateTool
Manipulate()
147
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 293
S cu trc ca mu Prototype
Chng 11 : Cc mu Creational
Client
Operation()
return copy of self;
return copy of shelf;
prototype
Prototype
Clone()
p = protoype->Clone();
ConcretePrototype1
Clone()
ConcretePrototype2
Clone()
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 294
Prototype: cung cp interface copy chnh n (clone)
ConcretePrototype: hin thc interface c cung cp bi
Prototype copy chnh n.
Client: to mi i tng bng cch yu cu mt i tng c
(prototype) copy chnh n.
Cc phn t tham gia
Chng 11 : Cc mu Creational
148
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 295
Class c th cung cp phng thc set gi tr cho i tng sau
khi c to ra bng cch copy t prototype.
Nu s lng prototype trong ng dng khng c nh, nn qun
l chng bng mt i tng prototype manager. i tng ny
cha cc tham kho n cc prototype v cc key tng ng
truy xut chng.
Vic hin thc phng thc clone ph thuc nhiu vo ngn ng
lp trnh. C th copy hon ton (deep copy) hay share bin
(shallow copy).
Java, SmallTalk, Eiffel cung cp phng thc clone(). C++ c
phng thc copy.
Tt c nhng phng thc trn u mc nh thc hin shallow
copy.
Khi hin thc deep copy, vn tham kho vng.
Mt s vn hin thc
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 296
Mu Prototype thng c s dng khi h thng cn c lp vi cc
i tng m n sinh ra v
khi lp cn dng sinh i tng c xc nh ti thi im
chng trnh chy (dynamic loading), hoc
trnh trng hp xy dng s lng cc phn t khi to i tng
ngang bng vi s lng kiu i tng b sung d nh to ra, hoc
khi cc i tng ca cng mt class c t im khc bit.
Cc ng cnh nn dng mu Prototype
Chng 11 : Cc mu Creational
149
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 297
Chng trnh ny pht trin t v d p dng mu Abstract Factory.
nh ngha lp MazePrototypeFactory tha k lp MazeFactory, i
tng lp ny c cung cp cc prototype to ra cc i tng cng
loi. MazePrototypeFactory c th c hin thc trong C++ nh sau:
class MazePrototypeFactory : public MazeFactory{
public:
MazePrototypeFactory(Maze*, Wall*, Room*, Door*);
virtual Maze* MakeMaze() const;
...// Cc method khi to cc phn t ca maze
private:
Maze* _mazePrototype;
Room* _roomPrototype;
Wall* _wallPrototype;
Door* _doorPrototype;
}
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 298
Constructor ca lp MazePrototypeFactory ch khi to cc prototype
vi cc i tng tng ng c cung cp t ng dng:
MazePrototypeFactory::MazePrototypeFactory (
Maze* m, Wall* w, Room* r, Door* d ) {
_mazePrototype = m;
_wallPrototype = w;
_roomPrototype = r;
_doorPrototype = d;
}
V d p dng
Chng 11 : Cc mu Creational
150
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 299
Cc lp Door, Wall, Room u phi hin thc phng thc clone tha k
t lp MapSite v cc phng thc set gi tr nu cn:
class Door : public MapSite {
public: Door();
Door(const Door&);
virtual void Initialize(Room*, Room*);
virtual Door* Clone() const;
private: Room* _room1; Room* _room2;
};
Door::Door (const Door& other)
{ _room1 = other._room1; _room2 = other._room2; }
void Door::Initialize (Room* r1, Room* r2)
{ _room1 = r1; _room2 = r2; }
Door* Door::Clone () const { return new Door(*this); }
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 300
Cc phng thc khi to wall, room, door u clone prototype c sn
v set cc gi tr nu cn:
Wall* MazePrototypeFactory::MakeWall () const {
return _wallPrototype->Clone();
}
Door* MazePrototypeFactory::MakeDoor (Room* r1, Room *r2) const {
Door* door = _doorPrototype->Clone();
door->Initialize(r1, r2);
return door;
}
V d p dng
Chng 11 : Cc mu Creational
151
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 301
thay i maze cn to, ta ch cn cung cp cc factory cho
constructor ca MazePrototypeFactory :
MazeGame game;
MazePrototypeFactory bombedMazeFactory( new Maze, new
BombedWall, new RoomWithABomb, new Door );
Maze* maze = game.CreateMaze(bombedMazeFactory);
Khi b sung phn t sn phm mi (VD: roomWithABomb), khng cn
phi cung cp lp Factory (BombedMazeFactory) sinh ra cc sn
phm ny m ch cn cung cp prototype ca sn phm .
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 302
Mu Builder
Chng 11 : Cc mu Creational
Mc tiu : tch vic xy dng i tng phc tp khi vic miu t n
sao cho cng 1 qui trnh xy dng c th to ra nhiu s miu t khc
nhau.
Nhu cu p dng :
Trnh c file RTF cn i file RTF sang 1 s dng khc cha bit
trc nh text th, Tex,... hay sang 1 iu khin son tho text.
Gii php ngh :
+ nh ngha class TextConverter cha cc tc v chuyn i token
c bn.
+ Mi nh dng cn chuyn ti s c m trch bi 1 subclass
ca class TextConverter.
y chnh l phng php ca mu Builder.
152
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 303
V d v mu Builder
Chng 11 : Cc mu Creational
RTFReader
ParseRTF()
builder
while (t=getnexttoken()) {
switch (t.type) {
case CHAR :
builder->ConvertCharacter(t.Char);
break;
case FONT :
builder->ConvertFont(t.Font);
break;
case PARA :
builder->ConvertParagraph();
}
}
ASCIIConverter
ConvertCharacter()
GetASCIIText()
TextConverter
ConvertCharacter()
ConvertFont()
ConvertParagraph()
TeXConverter
ConvertCharacter()
ConvertFont()
ConvertParagraph()
GetTeXText()
TextWidgetConverter
ConvertCharacter()
ConvertFont()
ConvertParagraph()
GetTextWidget()
ASCIIText
TeXText TextWidget
builders
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 304
S cu trc ca mu Builder
Chng 11 : Cc mu Creational
Director
Construct()
builder
forall objects in structure {
builder->BuildPart();
}
Builder
BuildPart()
ConcreteBuilder1
BuildPart()
GetResult()
Product1
builders
ConcreteBuilder2
BuildPart()
GetResult()
Product2
ConcreteBuilder3
BuildPart()
GetResult()
Product3
153
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 305
Director (RTFReader) : xy dng i tng dng interface Builder.
Builder (TextConverter) : cung cp interface xy dng cc phn ca
i tng Product.
ConcreteBuilder (ASCIIConverter, TeXConverter) :
xy dng v lp ghp cc phn ca Product bng cch hin thc
interface ca class Builder.
nh ngha v ghi gi i tng m n to ra.
cung cp interface nhn i tng.
Product (ASCIIText, TeXText) :
miu t i tng phc tp cn xy dng.
bao gm cc class nh ngha cc thnh phn bao gm interface
phc v vic lp ghp cc thnh phn thnh kt qu cui cng.
Cc phn t tham gia
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 306
Mu Builder thng c s dng khi :
gii thut to i tng phc tp nn c lp vi cc phn cu thnh
i tng v cch lp ghp chng.
qui trnh xy dng phi cho php xy dng nhiu bin th khc nhau
ca i tng
Cc ng cnh nn dng mu Builder
Chng 11 : Cc mu Creational
154
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 307
Ta xy dng interface ca builder bng class MazeBuilder sau :
class MazeBuilder {
protected:
MazeBuilder();
public:
// methods:
virtual void BuildMaze() { };
virtual void BuildRoom (int n) { };
virtual void BuildDoor (int roomFrom, int RoomTo) { } ;
virtual Maze* GetMaze() { return 0; };
};
V d p dng
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 308
Ta hiu chnh hm CreateMaze() ca class MazeGame thnh :
Maze* Mazegame::CreateMaze (MazeBuilder& builder) {
builder.BuildMaze();
builder.BuildRoom(1);
builder.BuildRoom(2);
builder.BuildDoor(1,2);
return builder.GetMaze();
}
Ta c th nh ngha cc subclass ca class MazeBuilder to ra cc
Maze khc nhau v to i tng ca subclass ny ri truyn n nh l
tham s ca hm CreateMaze() to cc Maze khc nhau.
V d p dng
Chng 11 : Cc mu Creational
155
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 309
Singleton
Chng 11 : Cc mu Creational
Mc tiu : m bo mi class ch c 1 instance v cung cp 1 im truy
xut ton cc n i tng.
Nhu cu p dng :
ch 1 "printer spooler" qun l cc my in.
ch 1 trnh qun l cho cc file ca h thng file.
ch 1 trnh qun l windows cho cc ca s trn mn desktop...
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 310
S cu trc ca mu Singleton
Chng 11 : Cc mu Creational
return uniqueInstance ;
Singleton
static Instance()
SingletonOperation()
GetSingletonData()
static uniqueInstance
singletonData
156
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 311
Singleton :
nh ngha tc v Instance gip client truy xut instance duy nht ca class.
Instance() l tc v chung ca class (hm static trong C++).
chu trch nhim v vic to instance duy nht cho class.
Cng tc gia cc i tng : cc clients truy xut instance ca class
Singleton thng qua vic gi tc v Instance() ca class.
Cc phn t tham gia
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 312
Trng i Hc Bch Khoa Tp. HCM
Khoa Cng ngh Thng tin
Chng 12
CC MU BEHAVIORAL
Mu Chain of Responsibility
Mu Template Method
Mu Strategy
Mu Command
Mu State
Mu Observer
Chng 11 : Cc mu Creational
157
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 313
Tp trung vo gii thut v s phn b cng vic gia cc object
Class patterns s dng tha k chuyn giao thao tc gia cc class.
Object patterns s dng tnh a hnh v bao gp truyn thao tc t
i tng ny sang i tng khc.
Cc slide sau s gii thiu cc pattern Chain of Responsibility, Template
Method (class pattern), Strategy (object pattern) v Command (object
Pattern),..
Behavioral Patterns
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 314
Mu Chain of Responsibility
Chng 11 : Cc mu Creational
Mc tiu : Trnh vic gn kt cng gia phn t gi request vi phn t
nhn v x l request bng cch cho php hn 1 i tng c c hi x
l request. Lin kt cc i tng nhn request thnh dy chuyn ri
"pass" request xuyn qua tng i tng x l n khi gp i tng x
l c th.
Nhu cu p dng : Trong ng dng c tr gip theo ng cnh th user c
th thu c thng tin tr gip ca 1 phn t giao din no bng cch
ch cn click vo n. Ta nn t chc thng tin tr gip theo tnh tng
qut t phn t c bit nht (nh nht) n tng qut nht (ln nht),
mi thng tin tr gip c x l bi i tng giao din tng ng ph
thuc vo ng cnh.
158
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 315
aPrintButton
handler
anOKButton
handler
aSavingDialog
handler
aPrintDialog
handler
anApplication
handler
Th d v mu Chain of Responsibility
Chng 11 : Cc mu Creational
Th d khi n phi chut vo button OK th trnh tr gip ca OKButton
s chy, n s hoc hin th Help hoc chuyn iu khin cho trnh tr
gip ca Dialog, trnh tr gip ca Dialog c th chuyn iu khin n
Application...
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 316
Th d v mu Chain of Responsibility
Chng 11 : Cc mu Creational
HelpHandler
HandleHelp()
handler
handler->HandleHelp();
Button
HandleHelp()
ShowHelp()
Application Widget
Dialog
if (can handle)
ShowHelp();
else
Handler::HandleHelp();
159
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 317
Lc cu trc ca mu Chain of Responsibility
Chng 11 : Cc mu Creational
Handler
HandleRequest()
successor
ConcreteHandler1
HandleRequest()
Client
ConcreteHandler2
HandleRequest()
aClient
aHandler
aConcreteHandler
successor
aConcreteHandler
successor
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 318
Handler (HelpHandler) :
nh ngha interface ca tc v x l request.
(optional) hin thc mi lin kt n i tng i sau (successor).
ConcreteHandler (PrintButton, PrintDialog) :
x l request m n c trch nhim x l.
c th truy xut i tng i sau.
nu c th x l c request, n s x l, nu khng forward request cho
i tng i sau gii quyt.
Client :
khi ng request v gi ti 1 ConcreteHandler u tin trong dy chuyn.
Cc phn t tham gia
Chng 11 : Cc mu Creational
160
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 319
Thng p dng mu Chain of Responsibility trong cc trng hp sau:
hn 1 i tng c th x l request nhng i tng no s x l th cha
bit trc. i tng x l s c xc nh ng.
bn mun gi request n 1 i tng x l no nhng khng xc nh
r rng.
mun xc nh tp cc i tng x l 1 request no 1 cch ng.
Cc ng cnh nn dng mu Chain of Responsibility
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 320
Template Method
Chng 11 : Cc mu Creational
Mc tiu : nh ngha b khung gii thut trong mt tc v nhng cho
php cc class con hin thc mt s phn ca tc v .
Nhu cu p dng : trong trng hp Windows cho php ngi lp trnh
Hook vo h thng, Windows sn nhng entry m ngi lp trnh
c th chn thm phn x l ca mnh. Ngi lp trnh khng th thay
th trnh t qu trnh x l ca Windows. Phng php lp trnh hng
i tng c th cung cp hng gii quyt nhng vn ny nh sau:
Mt lp nh ngha qu trnh x l bao gm nhiu tc v nh hn, cc tc v
nh hn c th cho lp con override chnh l cc im hook.
Cc lp con tha k hook vo qu trnh x l ca lp cha bng cch
override cc im hook.
Hng tip cn nh trn l ca mu Template Method.
161
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 321
Document
Save()
Open()
Close()
DoRead()
document
Application
AddDocument()
OpenDocument()
DoCreateDocument()
CanOpenDocument()
AboutToOpenDocument()
MyDocument
DoRead()
MyApplication
DoCreateDocument()
CanOpenDocument()
AboutToOpenDocument()
return new MyDocument;
docs
V d v mu Template Method
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 322
AbstractClass
TemplateMethod()
PrimitiveOperation1()
PrimitiveOperation2()
...
PrimitiveOperation1();
...
PrimitiveOperation2();
...
ConcreteClass
PrimitiveOperation1()
PrimitiveOperation2()
S cu trc mu Template Method
Chng 11 : Cc mu Creational
162
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 323
AbstractClass (Application) :
nh ngha cc primitive operation cho lp con override hin thc mt
phn ca hot ng. Cc phng thc ny l im m lp con c th hook
vo code ca lp cha.
hin thc template method, l method nh ngha b khung ca hot ng.
Template method kt hp cc primitive operation thc hin trn vn hot
ng.
ConcreteClass (MyApplication) : hin thc cc primitive operation
can thip mt phn vo qu trnh thc hin hot ng lp cha.
Cc phn t tham gia
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 324
Thng s dng Template method khi cn:
hin thc mt phn c nh ca hot ng v cho php lp con hin thc
phn c th thay i.
tp trung cc hnh vi ging nhau cc lp trnh trng lp.
kim sot qu trnh override ca lp con: ch cho php override nhng im
hook qui nh sn.
Cc ng cnh nn dng mu Template Method
Chng 11 : Cc mu Creational
163
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 325
Mu Strategy
Chng 11 : Cc mu Creational
Mc tiu : Cung cp mt h gii thut v cho php Client chn la linh
ng mt gii thut c th khi s dng.
Nhu cu p dng : Mt s chng trnh c nhiu gii thut khc nhau
cho cng mt vn . Nhu cu pht sinh: qun l cc gii thut mt
cch n gin v cho php client chn mt trong nhng gii thut
s dng mt cch linh ng.
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 326
V d v nhu cu ng dng Strategy
Chng 11 : Cc mu Creational
Chng trnh chi game c th c nhiu gii thut ty vo mc kh
ca cuc chi. Khi ngi chi chn mc kh d chnh l thao tc
chn gii thut. Do i tng gii thut phi tch bit vi code
chng trnh. Mt hng gii quyt c ngh nh sau:
nh ngha 1 interface chung cho cc lp th hin cc gii thut.
nh ngha cc lp concrete hin thc interface trn, mi lp concrete th
hin mt gii thut.
Chng trnh s dng i tng kiu interface v cho php client thay th
bng i tng th hin gii thut c th khi chy.
hng gii quyt vn ca mu Strategy.
164
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 327
Composition
Traverse()
Repair()
compositor->Compose();
compositor
V d v mu Strategy
Chng 11 : Cc mu Creational
Compositor
Compose()
ArrayCompositor
Compose()
TeXCompositor
Compose()
SimpleCompositor
Compose()
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 328
Context
ContextInterface()
strategy
Lc cu trc ca mu Strategy
Chng 11 : Cc mu Creational
Strategy
AlgorithmInterface()
ConcreteStrategyA
AlgorithmInterface()
ConcreteStrategyB
AlgorithmInterface()
ConcreteStrategyC
AlgorithmInterface()
165
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 329
Strategy (Compositor) : nh ngha interface cho tt c cc lp th hin
gii thut. C th nhn pointer n i tng Context trong qu trnh
khi to i tng truy xut d liu trong Context.
ConcreteStrategy (SimpleCompositor, TeXCompositor..) : hin thc
interface Strategy, th hin mt gii thut c th.
Context (Composition) :
ti thi im dch: ch s dng i tng kiu Strategy khi xc nh gii thut
cho vn cn x l.
ti thi im run-time: c cung cp mt i tng gii thut c th thay
th cho i tng Strategy.
c th cung cp entry cho php i tung kiu Strategy truy xut d liu.
Cc phn t tham gia
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 330
Thng p dng mu Strategy trong cc trng hp sau:
Mt lp c nhiu hnh vi loi loi tr ln nhau v qu trnh chuyn t hnh
vi ny sang hnh vi khc cn c thc hin d dng. Khi mi hnh vi s
c th hin trong 1 lp Concrete Strategy v lp c nhiu hnh vi l lp
Strategy.
Gii thut cn c che du c v d liu v cu trc i vi chng trnh
Client.
Mt s chng trnh c th p dng Strategy :
Compiler, OS: qu trnh ti u ha
Game: Qu trnh chn gii thut
Cc giao din tng qut (common dialog trong VB)
Cc ng cnh nn dng mu Strategy
Chng 11 : Cc mu Creational
166
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 331
Mu Command
Chng 11 : Cc mu Creational
Mc tiu : ng gi request vo trong mt Object, nh c th thng
s ha chng trnh nhn request v thc hin cc thao tc trn
request: sp xp, log, undo
Nhu cu p dng : i khi chng ta cn gi request n i tng nhng
khng bit c hnh ng s c thc thi cng nh nhng i tng
b tc ng bi request . V d user interface toolkit cn xy dng
trc vic truyn request n menu v button nhng ch c ng dng c
th mi xc nh c hnh ng khi click vo chng. Vn ny c th
c gii quyt nh sau:
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 332
V d v nhu cu ng dng mu Command
Chng 11 : Cc mu Creational
Xy dng lp tru tng Command, trong c phng thc tru tng
Execute().
Menu hay button gi lin kt n i tng kiu Command
Request c ng gi trong cc i tng tha k Command. Cc i
tng ny override phng thc Execute() xc nh hnh ng khi thc
thi request.
Khi ng dng cn gi request n cho menu hay button ch cn gi i
tng c ng gi request i. Menu hay button s gi phng thc
Execute() trn i tng .
167
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 333
V d v mu Command
Chng 11 : Cc mu Creational
Menu
Add(MenuItem)
Command
Execute()
command
command->Execute();
Document
Open()
Close()
Cut()
Copy()
Paste()
Application
Add(Document)
MenuItem
Clicked()
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 334
V d v mu Command
Chng 11 : Cc mu Creational
Command
Execute()
PasteCommand
Execute()
Document
Open()
Close()
Cut()
Copy()
Paste()
document
document->Paste();
Th d i tng PasteCommand h tr hot ng dn text t clipboard
vo 1 ti liu. Phn t nhn ca PasteCommand l i tng Document
m PasteCommand c cung cp trong lc "instantiation". tc v
Execute gi chc nng Paste trn Document nhn c.
168
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 335
V d v mu Command
Chng 11 : Cc mu Creational
Tc v Execute ca OpenCommand th khc : n hin th ca s yu
cu user nhp tn document ri to i tng Document tng ng,
"add" document vo ng dng nhn ri m document.
Command
Execute()
OpenCommand
Execute()
AskUser()
Application
Add(Document)
application
name = AskUser();
doc = new Document(name);
application-.Add(doc);
doc->Open();
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 336
V d v mu Command
Chng 11 : Cc mu Creational
i khi 1 option Menu cn thc thi 1 chui cc lnh, chng ta c th
nh ngha class MacroCommand cho php thi hnh 1 s lnh cha
bit trc.
Command
Execute()
MacroCommand
Execute()
commands
forall c in commands
c->Execute();
169
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 337
Lc class ca mu Command
Chng 11 : Cc mu Creational
Command
Execute()
receiver
receiver->Action();
Invoker Client
Receiver
Action() ConcreteCommand
Execute()
state
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 338
Command : Khai bo cc phng thc o (Execute()) gi thc thi
hay qun l request.
ConcreteCommand (PasteCommand, OpenCommand):
Xc nh i tng nhn tng tc (i tng lp Receiver).
Override phng thc Execute trong lp Command p ng request.
Client (Application) : khi to i tng ConcreteCommand v truyn
i tng nhn tng tc cho n.
Invoker (MenuItem): gi request n i tng Command.
Receiver (Document, Application) :
i tng nhn tng tc trong ConcreteCommand.
Bit cch thc hin nhng hnh ng p ng request.
Cc phn t tham gia
Chng 11 : Cc mu Creational
170
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 339
Qu trnh cng tc gia cc phn t
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 340
Thng s ha i tng bng hnh vi m i tng thc thi. Ngha l
mt entry ca i tng c th thc thi nhiu hnh vi khc nhau ty
thuc vo thng s (l i tng khc) truyn cho n.
Qun l, lu tr v thc thi request ti nhng thi im khc nhau. V
trong mu Command, request c lu tr trong cc i tng nn vic
lu tr v qun l request ch l vic lu tr v qun l cc i tng.
H tr undo, redo cc thao tc. Phng thc Execute() c th lu trng
thi c ca i tng Receiver phc hi li khi c yu cu.
H tr vic log li cc thay i trn i tng Receiver c th thc
hin tr li trong trng hp ng dng cha lu i tng Receiver
thay i m h thng li b hng. (V d MS Word c chc nng
recovery).
Cc h thng h tr transaction. Trng hp ny c th kt hp mu
Template Method.
Cc ng cnh nn dng mu Command
Chng 11 : Cc mu Creational
171
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 341
Mu State
Chng 11 : Cc mu Creational
Mc tiu : cho php 1 i tng thay i hnh vi khi trng thi bn trong
ca n thay i. Ta c cm gic nh class ca i tng b thay i.
Nhu cu p dng : trong class TCPConnection miu t 1 mi ni mng,
i tng TCPConnection c th 1 trong nhiu trng thi : Established,
Listening, Closed. Khi i tng TCPConnection nhn request, n s
p ng khc nhau ty vo trng thi hin hnh.
hng gii quyt vn ca mu State.
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 342
state->Open();
state
V d v mu State
Chng 11 : Cc mu Creational
TCPState
Open()
Close()
Acknowledge()
TCPConnection
Open()
Close()
Acknowledge()
TCPEstablished
Open()
Close()
Acknowledge()
TCPListen
Open()
Close()
Acknowledge()
TCPClosed
Open()
Close()
Acknowledge()
172
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 343
Lc cu trc ca mu State
Chng 11 : Cc mu Creational
state->Handle();
state
State
Handle()
...
Context
Request()
...
ConcreteStateA
Handle()
...
ConcreteStateB
Handle()
...
ConcreteStateC
Handle()
...
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 344
Context (TCPConnection) :
nh ngha interface cn dng cho client.
duy tr 1 tham kho n i tng ca 1 class con ConcreteState m nh
ngha trng thi hin hnh.
State (TCPState) :
nh ngha interface nhm bao ng hnh vi kt hp vi trng thi c th.
duy tr 1 tham kho n i tng ca 1 class con ConcreteState m nh
ngha trng thi hin hnh.
ConcreteState (TCPEstablished, TCPListen, TCPClose) :
nh ngha hnh vi c th kt hp vi trng thi ca mnh.
Cc phn t tham gia
Chng 11 : Cc mu Creational
173
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 345
Thng p dng mu State trong cc trng hp sau:
hnh vi ca i tng ph thuc vo trng thi ca n v phi thay i run-
time khi trng thi thay i.
cc tc v c nhng lnh iu kin s hc ln ph thuc vo trng thi i
tng.
Cc ng cnh nn dng mu State
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 346
Mu Observer
Chng 11 : Cc mu Creational
Mc tiu : nh ngha s ph thuc 1-n gia cc i tng sao cho khi 1
i tng thay i trng thi th cc i tng ph thuc c cnh bo
hu hiu chnh t ng ( m bo tnh nht qun).
Nhu cu p dng : trong ng dng qun l bng tnh, mi bng tnh l 1
database nhng n c trnh by di nhiu dng khc nhau nh
spreadsheet, barchart, piechart,... Mi khi ni dung database thay i ta
mun cp nht ng thi nhiu dng biu din n.
hng gii quyt vn ca mu Observer.
174
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 347
V d v mu Observer
Chng 11 : Cc mu Creational
Spreadsheet BarChart PieChart
Database
request, modification
thay i, notification
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 348
Lc cu trc ca mu Observer
Chng 11 : Cc mu Creational
forall o in observers
o->Update();
observers
Observer
Update()
Subject
Attach(Observer)
Detach(Observer)
Notify()
ConcreteObserver
Update()
observerState
observerState =
subject->GetState();
return subjectState();
ConcreteSubject
GetState()
SetState()
subjectState
175
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 349
Subject :
bit observer ca n. C th c nhiu observer quan st 1 subject.
cung cp interface Attach va Detach cc observer vo mnh.
Observer :
nh ngha interface hiu chnh cho cc i tng m s c cnh bo
hiu chnh subject ca mnh.
ConcreteSubject :
lu trng thi lu ti cc i tng ConcreteObserver.
gi cnh bo ti cc observer khi trng thi ca n thay i.
Concretebserver :
duy tr tham kho ti i tng ConcreteSubject.
lu trng thi m cn phi lun nht qun vi subject ca mnh.
hin thc interface hiu chnh gi trng thi lun nht qun vi subject
ca mnh.
Cc phn t tham gia
Chng 11 : Cc mu Creational
B mn Cng ngh phn mm
Khoa CNTT
H Bach Khoa Tp.HCM
Mn Phn tch & Thit k hng i tng dng UML
Slide 350
Thng p dng mu State trong cc trng hp sau:
khi 1 s tru tng c 2 kha cnh ph thuc ln nhau. Bao ng cc kha
cnh ny trong nhng i tng c lp gip ta thay i v dng li chng
c lp.
khi vic thay i i tng ny i hi phi thay i cc i tng khc
nhng bn khng bit trc c bao nhiu i tng cn thay i.
khi i tng cn c kh nng cnh bo cc i tng khc nhng khng
mun chng ghp ni cht vi nhau.
Cc ng cnh nn dng mu Observer
Chng 11 : Cc mu Creational