You are on page 1of 48

Nguyn l thit k v mu thit k

Ni dung
Thit k module Cht lng thit k o thit k tt Khi nim v mu thit k

Nguyn Vit H

Nguyn l thit k

Ti liu tham kho


Bruce Eckel, Thinking in Patterns Erich Gamma, Design Patterns Elements of Reusable Object-Oriented Software

Nguyn Vit H

Nguyn l thit k

Thit k module
Da trn quan im "chia tr"
C: phc tp E: n lc thc hin C(p1 + p2) > C(p1) + C(p2) E(p1 + p2) > E(p1) + E(p2)

gim phc tp cc b, d sa i c kh nng pht trin song song d sa i, d hiu nn d ti s dng

Nguyn Vit H

Nguyn l thit k

S lng module
Cn xc nh s mun ti u
chi ph pht trin module gi phn mm

chi ph tch hp

s module ti u
Nguyn Vit H Nguyn l thit k

s module
5

Cht lng = Che giu thng tin


S dng module thng qua cc giao din
tham s v gi tr tr li

Khng cn bit cch thc ci t thc t


thut ton cu trc d liu giao din ngoi lai (cc m un th cp, thit b vo/ra) ti nguyn h thng
Nguyn Vit H Nguyn l thit k 6

Che giu thng tin: l do


Gim hiu ng ph khi sa i module Gim s tc ng ca thit k tng th ln thit k cc b Nhn mnh vic trao i thng tin thng qua giao din Loi b vic s dng d liu dng chung Hng ti s ng gi chc nng - thuc tnh ca thit k tt To ra cc sn phm phn mm tt hn
Nguyn Vit H Nguyn l thit k 7

Cht lng thit k


Ph thuc bi ton, khng c phng php tng qut Mt s o
Coupling: mc ghp ni gia cc module Cohesion: mc lin quan ln nhau ca cc thnh phn bn trong mt module Understandability: tnh hiu c Adaptability: tnh thch nghi c

Nguyn Vit H

Nguyn l thit k

Coupling and Cohesion


Coupling (ghp ni)
o s lin kt (trao i d liu) gia cc m un ghp ni cht ch th kh hiu, kh sa i (thit kt ti)

Cohesion (kt dnh)


o s ph thuc ln nhau ca cc thnh phn trong mt module kt dnh cao th tnh cc b cao (c lp chc nng); d hiu, d sa i
Nguyn Vit H Nguyn l thit k 9

Coupling
normal coupling loose and best still very good ok ok

mc quan h ca cc module module nn ghp ni lng lo cng lng lo cng d sa i thit k

data coupling stamp coupling control coupling

common coupling content coupling

very bad tight and worst


10

Nguyn Vit H

Nguyn l thit k

Ghp ni ni dung (content coupling)


L trng hp xu nht Cc module dng ln d liu ca nhau - cc ngn ng bc thp khng c bin cc b - lm dng lnh Goto

Nguyn Vit H

Nguyn l thit k

11

Ghp ni chung (common coupling)


Cc module trao i d liu thng qua bin tng th Li ca module ny c th nh hng n hot ng ca module khc Kh s dng li cc module m un gy li

B A D liu
12

m un gp li

Nguyn Vit H

Nguyn l thit k

Ghp ni iu khin (control coupling)


Cc module trao i thng tin iu khin Lm cho thit k kh hiu, kh sa i, d nhm
printRecord

(name, sex)
printName

Nguyn Vit H

Nguyn l thit k

13

Ghp ni nhn (stamp coupling)


Cc module trao i tha thng tin Module c th thc hin chc nng ngoi mun Lm gim tnh thch nghi

(age)

(personel record)

calcAge
Nguyn Vit H Nguyn l thit k 14

Ghp ni d liu (data coupling)


Truyn d liu qua tham s Nhn kt qu qua tham s v gi tr tr li

(day of week)

(date)

calcDayOfWeek

Nguyn Vit H

Nguyn l thit k

15

Cohesion
mi module ch nn thc hin mt chc nng mi thnh phn nn tham gia thc hin chc nng
Nguyn Vit H

functional sequential communicational procedural temporal logical

high and best ok still ok not bad at all still not bad at all still not bad at all

coincidental

lowest and worst by far

Nguyn l thit k

16

Cc chng loi kt dnh


Kt dnh gom gp (coincidental cohesion) - cc thnh phn khng lin quan n nhau Kt dnh l gic (logical cohesion) - cc thnh phn lm chc nng l gic tng t - vd: hm x l li chung Kt dnh thi im (temporal cohesion) - cc thnh phn hot ng cng thi im - vd: hm khi to (c d liu, cp pht b nh...)
Nguyn Vit H Nguyn l thit k 17

