Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte...

37
Ingineria Programării Curs 9 Curs 9 Ovidiu Gheorghieş, [email protected] Adriana Gheorghieş, [email protected] De s ig n P a t t e r n s Mo d e l e d e p ro i e c ta re

Transcript of Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte...

Page 1: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

Ingineria Programării

Curs 9Curs 9

Ovidiu Gheorghieş, [email protected] Gheorghieş, [email protected]

Design Patterns

Modele de proiectare

Page 2: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Bibliografie

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.Design Patterns. Elements of Reusable Object-Oriented Software.Addison-Wesley, 1995

Pe scurt GOF = Gang of Four

În română:

Şabloane de proiectare. Elemente de software reutilizabil orientat pe obiecte

Editura Teora, 2002

Page 3: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9

“Design patterns capture solutions that have developed and evolved over time”

GOF

Page 4: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Modele de proiectare - clasificare

• modele structurale: se preocupă de modul în care clasele şi obiectele sunt compuse pentru a forma structuri mai mari

(adapter, bridge, composite, decorator, façade, flyweight, proxy)

• modele comportamentale: se preocupă de algoritmi şi de asignarea responsabilităŃilor între obiecte

(chain of responsibility, command, interpreter, iterator, mediator, memento, observer, state, strategy, template method, visitor)

• modele creaŃionale: abstractizează procesul de instanŃiere

(abstract factory, builder, factory method, prototype, singleton)

Page 5: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 În cursul 7

• Singleton: garantează existenŃa unei singure instanŃe a unei clase. Se asigură o modalitate de a accesa instanŃa respectivă.

• Factory Method: defineşte o interfaŃă pentru crearea unui obiect, dar lasă în sarcina subclaselor alegerea tipului acestuia.

• Strategy: defineşte o familie de algoritmi

• Decorator: asignare de responsabilităŃi în mod dinamic

• Composite: obiecte şi grupuri tratate uniform

• Iterator: oferă o modalitate de a accesa obiecte agregate în mod secvenŃial fără a cunoaşte modul de agregare

• Template Method: se defineşte scheletul unui algoritm într-o metodă, lăsând implementarea paşilor algoritmului în seama subclaselor

Page 6: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 În cursul 8

• Abstract Factory: oferă o interfaŃă pentru crearea unei familii de obiecte corelate, fără a specifica explicit clasele acestora.

• Builder: separă construirea unui obiect complex de reprezentarea sa, astfel ca procesul de construire să poată crea diferite reprezentări.

• Proxy: oferă un înlocuitor pentru un obiect, prin care se controlează accesul la acel obiect

• Adapter: converteşte interfaŃa unei clase la interfaŃa pe care clienŃii acesteia o aşteaptă

• Bridge: decuplează o abstracŃiune de implementarea sa astfel încât cele două să poată varia independent

• Mediator: defineşte un obiect care încapsulează modul de interacŃiune al unui set de obiecte; promovează cuplarea slabă

• Observer: defineşte o dependenŃă de tip 1-la-n între obiecte, astfel ca atunci când un obiect se modifică, cele care depind de el sunt notificate şi actualizate automat

• Chain of Responsibility: evită cuplarea emiŃătorului unei cereri de receptorul acesteia dând posibilitatea mai multor obiecte să trateze cererea

Page 7: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 În acest curs

• Memento: captarea şi externalizarea stării interne a unui obiect fără a viola încapsularea datelor

• Command: încapsulează o cerere sub forma unui obiect

• Prototype: specifică ce obiecte trebuie create folosind o instanŃă pe post de prototip

• State: permite unui obiect să îşi schimbe comportamentul atunci când starea sa se modifică

• Visitor: reprezintă o operaŃie ce se efectuează asupra structurii obiectului

• Flyweight: folosirea partajării pentru gestionarea unui număr mare de obiecte

• Façade: oferă o interfaŃă unificată pentru un set de interfeŃe dintr-un sistem

Page 8: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Memento

• Scop: Fără violarea încapsulării, captarea şi externalizarea stării interne a unui obiect astfel ca obiectul să îşi poată reface starea mai târziu.

• MotivaŃie: refacere• Aplicabilitate

– Un instantaneu al unei (sub)stări ale unui obiect trebuie luat pentru a fi restaurat şi

– O interfaŃă directă pentru obŃinerea stării ar expune detalii de implementare şi ar compromite încapsularea

Page 9: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Memento (2)

Structura

Page 10: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Memento (3)

Page 11: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Memento (java)

//This class state will be stored.public class Originator {

