68
Design Patterns

Design Patterns

Embed Size (px)

DESCRIPTION

Design Patterns

Citation preview

  • Design Patterns

  • Gii thiuTrnh by v design patterns[Gam95], mt cch tip cn da mu (pattern-based approach) c tc dng h tr cho pha thit k phn mm. (Nguyn do: Ch dng cc PP phn tch thit k vn cha ...)Lin h n cc tip cn tng t: analysis patterns, design heuristics, process patterns, ...

  • Ni dung1. Dn nhp2. Tng quan v mu thit k GoF3. K tha v a hnh: c s cho cc mu GoF4. Vi mu GoF tiu biu v ng dng5. Cc tip cn tng t

  • Dn nhpXu hng s dng mu trong cng vic chuyn mn, trong hc tp:Cc mu, khun c dng trong cc ngnh cng nghip khc nhau (in n, c, ...)Cc bi tp mu cho hc sinh, sinh vin Cc mu chng trnhCc mu hng dn thit k giao din vi ngi dng...

  • Dn nhpNgun gc ca mu thit k phn mmNgn ng? mu ca kin trc s C. Alexander [Alex77]: thit k nh bng cch lp rp cc khun mu c sn tng cho vic su tm v s dng cc mu phn mmCc idiom trong lp tr?nh C++ [Cop92]

  • Dn nhpThut ng - Cc t: sample, pattern, template,... - Design patterns: Patterns in Object-oriented software design - a design pattern: an elegant solution to a specific problem in OO software design - Thut ng ting Vit...

  • nh nghanh ngha mt mu (pattern) ni chung: Mt mu l mt cp (vn , li gii) c th p dng trong nhiu tnh hung, ng cnh khc nhau. Mi mu thng bao gm cc b phn sau:TnNi dung vn Li gii (phi tng qut c th dng trong nhiu tnh hung)Cc h qu mang li v v d p dng

  • Tng quan v mu thit k GoFNgun gc lch s vTc giGm 23 mu thit k ca 4 tc gi: Erich Gamma, Richard Helm, Ralph Johnson, v John Vlissides;Cc mu ny cn c gi l mu GoF (Gang of Four)Finding patterns is much easier than describing them

  • Tng quan v mu thit k GoFNgun gc lch s vTc giGm 23 mu thit k ca 4 tc gi: Erich Gamma, Richard Helm, Ralph Johnson, v John Vlissides;Cc mu ny cn c gi l mu GoF (Gang of Four)Finding patterns is much easier than describing them

  • Tng quan v mu thit k GoFNgun gc lch s vTc giKhong trong ca b mu ny c ngun gc t lun n tin s ca Erich Gamma. Cc tc gi gp nhau ti 2 hi ngh? OOPSLA91 v OOPSLA92 (Object-Oriented Programming Systems, Languages, and Applications Conference); Sau cng lm vic son li mt b gm 23 mu v trnh by ti hi ngh ECOOP93 (European Conference on Object-Oriented Programming).

  • Cu trc chung m t mu GoFTn v Phn loiMc ch, nh: m t ngn gn v ma?uB danhMotivation: trnh by mt tnh hung c th trong thit k phn mm dn n vic s dng mu ny gii quyt vn .Kh nng ng dng: gi cc tnh hung trong thit k m c th ng dng mu ny

  • Cu trc chung m t mu GoFCu trc: m t mu bng cc k hiu hnh thng dng trong cc phng php p.tch/t.k (k hiu OMT, UML, ...)Cc thnh vin: trnh by ngha ca cc lp/i tng tham gia vo mu thit k v trch nhim ca chngS cng tc: cc thnh vin (lp/i tng) ca mu cng tc nh th no thc hin trch nhim ca chng Cc h qu mang li

  • Cu trc chung m t mu GoFCh lin quan n vic ci tM ngun minh haNu ra nhng v d v cc h thng thc t ( c pht trin v ang chy) m c s dng mu nyCc mu lin quan: nhng mu no c lin h vi mu ny, nhng im quan trng cn phi phn bit; mu ny c th dng phi hp vi nhng mu no.

  • Danh sch 23 mu GoF

    CAC MAU VE TAO LAP LP hay OI TNG

    Ten

    Muc ch

    Abstract Factory

    (Fabrique Abstraite)

    Cung cap mot interface cho viec tao lap cac oi tng (co lien he vi nhau) ma khong can qui nh lp khi tao moi oi tng

    Builder

    (Monter)

    Tach ri viec xay dng (construction) mot oi tng phc tap khoi bieu dien cua no sao cho cung mot tien trnh xay dng co the tao c cac bieu dien khac nhau

    Factory Method(Fabrication)

    nh ngha mot interface e tao lap oi tng nhng uy nhiem viec instanciation cho cac lp con (cac lp ke tha)

    Prototype

    Qui nh loai cua cac oi tng can tao bang cach dung mot oi tng mau, tao mi nh vao sao chep oi tng mau nay.

    Singleton

    Cai at lp ma ch co mot the hien (oi tng) duy nhat

  • CAC MAU VE CAU TRUC LP hay OI TNG

    Ten

    Muc ch

    Adapter

    (adapteur)

    Do van e tng thch, thay oi interface cua mot lp thanh mot interface khac phu hp vi yeu cau ngi s dung lp.

    Bridge

    (Pont)

    Tach ri ng ngha cua mot van e khoi viec cai at ; muc ch e ca hai bo phan (ng ngha va cai at) co the thay oi oc lap nhau.

    Composite

    To chc cac oi tng theo cau truc phan cap dang cay; Tat ca cac oi tng trong cau truc c thao tac theo mot cach thuan nhat nh nhau.

    Decorator

    (Decorateur)

    Gan them trach nhiem cho oi tng (m rong chc nang) vao luc chay (dynamically).

    Facade

    (Faade)

    Cung cap mot interface thuan nhat cho mot tap hp cac interface trong mot he thong con (subsystem).

    Flyweight

    (Poids mouche)

    S dung viec chia se e thao tac hieu qua tren mot so lng ln oi tng c nho (chang han paragraph, dong, cot, ky t...)

    Proxy

    (Procuration)

    ieu khien mot cach gian tiep viec truy xuat mot oi tng thong qua mot oi tng c uy nhiem.

  • CAC MAU VE NG X CUA LP hay OI TNG (1)

    Ten

    Muc ch

    Chain of Responsibility

    (Chane de responsabilites)

    Khac phuc viec ghep cap gia bo gi va bo nhan thong iep; Cac oi tng nhan thong iep c ket noi thanh mot chuoi va thong iep c chuyen doc theo chuoi nay en khi gap c oi tng x ly no.

    Command

    (Commande)

    Moi yeu cau (thc hien mot thao tac nao o) c bao boc thanh mot oi tng. Cac yeu cau se c lu tr va gi i nh cac oi tng.

    Interpreter

    (Interpreteur)

    Ho tr viec nh ngha bieu dien van pham va bo thong dch cho mot ngon ng.

    Iterator

    (Iterateur)

    Truy xuat cac phan t cua oi tng dang tap hp tuan t (list, array, ...) ma khong phu thuoc vao bieu dien ben trong cua cac phan t.

    Mediator

    (Mediateur)

    nh ngha mot oi tng e bao boc viec giao tiep gia mot so oi tng vi nhau.

    Memento

    Hieu chnh va tra lai nh cu trang thai ben trong cua oi tng ma van khong vi pham viec bao boc d lieu.

  • CAC MAU VE NG X CUA LP hay OI TNG (2)

    Ten

    Muc ch

    Observer

    (Observateur)

    nh ngha s phu thuoc mot-nhieu gia cac oi tng sao cho khi mot oi tng thay oi trang thai th tat ca cac oi tng phu thuoc no cung thay oi theo.

    State

    (Etat)

    Cho phep thay oi ng x cua oi tng tuy theo s thay oi trang thai ben trong cua no.

    Strategy

    (Strategie)

    Bao boc mot ho cac thuat toan bang cac lp oi tng e thuat toan co the thay oi oc lap oi vi chng trnh s dung thuat toan.

    Template method

    (Patron de methode)

    nh ngha phan khung cua mot thuat toan, tc la mot thuat toan tong quat goi en mot so phng thc cha c cai at trong lp c s; viec cai at cac phng thc c uy nhiem cho cac lp ke tha.

    Visitor

    (Visiteur)

    Cho phep nh ngha them phep toan mi tac ong len cac phan t cua mot cau truc oi tng ma khong can thay oi cac lp nh ngha cau truc o.

  • K tha, a hnh: c s cho mu GoF

  • Cc phng thc thch hp s c gi ty theo kiu ca i tng: HINH *p; p = new CHUNHAT; p->Input(); // phng thc Input ca CHUNHAT s c gi.Cc thao tc tng qut trn kiu HINH khng nn c cc ch th ph thuc cc lp k tha. void ThaoTac(HINH *p) { // ch s dng phng thc chung.If(p->Load()){p->Input();p->Draw();...}} ==> KHNG NN p kiu p, chng hn thnh TRON, ri gi cc phng thc ring ca lp TRON.

  • Vi mu GoF tiu biu v ng dngPhn ny s trnh by cc mu tiu biu sau y: Composite Bridge Template method Observer ngn gn, mt vi mc trong 13 mc ca cu trc m t mi mu s c b qua. Chng ta s quan tm nhiu n ngha, tnh hung cn dng v v d ng dng.

  • Mau CompositeTn: Composite, tm dch i tng a hp, thuc lp mu cu trc i tng. nh:T chc cc i tng theo cu trc phn cp dng cy; Tt c cc i tng trong cu trc c thao tc theo mt cch thun nht nh nhauMotivation: Cc ng dng ha thng lu tr cc i tng phc hp bao gm nhiu i tng n gin hn. V d nh trong hnh v sau:

  • Mu composite gii quyt vn ny bng cch t chc tch hp d liu qui nh sau:

  • Cu trc:

  • Lu tr mch in

  • Mau BridgeTn: Bridge, tm dch Cu ni, thuc lp mu cu trc i tng. nh:Tch ri ng ngha ca mt vn khi vic ci t; mc ch c hai b phn (ng ngha v ci t) c th thay i c lp nhau.Motivation: Gi s phi xy dng mt lp qun l h thng ca s ca cc h iu hnh khc nhau, chng hn cho 3 h: X Window trn Unix, IBMs Presentation Manager (PM), v MS Windows ca Microsoft. Cch lm t nhin l nh ngha mt lp c s Window v 3 lp khc Xwindow, PMwindow, MSwindow k tha t lp Window nh sau:

  • Gi s c cn thm lp qun l cc hp hi thoi Dialog - mt dng Window c bit. Nh vy lp Dialog s l c bit ha ca lp Window (k tha t lp Window). K n li l 3 lp hi thoi cho 3 h thng ca s khc nhau k tha t Dialog

  • Cch t chc ny bc l cc khuyt im nh sau:Bt tin khi m rng: b sung h thng ca s cho mt h iu hnh khc hay thm cc loi ca s khc (chng hn lp cc tool bar hay cc control...).Cc chng trnh s dng h thng lp ny s ph thuc h iu hnh. Tn cc lp ph thuc h iu hnh b ri khp trong cy k tha.

    Mau Bridge

  • tng ca mu bridge l tch bit hai phm tr: ngha ca cc ca s (Window, Dialog, ToolBar, ...) s ci t ph thuc cc h iu hnhthnh 2 cy k tha ring bit v ni nhaubng mt cuMau Bridge

  • Cu trc:

  • Mu Template methodTn: Template method, tm dch Phng thc khun, thuc lp mu v ng x ca lp nh: nh ngha phn khung (phn bt bin) ca mt thut ton, tc l mt thut ton tng qut gi n mt s phng thc (phn thay i ty vo ng cnh) cha c ci t trong lp c s. Vic ci t ca cc phng thc ny c y nhim cho cc lp k tha. Thut ton chy c cho cc lp k tha m cu trc ca thut ton vn khng thay i.

  • Cu trc

  • Mu Template methodC s ci t: da vo s a hnh cho cc phng thc c gi bn trong phng thc khun. Xem v d n gin vit bng C++ sau y

  • void Application::OpenDocument (const char* name){ if (!CanOpenDocument(name)) {// cannot handle this document return; } Document* doc = DoCreateDocument(); if (doc != NULL) {_docs->AddDocument(doc); AboutToOpenDocument(doc); doc->Open(); doc->DoRead(); } }Ch rng cc p. thc ny s c ci t li trong cc lp k tha. Chng hn nh trong lp MyApplication th p.thc DoCreateDocument tr v mt i tng kiu MyDocument. Nh vy, i tng doc c kiu l MyDocument v lnh gi doc->DoRead s gi phng thc DoRead ca lp MyDocument.

  • V d: Thut ton cy khungBc 1. Chon tuy y v X va khi tao V := { v }; T := Bc 2. Chon y X \ V sao cho co mot canh e nao o cua G noi y vi mot nh x trong VBc 3. Gan V := V{y} va T:=T{e}Bc 4. Neu T u n-1 phan t th dng, ngc lai lam tiep tuc bc 2.Bc 1. Chon tuy y v X va khi tao V := { v }; T := Bc 2. Chon canh e co trong so nho nhat noi nh xX vi nh y X \ V

    Bc 3. Gan V := V{y} va T:=T{e}Bc 4. Neu T u n-1 phan t th dng, ngc lai lam tiep tuc bc 2.PRIM AlgorithmSpanning Tree Algorithm

  • class ARC { // Some members... // ... }; class SpanningTree { int n; int nT; // Some other members... // ... void initialize(); void add_Vertex_to_V(int y); void add_Arc_to_T(ARC e); virtual int search_Arc(ARC& e, int& x, int& y); int SpanningTreeAlgorithm(); }; int SpanningTree::SpanningTreeAlgorithm() { initialize(); while(nT < n-1){ARC e;int x, y;if(!search_Arc(e, x, y)) return 0;add_Vertex_to_V(y);add_Arc_to_T(e); } return 1;}

    class PrimSpanningTree: public SpanningTree{ int search_Arc(ARC& e, int& x, int& y) {// to find the minimum arc..// ...return 1; };};

  • Mu AdapterMc ch: thay giao tip ca mt lp bi mt giao tip khc ph hp vi yu cu ngi s dng lp, nhm gii quyt bi ton tng thch.Cu trc ca mu Adapter: c 2 dngMultiple compositionObject composition

  • Adapter structure (Multiple inheritance)

  • Adapter structure (Object composition)

  • p dng: cc control ca MFC

    RhodesListBox( ) {

    p_Rubrique = new CListBox;

    }

    CListBox *p_ListBox=(CListBox *) p_Rubrique;

    int idx = p_ListBox(GetCurSel( );

    if (idx>=0 && idx< p_ListBox(GetCount( ))

    p_ListBox(GetText(idx, ElementCourantTexte);

    CWnd

    RhodesComoBox

    RhodesListCtrl

    RhodesListBox

    ChosirElementCourant( )

    AjouterElement( )

    SupprimerElement( )

    ViderContenu( )

    p_Rubrique

    1

    RhodesEditWidget

    ChosirElementCourant( )

    AjouterElement( )

    SupprimerElement( )

    ViderContenu( )

    RhodesListWidget

    RhodesTreeWidget

    ChosirElementCourant( )

    AjouterElement( )

    SupprimerElement( )

    ViderContenu( )

    RhodesWidget

    ChosirElementCourant( )

    AjouterElement( )

    SupprimerElement( )

    ViderContenu( )

  • Mu ObserverTn: Observer, tm dch Quan st vin, thuc lp mu v ng x ca i tng nh:nh ngha quan h ph thuc mt-nhiu gia cc i tng. Khi mt i tng thay i trng thi, tt c cc i tng ph thuc c thng bo v cp nht trng thi.Motivation: Trong cc phn mm c giao din ha vi ngi s dng, thng thng c nhiu biu din ha khc nhau cho cng mt l d liu, khi d liu thay i th tt c cc biu din ha phi c cp nht

  • Hnh v sau minh ha trng hp ca cc bng tnh in t (Excel, Lotus 1-2-3..):

  • Cu trc

  • Mu proxyMc ch: Truy xut mt i tng thng qua mt i tng c y nhim

  • Dng trong cc trng hpRemote objectExpensive cost of creation and initialization of the object To protect the original objectA smart referenceCount number of references to the real object: to free automaticallyLoading a persistent object into memory when it's first referencedChecking that the real object is locked

  • Code example (Proxy)class Graphic { public: }; class Image : public Graphic { public: Image(const char* file); // loads image from a file };class ImageProxy : public Graphic { public:...ImageProxy(const char* imageFile); Image* GetImage(); private: Image* _image; Point _extent; char* _fileName;};ImageProxy::ImageProxy (const char* fileName) { _fileName = strdup(fileName); _extent = Point::Zero; // don't know extent yet _image = 0;} Image* ImageProxy::GetImage() { if (_image == 0) { _image = new Image(_fileName); } return _image;}const Point& ImageProxy::GetExtent () { if (_extent == Point::Zero) { _extent = GetImage()->GetExtent(); } return _extent;}

  • Mu prototypeMuc ch: Qui nh loai cua cac oi tng can tao bang cach dung mot oi tng mau, tao mi nh vao sao chep oi tng mau nay.

  • Mu prototype: v d

  • Mau prototype: code exampleclass Staff : public Graphic { public: Staff(); Staff(const Staff&); virtual Staff* Clone(); ...}; Staff::Staff (const Staff& other) { // copying members...} Staff* Staff::Clone () { return new Staff(*this);}

    struct Mapping { char *ObjectType; Graphic* Object;};Mapping sampleobjects[]={ {Staff, new Staff()}, {WholeNote, new WholeNote()}, {HalfNote, new HalfNote()}};Graphic* sampleSearch(char* strType){ }Graphic* objCreate(char* strType){ Graphic* sObj=sampleSearch(strType); if(sObj!=NULL)return sObj->Clone(); else return NULL;}

  • Mu strategyMc ch: bao bc mt h cc thut ton bng cc lp i tng ng dng c th chn la thut ton khi cn

  • Mu strategy: v dSortTesting* qsortTest= new SortTesting(new QuickSort);// Data inputqsortTest->sortAlgorithm();

  • Mu stateMc ch: cho php thay i ng x ca i tng ty theo s thay i trng thi bn trong ca nMu ny rt ging vi mu strategy v mt hnh thc, tuy nhin khc v ngha

  • Mu state: v d

  • Cc tip cn tng tCc tip cn dng li theo kiu pattern:Design patterns [Gam95]GRASP pattern [Lar98]Analysis patterns [Fow97]Process patterns [Amb99]Cc kinh nghim phng php lun nh hng cho qu trnh thit kDesign heuristics [Rie96]GRASP: General Responsibility Assignment Software Patterns.

  • Cc tip cn tng tVic h tr dng li cho qu trnh pht trin phn mmFrameworksSoftware components

  • Design heuristicsKhi nim: Mi heuristic thit k l mt hng dn sc tch v mt phng php lun cho mt vn nh trong thit k phn mm.Ngun gc: T. gi Arthur J. Riel [Rie96] thu thp v h thng ha 61 heuristic lin quan n thit k phn mm hng i tng.M s ca cc heuristic sau y c ly theo ti liu gc ca tc gia

  • Vi heuristic chung v lp v i tngHeuristic 2.1: D liu ca lp nn c che du bn trong lp (Vic thao tc d liu ca lp nn thc hin gin tip qua cc phng thc)Heuristic 2.7: Mt lp ch nn dng cc phng thc, cc php ton trong phn giao tip Public ca lp khc.H qu: gim s coupling gia cc lp. Nh vy khng nn dng c ch friend nh ca C++ truy xut vo cc phn ci t bn trong lp khc.

  • Heuristic 2.5: Khng nn trnh by ci t chi tit ca cc phng thc khc nhau c on m ngun ging nhau trong giao tip Public ca lp

  • Heuristic 5.2: Cc lp k tha phi c tri thc v lp c s ca chng (do quan h k tha), nhng lp c s khng nn bit bt k iu g v lp k tha ca n. L do: V nu lp c s c cha tri thc v cc lp k tha th khi c thm lp k tha mi t lp c s , m ngun ca lp c s c kh nng b thay i.

  • Vi heuristic chungHeuristic 5.4 v 5.5: V mt l thuyt, s phn cp cc lp k tha cng mn (nhiu tng) cng tt. V mt thc hnh, s tng phn cp khng nn vt qu mt s trung bnh m mt ngi thng thng c th theo di tt cc lp trong cy k tha. Con s trung bnh ny khng nn vt qu 6 tng.Heuristic 5.8: Cc thuc tnh v phng thc chung cho nhiu lp nn tng cao nht c th c trong phn cp k tha.

  • Heuristic 5.9 v 5.10:Nu hai hay nhiu lp ch chia s chung phn d liu (khng c phng thc chung) th phn d liu chung nn l mt thuc tnh c kiu l mt lp mi bao bc phn d liu chung .Nu hai hay nhiu lp chia s chung d liu v cc phng thc th cc lp nn k tha t mt lp c s chung m bao gm d liu v cc phng thc .

  • Heuristic 5.12: Khng nn dng k thut kim tra kiu ca i tng. Trong hu ht cc trng hp, c th dng a hnh gii quyt vn

  • Heuristic 5.13:Trng hp cn kim tra gi tr thuc tnh ca i tng ca lp thc hin cc ng x hon ton khc nhau th lp nn phn r thnh nhiu lp, mi gi tr ca thuc tnh s l mt lp k tha t lp c s.Heuristic 5.14: Khng chuyn cc i tng ca mt lp thnh cc lp k tha, phi cn thn bi v nhiu khi lp k tha ch l mt th hin (mt i tng) ca lp c s.