Cc chng loi kt dnh


Kt dnh th tc (procedural cohesion) - cc thnh phn to c mt th t xc nh - vd: tnh lng c bn, tnh ph cp, tnh bo him Kt dnh truyn thng (communicational cohesion) - cc thnh phn truy cp cng d liu - vd: thng k (tnh max, min, mean, variation...)

Nguyn Vit H

Nguyn l thit k

18

Cc chng loi kt dnh


Kt dnh tun t (sequential cohesion) - output ca mt thnh phn l input ca thnh phn tip theo - vd: nh mu -> en trng -> nh nn Kt dnh chc nng (functional cohesion) - cc thnh phn cng gp phn thc hin mt chc nng - vd: sp xp
Nguyn Vit H Nguyn l thit k 19

Understandability
Tnh hiu c Ghp ni lng lo Kt dnh cao c lp ti liu Thut ton, cu trc d hiu

Nguyn Vit H

Nguyn l thit k

20

Thit k hng i tng


Thit k hng i tng hng ti cht lng thit k tt
ng gi, che du thng tin l cc thc th hot ng c lp trao i d liu qua thng ip c kh nng k tha cc b, d hiu, d ti s dng

Nguyn Vit H

Nguyn l thit k

21

Adaptability
Tnh thch nghi c Hiu c
sa i c, ti s dng c

T cha
khng s dng th vin ngoi mu thun vi xu hng ti s dng

Nguyn Vit H

Nguyn l thit k

22

Adaptability (2)
Cc chc nng cn c thit k sao cho d dng m rng m khng cn sa cc m c (Open closed principle) Tru tng ha l cha kha gii quyt vn ny
cc chc nng tru tng ha thng bt bin cc lp dn xut ci t cc gii php c th s dng a hnh

Mu thit k: l thit k chun cho cc bi ton thng gp


Nguyn Vit H Nguyn l thit k 23

Mu thit k (Design Patterns)


Creational - Thay th cho khi to tng minh, ngn nga ph thuc mi trng (platform) Structural - thao tc vi cc lp khng thay i c, gim ghp ni v cung cp cc gii php thay th k tha Behavioral - Che du ci t, che du thut ton, cho php thay i ng cu hnh ca i tng

Nguyn Vit H

Nguyn l thit k

24

Abstract Factory
Mt chng trnh cn c kh nng chn mt trong mt vi h cc lp i tng V d, giao din ha nn chy c trn mt vi mi trng Mi mi trng (platform) cung cp mt tp cc lp ha ring:
WinButton, WinScrollBar, WinWindow MotifButton, MotifScrollBar, MotifWindow pmButton, pmScrollBar, pmWindow
Nguyn Vit H Nguyn l thit k 25

Yu cu
Thng nht thao tc vi mi i tng: button, window,...
D dng - nh ngha giao din (interfaces):

Thng nht cch thc to i tng D dng thay i cc h lp i tng D dng thm h mi
Nguyn Vit H Nguyn l thit k 26