private int number; private File file = null;

public Originator(){ } // create a Memento

public Memento getMemento(){ return new Memento(this);

} // restore the state of the originator

public void setMemento(Memento m){number = m.number; file = m.file;

}

Page 12: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Memento (java)

//state that can be used for read/write from/to disk

private class Memento implements java.io.Serializable {

private int number;

private File file = null;

// private constructor - only the originator can create a Memento

private Memento( Originator o){

number = o.number;

file = o.file;

}

}

}//Originator

Page 13: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Memento

• ConsecinŃe– Păstrează graniŃele încapsulării– Simplifică obiectul Originator– Folosirea memento-urilor poate fi costisitoare şi

poate induce costuri ascunse

Page 14: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command / Comandă

• Scop:

– încapsulează o cerere sub forma unui obiect;– permite parametrizarea clienŃilor cu cereri diferite;– permite memorarea cererilor într-o coadă; – suportă operaŃii reversibile (undoable operations)

Page 15: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (2)

• MotivaŃie: asignarea de funcŃionalităŃi opŃiunilor dintr-un meniuApplication

+add(d:Document)

Menu

+add(mi:MenuItem)

Document

+open()+close()

+cut()+copy()

MenuItem

+onClick()

Command

+execute()

command

onClick(){ command->execute(); }

PasteCommand

+execute()

OpenCommand

+execute()

document

execute(){ document->paste();}

execute(){ name = askUser(); doc = new Document(name); appliation->add(doc); doc->open();}

Page 16: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (3)

• MotivaŃie: definirea macrourilor = secvenŃă de comenzi

Command

+execute()

MacroCommand

+execute()

commands

execute(){

for all c in commandsc->execute();

}

Page 17: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (4)

• StructuraClient Invoker

Receiver

Command

+Execute()

ConcreteCommand

+state

+Execute()

receiver

«instantiates»

Execute () {receiver.Action(); }

Page 18: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (5)

Page 19: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (java)

public interface Command {

public abstract void execute ( );

}

// Receiver class.

class StockTrade {

public void buy() {

System.out.println("You want to buy stocks");

}

public void sell() {

System.out.println("You want to sell stocks ");

}

}

Page 20: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (java)

// Invoker. class Invoker {

private Command buyCommand, sellCommand;

public Invoker( Command bc, Command sc) { buyCommand=bc; sellCommand=sc;

}

void buy( ) { buyCommand. execute( ) ;

}

void sell( ) { sellCommand . execute( );

} }

Page 21: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (java)

//ConcreteCommand Class. class BuyStockCommand implements Command {

private StockTrade stock; public BuyStockCommand ( StockTrade st) {

stock = st; } public void execute( ) {

stock . buy( ); }

}

//ConcreteCommand Class. class SellStockCommand implements Command { private StockTrade stock;

public SellStockCommand ( StockTrade st) { stock = st;

} public void execute( ) {

stock . sell( ); }

}

Page 22: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (java)

// Client public class Client {

public static void main(String[] args) { StockTrade stock=new StockTrade();BuyStockCommand bsc =

new BuyStockCommand(stock);SellStockCommand ssc =

new SellStockCommand(stock);

Invoker testInvoker = new Invoker( bsc,ssc);

testInvoker.buy(); // Buy Shares testInvoker.sell(); // Sell Shares

} }

Page 23: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Command (5)

• Aplicabilitate– Parametrizarea obiectelor în funcŃie de acŃiunea

care trebuie să o facă;– Specificarea, adăugarea într-o coadă şi

executarea cererilor la momente diferite;– Suportă operaraŃii reversibile (metoda Execute

poate memora starea şi permite apoi revenirea la această stare);

– Structurează sistemul în operaŃii de nivel înalt care sunt construite pe baza unor operaŃii primitive (ex. tranzacŃii).

Page 24: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Prototype / Prototip

• Scop. Specifică ce obiecte trebuie create folosind o instanŃă pe post de prototip. Noile obiecte sunt create prin copierea acestui prototip.

• MotivaŃie: aplicaŃie grafică/drag-n-drop(pe tablă)• Aplicabilitate

– Sistem independent de cum sunt create produsele şi– Una dintre următoarele

• Clasele de instanŃiat sunt specificate în momentul rulării• Se doreşte evitarea creării unei ierarhii de fabrici• Este mai convenabil să copiez o instanŃă existentă decât să

creez una nouă.

Page 25: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Prototype / Prototip (2)

• Structura

Client

+Operation()

Prototype

+Clone()

ConcretePrototype1

+Clone()

ConcretePrototype2

+Clone()p =prototype->Clone()

Page 26: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 State / Stare

• Scop: Permite unui obiect să îşi schimbe comportamentul atunci când starea sa se modifică.

• MotivaŃie

TCPConnection

+Open()+Close()

+Acknowledge()

TCPState

+Open()+Close()

+Acknowledge()

TCPEstablished TCPListen TCPClosedstate->Open()

Page 27: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 State / Stare (2)

• Aplicabilitate– Comportamentul unui obiect depinde de stare.

Schimbarea comportamentului trebuie să fie făcută în timpul rulării.

– Se doreşte evitarea existenŃei unei structuri decizionale identice în fiecare metodă.

• StructurăContext

+Request()

State

+Handle()

ConcreteStateA ConcreteStateBstate->Handle()

Page 28: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Visitor / Hoinar

• Scop: Reprezintă o operaŃie ce se efectuează asupra structurii obiectului. Permite definirea de noi operaŃii fără a schimba clasele elementelor asupra cărora se lucrează.

• MotivaŃie

Node

+TypeCheck()+GenerateCode()

+Write()

VariableReferenceNode AssignementNode OperationNode

cod amestecat

Page 29: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Visitor / Hoinar (2)

• MotivaŃie (2) Visitor

TypeCheckingVisitor

CodeGeneratingVisitor

+VisitAssignmentNode(n:AssignmentNode)+VisitVariableReferenceNode(n:VariableReferenceNode)

+VisitOperationNode(n:OperationNode)

WritingVisitor

ProgramNode

+AcceptVisitor(v:Visitor)

AssignmentNode

+AcceptVisitor(v:Visitor)

VariableReferenceNode

+AcceptVisitor(v:Visitor)

v->VisitAssignementNode(this v->VisirReferenceNode(this)

Page 30: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Visitor / Hoinar (3)

• StructuraClient

Visitor

+VisitConcreteElementA(c:ConcreteElementA)+VisitConcreteElementB(c:ConcreteElementB)

ConcreteVisitor1 ConcreteVisitor2

ObjectStructureElement

+AcceptVisitor(v:Visitor)

ConcreteElementA

+AcceptVisitor(v::Visitor)

ConcreteElementB

+AcceptVisitor(v:Visitor)

v->VisitConcreteElementA(this) v->VisitConcreteElementB(this)

Page 31: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Flyweight / Muscă

• Scop– Folosirea partajării pentru gestionarea unui număr mare de

obiecte cu granulaŃie mică.

• MotivaŃie

Stare

StareIntrinseca StareExtrinseca

Page 32: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Flyweight / Muscă (2)

• Aplicabilitate (îndeplinirea simultană a condiŃiilor)– AplicaŃia foloseşte un număr mare de obiecte.– SpaŃiul necesar stocării este foarte mare din cauza

numărului mare de instanŃe– Cea mai mare parte a stării unui obiect poate fi făcută

extrinsecă– Multe grupe de obiecte pot fi înlocuite cu relativ puŃine

obiecte partajate– AplicaŃia nu depinde de identitatea obiectelor

Page 33: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Flyweight / Muscă (3)

• Structura

FlyweightFactory

+GetFlyweight(key)

Client

Flyweight

+Operation(es:ExtrinsicState)

ConcreteFlyweight

-is: intrinsicState

ConcreteUnsharedFlyweigt

-as: allState

if (flyweight[key] exists) { return existing flyweight}else { create new fyweight add it to pool return the new flyweight}

Page 34: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Façade: The loser learns it all…

bookbook

bookbook

bookbook

bookbook

rezumatsimplificare

Page 35: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Façade / FaŃadă

• Scop: oferă o interfaŃă unificată pentru un set de interfeŃe dintr-un sistem.

• MotivaŃie: – subsisteme = reducerea complexităŃii– Minimizarea comnunicaŃiei dintre subsisteme

Page 36: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9 Facade / FaŃadă (2)

• Aplicabilitate– Se doreşte utilizarea unei interfeŃe simplificate la

un sistem complicat– Există multe dependenŃe între clienŃi şi

implemetările concrete ale conceptelor– Se doreşte stratificarea sistemului

Page 37: Curs 9 - profs.info.uaic.roogh/files/ip/curs-09.pdf · • Template Method: se define şte scheletul unui algoritm ... file = m.file; } IP 9 Memento (java) //state that can be used

IP9

• StructuraFacade

Facade / FaŃadă (3)