Gii php
nh ngha Factory - lp to i tng:
class WidgetFactory { Button makeButton(args) = 0; Window makeWindow(args) = 0; // other widgets }

Nguyn Vit H

Nguyn l thit k

27

Gii php (tt)


nh ngha Factory chi tit cho tng h lp i tng:
class WinWidgetFactory extends WidgetFactory { public Button makeButton(args) { return new WinButton(args); } public Window makeWindow(args) { return new WinWindow(args); } }
Nguyn Vit H Nguyn l thit k 28

Gii php (tt)


Chn h lp mun dng:
WidgetFactory wf = new WinWidgetFactory();

Khi khi to i tng, khng dng "new" m gi:


Button b = wf.makeButton(args);

Thay i h i tng - ch mt ln trong m ci t! Thm h - thm mt factory, khng nh hng ti m ang tn ti!
Nguyn Vit H Nguyn l thit k 29

S lp

Nguyn Vit H

Nguyn l thit k

30

ng dng
Cc h iu hnh khc nhau Cc chun look-and-feel khc nhau Cc giao thc truyn thng khc nhau

Nguyn Vit H

Nguyn l thit k

31

Composite
Mt chng trnh cn thao tc vi cc i tng d l n gin hay phc tp mt cch thng nht V d, chng trnh v hnh cha ng thi cc i tng n gin (on thng, hnh trn, vn bn) v i tng hp thnh (bnh xe = hnh trn + 6 on thng).
Nguyn Vit H Nguyn l thit k 32

Yu cu
Thao tc vi cc i tng n gin/phc tp mt cch thng nht - move, erase, rotate, set color Mt vi i tng hp thnh c nh ngha tnh (bnh xe) trong khi mt vi i tng khc c nh ngha ng (do ngi dng la chn...) i tng hp thnh c th to ra bng cc i tng hp thnh khc Chng ta cn mt cu trc d liu thng minh

Nguyn Vit H

Nguyn l thit k

33

Gii php
Mi i tng n gin k tha t mt giao din chung, v d Graphic:
class Graphic { abstract void move(int x, int y); abstract void setColor(Color c); abstract void rotate(double angle); }

Cc lp nh Line, Circle... k tha Graphic v thm cc chi tit (bn knh, di,...)
34

Nguyn Vit H

Nguyn l thit k

Gii php (tt)


Lp di y cng l mt lp dn xut:
class CompositeGraphic extends Graphic { Graphics list[]; ... public void rotate(double angle) { for (int i=0; i<list.length; i++) list[i].rotate(); } }
Nguyn Vit H Nguyn l thit k 35

Gii php (tt)


CompositeGraphic l
mt danh sch nn n c add(), remove() v count() Graphic nn n cn c rotate(), move() v setColor()

Cc thao tc i vi mt i tng hp thnh s dng mt vng lp for all Thao tc thc hin ngay c vi trng hp thnh phn ca Composite li l mt Composite khc - cu trc d liu dng cy C kh nng gi th t ca cc thnh phn
Nguyn Vit H Nguyn l thit k 36

Gii php (tt)


V d to mt i tng hp thnh:
CompositeGraphic cg; cg = new CompositeGraphic(); cg.add(new Line(0,0,100,100)); cg.add(new Circle(50,50,100)); cg.rotate(90);

Nguyn Vit H

Nguyn l thit k

37

S lp

K tha n Lp c s (root) cha phng thc add(), remove()


Nguyn Vit H Nguyn l thit k 38

ng dng
c dng trong hu ht cc h thng HT Chng trnh son tho Giao din ha Cy phn tch cho bin dch (mt khi l mt tp cc lnh/li gi hm/cc khi khc)
Nguyn Vit H Nguyn l thit k 39

Proxy Pattern
Cc i tng c kch thc ln, ch nn np vo b nh khi thc s cn thit; hay cc i tng vng a ch khc (remote objects) V d: Xy dng mt trnh son tho vn bn c nhng cc i tng Graphic
Vn t ra: Vic np cc i tng Graphic phc tp thng rt tn km, trong khi vn bn cn c m nhanh Gii php: s dng ImageProxy

Nguyn Vit H

Nguyn l thit k

40

S lp

Nguyn Vit H

Nguyn l thit k

41

p dng
Proxy c s dng khi no cn thit phi c mt tham chiu thng minh n mt i tng hn l ch s dng mt con tr n gin
cung cp i din cho mt i tng mt khng gian a ch khc (remote proxy). tr hon vic to ra cc i tng phc tp (virtual proxy). qun l truy cp n i tng c nhiu quyn truy cp khc nhau (protection proxy). smart reference

Nguyn Vit H

Nguyn l thit k

42

Strategy
Chng trnh cn chuyn i ng gia cc thut ton V d, chng trnh son tho s dng vi thut ton hin th vi cc hiu ng/li ch khc nhau

Nguyn Vit H

Nguyn l thit k

43

Yu cu
Thut ton phc tp v s khng c li khi ci t chng trc tip trong lp s dng chng
v d: vic ci thut ton hin th vo lp Document l khng thch hp

Cn thay i ng gia cc thut ton D dng thm thut ton mi

Nguyn Vit H

Nguyn l thit k

44

Gii php
nh ngha lp tru tng biu din thut ton:
class Renderer { abstract void render(Document d); }

Mi thut ton l mt lp dn xut


FastRenderer, TexRenderer,

Nguyn Vit H

Nguyn l thit k

45

Gii php (tt)


i tng "document" t chn thut ton v:
class Document { render() { renderer.render(this); } setFastRendering() { renderer = new FastRenderer(); } private Renderer renderer; }
Nguyn l thit k 46

Nguyn Vit H

S lp

Nguyn Vit H

Nguyn l thit k

47

ng dng
Chng trnh v/son tho Ti u bin dch Chn la cc thut ton heuristic khc nhau (tr chi...) La chn cc phng thc qun l b nh khc nhau

Nguyn Vit H

Nguyn l thit k

48

You might also like