SlideShare a Scribd company logo
1 of 120
Download to read offline
Ingineria programării
10. Șabloane de proiectare
comportamentale (II)
Florin Leon
Universitatea Tehnică „Gheorghe Asachi” din Iași
Facultatea de Automatică și Calculatoare
http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
3
Terminologie
 Strategy = Strategie
 Template Method = Metoda tipar
 State = Stare
 Interpreter = Interpretor
 Visitor = Vizitator
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Notă
 Programele care implementează șabloanele
descrise și care pot fi descărcate din pagina
cursului sunt parte integrantă a prezentării
4
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
6
SimUDuck
Extensii…
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
7
Extensii...
?
Alte clase…
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8
Extensii...
Cod duplicat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
9
Separarea aspectelor constante
de aspectele variabile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
10
Încapsularea
comportamentelor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
11
Încapsularea
comportamentelor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
12
Stabilirea strategiei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
13
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
14
Definiție
 Șablonul Strategie definește o familie de
algoritmi, încapsulează fiecare algoritm și îi
face interschimbabili. Acest șablon permite
algoritmului să varieze independent de clienții
care îl utilizează
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
15
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
16
Exemple
 Structură...
 Rățuștele...
 Sortări...
 Grafice...
 Personaje de joc...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Structură
17
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Sortări
18
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Grafice
19
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Personaje de joc
20
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
21
Aplicabilitate
 Când mai multe clase înrudite diferă doar prin
modul lor de comportare
 Când este nevoie de variante diferite ale unui
algoritm
 Când un algoritm utilizează date ce nu trebuie
cunoscute de către clienți
 Când o clasă definește mai multe comportamente
iar acestea apar în operațiile ei sub formă de
instrucțiuni condiționale multiple
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
22
Avantaje și dezavantaje
 Definește familii de algoritmi înrudiți
 Este o alternativă la generarea de subclase
 Elimină instrucțiunile condiționale
 Poate furniza implementări diferite pentru același
comportament
 Număr crescut de obiecte
 Unele clase ConcreteStrategy mai simple pot să nu
utilizeze toate informațiile interfeței
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
24
Cafea și ceai
Rețetele sunt similare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
25
Clasele corespunzătoare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
26
Abstractizarea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Implementare
27
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
28
Definiție
 Șablonul Metoda tipar definește scheletul
unui algoritm dintr-o operație, transferând unii
pași către subclase. Șablonul permite
subclaselor să redefinească anumiți pași
dintr-un algoritm fără a schimba structura
acestuia
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
29
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
30
Exemple
 Structură...
 Ceaiul și cafeaua...
 Datele clienților...
 Sortările temperaturilor...
 Triunghiurile...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
31
Ceaiul și cafeaua
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Datele clienților
32
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Triunghiuri
33
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
34
Metode ancoră
 engl. “hooks”
 Pot fi suprascrise
opțional de clasele
derivate
ancoră
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
35
Exemplu de ancoră
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
36
Suprascrierea ancorei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
37
Principiul Hollywood
 „Nu ne suna tu, te sunăm noi”
 Componentele de nivel scăzut se pot ancora
în sistem, dar componentele de nivel înalt
determină când vor fi folosite acestea și cum
 Componentele de nivel înalt apelează
componentele de nivel scăzut și nu invers
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
38
Sortare cu Metoda tipar
Metoda care trebuie
implementată pentru
completarea tiparului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Sortare cu Metoda tipar
39
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
40
Applet-uri
 Metode ancoră:
 init
 start
 stop
 destroy
 paint
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
41
Aplicabilitate
 Când un algoritm este compus din părți invariabile,
care sunt tratate o singură dată, și părți variabile,
implementate de subclase
 Când comportarea comună a mai multor subclase
poate fi extrasă și localizată pentru evitarea
duplicării codului
 Când sunt necesare operații ancoră (engl. “hooks”)
 Pentru construirea platformelor (engl. “frameworks”)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
42
Avantaje
 Reprezintă o tehnică fundamentală pentru
reutilizarea codului
 Structura de control respectă Principiul
Hollywood: clasa părinte apelează operațiile
unei subclase și nu invers
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
43
Discuție
 Metoda tipar utilizează moștenirea pentru a varia părți ale unui
algoritm. Strategia utilizează compunerea pentru a varia întregul
algoritm
 Constructorul (engl. “Builder”) construiește un obiect în mai mulți
pași. Metoda tipar execută un algoritm compus din mai mulți pași
 Ca și Metoda fabrică, Metoda tipar lasă subclasele să decidă
asupra unor implementări
 Ancorele sunt prezente în sistemul de operare Windows
(de exemplu funcția WndProc)
 Metodele abstracte sunt obligatorii pentru clasele derivate,
metodele ancoră sunt opționale
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
45
Gumball Machine
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
46
Abordarea 1
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
47
Abordarea 1
 Număr foarte mare de instrucțiuni condiționale
 Pentru s stări și n acțiuni, trebuie n metode,
fiecare cu s teste
 Aici trebuie 4 metode, fiecare cu 4 teste
 Când se adaugă noi stări, trebuie modificate
aceste teste
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
48
Abordarea 2
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
49
Exemplu: clasă de stări
 Clasa NoQuarterState
schimbarea stării
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
50
Tranziții de stare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
51
Tranziții de stare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
52
Definiție
 Șablonul Stare permite unui obiect să-și
modifice comportamentul când starea sa
internă se schimbă. Obiectul va părea că își
schimbă clasa
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
53
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
54
Exemple
 Structură...
 Gumball Machine...
 Conturi...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Structură
55
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Gumball Machine
56
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Conturi
57
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
58
Aplicabilitate
 Când comportamentul unui obiect depinde de
starea sa
 Când operațiile presupun multiple instrucțiuni
condiționale, care depind de starea obiectului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
59
Avantaje și dezavantaje
 Localizează comportarea specifică de stare și
partiționează comportarea pentru diferite stări
 Face tranzițiile de stare explicite
 Obiectele Stare pot fi partajate, dacă nu au câmpuri
 Pot exista mai multe Contexte care partajează Stările
 Se face un compromis: creșterea flexibilității pe baza
creșterii numărului de clase
 Alternativa: cod monolitic cu numeroase if-uri, greu de
înțeles și modificat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
60
Discuție
 Dacă tranzițiile se fac în clasele de stări, se
creează dependențe între acestea
 Tranzițiile fixe se recomandă să fie efectuate în
Context
 Tranzițiile dinamice se pot face în Stările Concrete
 Pentru aceasta, trebuie să existe metode de acces în
Context pentru schimbarea stării curente
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
61
Discuție
 Strategia și Starea au diagrame asemănătoare
 Strategia este o alternativă la moștenire. Starea
este o alternativă la instrucțiunile condiționale
 Strategiile sunt de obicei specificate de la început
(chiar dacă se pot schimba ușor). Stările se schimbă
dinamic prin însăși motivația șablonului
 Obiectele Stare pot fi obiecte de tip Categoria
muscă (engl. “Flyweight”) sau obiecte Singleton
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
63
Exemplu
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
64
Soluție
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
65
Definiție
 Șablonul Interpretor definește o
reprezentare a gramaticii unui limbaj
împreună cu un interpretor care utilizează
reprezentarea pentru a interpreta propozițiile
din limbaj
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
66
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
67
Exemple
 Structură...
 Cifre romane...
 Rapoarte...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Structură
68
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Cifre romane
69
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Rapoarte
70
Multe clase!
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Rapoarte
71
Reprezentare mai concisă
(doar numele claselor și
relațiile dintre ele)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
72
Aplicabilitate
 Când trebuie interpretat un limbaj iar
instrucțiunile sale pot fi reprezentate sub
formă de arbori sintactici abstracți, mai ales:
 Când gramatica este simplă
 Altfel se pot utiliza generatoare de parsere
(de exemplu Lex, Yacc++, Visual BNF etc.)
 Când eficiența nu este un factor critic
 Expresiile regulate sunt de obicei transformate în stări
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
73
Aplicații în lumea reală
 Parsarea comenzilor utilizatorului
 Programe precum Mathematica, Maple (calcul
simbolic) sau Origin (desenare de grafuri)
 Generatoare de rapoarte: întrucât interfața cu
utilizatorul este de obicei mai simplă decât
limbajul SQL, se pot defini limbaje de interogare
mai simple, interpretate și traduse apoi în SQL
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
74
Avantaje și dezavantaje
 Modificarea și extinderea gramaticii sunt ușor de realizat
 Se poate folosi și moștenirea pentru extindere
 Implementarea unei gramatici simple este ușor de făcut
 Generarea claselor poate fi automatizată
 Gramaticile complexe sunt greu de întreținut
 Interpretorul necesită câte o clasă pentru fiecare regulă
gramaticală
 Adăugarea unei căi noi de interpretare a expresiilor este
dificilă
 De exemplu verificarea tipurilor într-o expresie prin definirea unei
noi operații asupra claselor expresiei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
75
Discuție
 Arborele sintactic abstract este o Compunere
(engl. “Composite”)
 Categoria muscă (engl. “Flyweight”) poate ajuta
la partajarea simbolurilor terminale din arbore
 Interpretorul poate folosi un Iterator pentru a
traversa structura
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
77
Definiție
 Șablonul Vizitator reprezintă o operație care
va fi efectuată pe elementele unei structuri de
obiecte, permițând definirea unei operații noi
fără a schimba clasele elementelor pe care
operează
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: clasele Element
78
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: clasele Visitor
79
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemplu: structura de obiecte
și clientul
80
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Diagrama UML
81Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
82
Exemple
 Structură...
 Angajați...
 Zile libere...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Structură
83
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Angajați
84
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Zile libere
85
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
86
Aplicabilitate
 Când o structură de obiecte conține multe clase cu interfețe
diferite
 Când pe obiectele dintr-o structură trebuie efectuate mai
multe operații neînrudite
 Nu se „poluează” clasele cu aceste operații
 Când se definesc des noi operații pe structură, dar clasele
structurii nu se modifică des
 Dacă o clasă nu are metoda Accept, se poate deriva pentru a
o adăuga
 Șablonul este util când nu se pot modifica sursele unor biblioteci
sau platforme pentru adăugarea unor noi funcții
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
87
Avantaje
 Facilitează adăugarea de operații noi
 Grupează operațiile înrudite și le separă pe cele neînrudite
 Vizitatorul poate vizita obiecte care nu au o clasă părinte
comună, spre deosebire de Iterator
 Se pot apela metode diferite în Vizitator în funcție de tipul
obiectului vizitat
 Alternativa ar fi testarea tipului obiectului
 Poate acumula starea pe măsură ce vizitează obiectele
 Pot exista mai mulți vizitatori într-un sistem
 Apelul bidirecțional Accept – Visit permite adăugarea mai
multor operații la vizitare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
88
Dezavantaje
 Adăugarea de noi clase ConcreteElement este dificilă
 Șablonul nu este recomandat în timpul dezvoltării unui sistem,
când numărul de clase crește sau clasele se modifică mult
 Poate reduce încapsularea, obligând obiectele vizitate
să-și expună starea internă
 Vizitatorul nu poate accesa câmpurile private, deci trebuie să
existe metode publice de acces în obiectele vizitate
 Anti-șablonul de proiectare Anemic domain model: logica
programului este implementată în afara obiectelor din
domeniu
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
89
Discuție
 Vizitatorul poate fi utilizat la aplicarea unei operații
pe o structură Compusă (engl. “Composite”)
 Pentru vizitarea fiecărui element al unei colecții
se poate folosi Iteratorul acesteia
 Vizitatorul poate fi utilizat pentru a păstra
într-o singură clasă comportarea fiecărui nod
din arborele sintactic al unui Interpretor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
91
Concluzii (ȘPC II)
 Strategia definește o familie de algoritmi, încapsulează fiecare
algoritm și îi face interschimbabili
 Metoda tipar definește scheletul unui algoritm dintr-o operație,
transferând unii pași către subclase
 Starea permite unui obiect să-și modifice comportamentul când
starea sa internă se schimbă
 Interpretorul definește o reprezentare a gramaticii unui limbaj
împreună cu un interpretor care utilizează reprezentarea pentru a
interpreta propozițiile din limbaj
 Vizitatorul reprezintă o operație care va fi efectuată pe
elementele unei structuri de obiecte, permițând definirea unei
operații noi fără a schimba clasele elementelor pe care operează
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
92
Șabloanele de proiectare (I)
 Cunoașterea fundamentelor programării orientate pe obiecte
nu implică automat abilități de proiectare orientată pe obiecte
 Proiectele orientate pe obiecte de succes sunt ușor de
reutilizat, extins și întreținut
 Șabloanele de proiectare recomandă o serie de modalități de
a proiecta astfel de sisteme
 Șabloanele sunt la un nivel mai înalt de abstractizare decât
bibliotecile de funcții
 Șabloanele nu au fost inventate, au fost descoperite
rezolvând probleme reale
 Reflectă experiența unor proiectanți
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
93
Șabloanele de proiectare (II)
 Când sunt folosite corect, șabloanele de proiectare
pot face un sistem mai flexibil și mai ușor de
întreținut
 Când sunt folosite fără a fi nevoie, ele cresc inutil
complexitatea sistemului
 Cunoașterea șabloanelor de proiectare are
avantajul folosirii unui vocabular comun, ceea ce
permite exprimarea mai succintă a ideilor de
proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
comportamentale (II)
1. Strategia
2. Metoda tipar
3. Starea
4. Interpretorul
5. Vizitatorul
6. Concluzii
7. Recapitularea șabloanelor de proiectare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
95
Recapitulare
 Șabloane creaționale
1. Metoda fabrică
2. Fabrica abstractă
3. Singleton
4. Prototipul
5. Constructorul
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
96
Metoda fabrică
 Șablonul Metoda
fabrică definește o
interfață pentru crearea
unui obiect, dar lasă
subclasele să decidă ce
clasă să instanțieze.
Șablonul permite unei
clase să cedeze
subclaselor instanțierea
de obiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
97
Fabrica abstractă
 Șablonul Fabrica
abstractă asigură o
interfață pentru crearea
unor familii de obiecte
înrudite sau
dependente fără a le
specifica clasele
concrete
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
98
Singleton
 Șablonul Singleton
asigură faptul că o
clasă are o singură
instanță și oferă un
punct global de acces
la aceasta
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
99
Prototip
 Șablonul Prototip
precizează, folosind o
instanță prototip, tipurile
de obiecte ce vor fi
create și creează noile
obiecte copiind acest
prototip
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
100
Constructor
 Șablonul Constructor
separă construcția unui
obiect complex de
reprezentarea acestuia,
astfel încât același
proces de construcție
să poată crea
reprezentări diferite
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
101
Recapitulare
 Șabloane structurale
1. Adaptorul
2. Fațada
3. Decoratorul
4. Puntea
5. Proxy
6. Categoria muscă
7. Compunerea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
102
Adaptorul
 Șablonul Adaptor
convertește interfața
unei clase în altă
interfață pe care o
așteaptă clientul.
Adaptorul permite să
funcționeze împreună
clase care altfel nu ar
putea din cauza
interfețelor
incompatibile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
103
Fațada
 Șablonul Fațadă
asigură o interfață
unificată la o mulțime
de interfețe dintr-un
subsistem. Fațada
definește o interfață de
nivel mai înalt care face
subsistemul mai ușor
de utilizat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
104
Decoratorul
 Șablonul Decorator
atașează
responsabilități
suplimentare unui
obiect în mod dinamic.
Decoratorii asigură o
alternativă flexibilă la
derivare pentru
extinderea
funcționalității
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
105
Puntea
 Șablonul Punte
decuplează o
abstracțiune de
implementarea ei,
astfel încât cele două
să poată varia în mod
independent
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
106
Proxy
 Șablonul Proxy asigură
un surogat sau un
înlocuitor pentru alt
obiect pentru a controla
accesul la acesta
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
107
Categoria muscă
 Șablonul Categoria
muscă folosește
partajarea pentru a
gestiona eficient un
număr mare de obiecte
de dimensiuni mici
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
108
Compunerea
 Șablonul Compunere
compune obiecte în
structuri de tip arbore
pentru a reprezenta
ierarhii parte-întreg.
Șablonul permite
clienților să trateze
uniform obiecte
individuale și
compuneri de obiecte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
109
Recapitulare
 Șabloane comportamentale
1. Iteratorul
2. Observatorul
3. Comanda
4. Lanțul responsabilităților
5. Mediatorul
6. Memento
7. Strategia
8. Metoda tipar
9. Starea
10. Interpretorul
11. Vizitatorul
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
110
Iteratorul
 Șablonul Iterator
asigură o cale de
accesare secvențială a
elementelor unui obiect
agregat, fără a expune
reprezentarea lui de
bază
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
111
Observatorul
 Șablonul Observator
definește o dependență
1 la N între obiecte,
astfel încât în cazul în
care un obiect își
schimbă starea, vor fi
înștiințate și actualizate
automat toate obiectele
sale dependente
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
112
Comanda
 Șablonul Comandă
încapsulează o cerere
ca obiect, permițând
parametrizarea
clienților cu diferite
cereri, formarea unei
cozi de cereri sau
stocarea istoricului
acestora și asigurarea
suportului pentru
anularea operațiilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
113
Lanțul responsabilităților
 Șablonul Lanțul
responsabilităților evită
cuplarea între expeditorul și
destinatarul unei cereri,
acordând mai multor
obiecte o șansă de a
rezolva cererea. Șablonul
înlănțuie obiectele
destinatar și trece cererea
de-a lungul lanțului până
când un obiect o rezolvă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
114
Mediatorul
 Șablonul Mediator definește
un obiect care încapsulează
modul în care
interacționează o mulțime
de obiecte. Acest șablon
promovează cuplarea
slabă, interzicând obiectelor
să facă referințe explicite
unul la celălalt și permite
modificarea independentă a
interacțiunilor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
115
Memento
 Șablonul Memento
capturează și
exteriorizează starea
internă a unui obiect
fără a viola
încapsularea, astfel
încât obiectul să poată
fi readus ulterior la
respectiva stare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
116
Strategia
 Șablonul Strategie
definește o familie de
algoritmi, încapsulează
fiecare algoritm și îi
face interschimbabili.
Acest șablon permite
algoritmului să varieze
independent de clienții
care îl utilizează
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
117
Metoda tipar
 Șablonul Metoda tipar
definește scheletul unui
algoritm dintr-o
operație, transferând
unii pași către
subclase. Șablonul
permite subclaselor să
redefinească anumiți
pași dintr-un algoritm
fără a schimba
structura acestuia
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
118
Starea
 Șablonul Stare
permite unui obiect
să-și modifice
comportamentul când
starea sa internă se
schimbă. Obiectul va
părea că își schimbă
clasa
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
119
Interpretorul
 Șablonul Interpretor
definește o reprezentare
a gramaticii unui limbaj
împreună cu un
interpretor care utilizează
reprezentarea pentru a
interpreta propozițiile din
limbaj
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
120
Vizitatorul
 Șablonul Vizitator
reprezintă o operație
care va fi efectuată pe
elementele unei
structuri de obiecte,
permițând definirea
unei operații noi fără a
schimba clasele
elementelor pe care
operează
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

More Related Content

Similar to Sabloane de proiectare comportamentale (II)

Similar to Sabloane de proiectare comportamentale (II) (18)

Faza de proiectare
Faza de proiectareFaza de proiectare
Faza de proiectare
 
Faza de analiza
Faza de analizaFaza de analiza
Faza de analiza
 
Introducere in ingineria programarii
Introducere in ingineria programariiIntroducere in ingineria programarii
Introducere in ingineria programarii
 
Curs multimedia
Curs multimediaCurs multimedia
Curs multimedia
 
Aspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltareAspecte conexe procesului de dezvoltare
Aspecte conexe procesului de dezvoltare
 
Faza de testare (I)
Faza de testare (I)Faza de testare (I)
Faza de testare (I)
 
Extreme programming(xp)
Extreme programming(xp)Extreme programming(xp)
Extreme programming(xp)
 
Cap 7 red
Cap 7 redCap 7 red
Cap 7 red
 
Music Finder
Music FinderMusic Finder
Music Finder
 
baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.baze c++sructura unui program declarare variabilepdf.
baze c++sructura unui program declarare variabilepdf.
 
Computer comunicare-david-ogilvy
Computer comunicare-david-ogilvyComputer comunicare-david-ogilvy
Computer comunicare-david-ogilvy
 
Modulul v mtcp i
Modulul v   mtcp iModulul v   mtcp i
Modulul v mtcp i
 
Curs1-POO-Loga
Curs1-POO-LogaCurs1-POO-Loga
Curs1-POO-Loga
 
Introducere in symfony2
Introducere in symfony2Introducere in symfony2
Introducere in symfony2
 
Simatic step 7 v5 prog
Simatic step 7 v5 progSimatic step 7 v5 prog
Simatic step 7 v5 prog
 
Simatic step 7 v5
Simatic step 7 v5Simatic step 7 v5
Simatic step 7 v5
 
Curs2 poo 2016
Curs2 poo 2016Curs2 poo 2016
Curs2 poo 2016
 
Graduation projects in Crispico
Graduation projects in CrispicoGraduation projects in Crispico
Graduation projects in Crispico
 

More from Florin Leon

More from Florin Leon (17)

Modele bazate pe energie
Modele bazate pe energieModele bazate pe energie
Modele bazate pe energie
 
Retele neuronale profunde
Retele neuronale profundeRetele neuronale profunde
Retele neuronale profunde
 
Regresia liniara, logistica, softmax
Regresia liniara, logistica, softmaxRegresia liniara, logistica, softmax
Regresia liniara, logistica, softmax
 
Clasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilorClasificarea bazata pe ansambluri. Selectia trasaturilor
Clasificarea bazata pe ansambluri. Selectia trasaturilor
 
Algoritmi de clasificare
Algoritmi de clasificareAlgoritmi de clasificare
Algoritmi de clasificare
 
Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)Algoritmi de grupare (clustering)
Algoritmi de grupare (clustering)
 
Teoria jocurilor (II)
Teoria jocurilor (II)Teoria jocurilor (II)
Teoria jocurilor (II)
 
Teoria jocurilor (I)
Teoria jocurilor (I)Teoria jocurilor (I)
Teoria jocurilor (I)
 
Arhitecturi de agenti (II)
Arhitecturi de agenti (II)Arhitecturi de agenti (II)
Arhitecturi de agenti (II)
 
Arhitecturi de agenti (I)
Arhitecturi de agenti (I)Arhitecturi de agenti (I)
Arhitecturi de agenti (I)
 
Introducere in domeniul agentilor
Introducere in domeniul agentilorIntroducere in domeniul agentilor
Introducere in domeniul agentilor
 
Complexitate si emergenta
Complexitate si emergentaComplexitate si emergenta
Complexitate si emergenta
 
Invatarea cu intarire
Invatarea cu intarireInvatarea cu intarire
Invatarea cu intarire
 
Retele neuronale (II)
Retele neuronale (II)Retele neuronale (II)
Retele neuronale (II)
 
Retele neuronale (I)
Retele neuronale (I)Retele neuronale (I)
Retele neuronale (I)
 
Rationament probabilistic
Rationament probabilisticRationament probabilistic
Rationament probabilistic
 
Logica vaga (fuzzy)
Logica vaga (fuzzy)Logica vaga (fuzzy)
Logica vaga (fuzzy)
 

Sabloane de proiectare comportamentale (II)

  • 1. Ingineria programării 10. Șabloane de proiectare comportamentale (II) Florin Leon Universitatea Tehnică „Gheorghe Asachi” din Iași Facultatea de Automatică și Calculatoare http://florinleon.byethost24.com/curs_ip.htm Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 2. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 3. 3 Terminologie  Strategy = Strategie  Template Method = Metoda tipar  State = Stare  Interpreter = Interpretor  Visitor = Vizitator Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 4. Notă  Programele care implementează șabloanele descrise și care pot fi descărcate din pagina cursului sunt parte integrantă a prezentării 4 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 5. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 6. 6 SimUDuck Extensii… Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 7. 7 Extensii... ? Alte clase… Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 8. 8 Extensii... Cod duplicat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 9. 9 Separarea aspectelor constante de aspectele variabile Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 10. 10 Încapsularea comportamentelor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 11. 11 Încapsularea comportamentelor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 12. 12 Stabilirea strategiei Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 13. 13 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 14. 14 Definiție  Șablonul Strategie definește o familie de algoritmi, încapsulează fiecare algoritm și îi face interschimbabili. Acest șablon permite algoritmului să varieze independent de clienții care îl utilizează Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 15. 15 Diagrama UML Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 16. 16 Exemple  Structură...  Rățuștele...  Sortări...  Grafice...  Personaje de joc... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 17. Structură 17 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 18. Sortări 18 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 19. Grafice 19 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 20. Personaje de joc 20 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 21. 21 Aplicabilitate  Când mai multe clase înrudite diferă doar prin modul lor de comportare  Când este nevoie de variante diferite ale unui algoritm  Când un algoritm utilizează date ce nu trebuie cunoscute de către clienți  Când o clasă definește mai multe comportamente iar acestea apar în operațiile ei sub formă de instrucțiuni condiționale multiple Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 22. 22 Avantaje și dezavantaje  Definește familii de algoritmi înrudiți  Este o alternativă la generarea de subclase  Elimină instrucțiunile condiționale  Poate furniza implementări diferite pentru același comportament  Număr crescut de obiecte  Unele clase ConcreteStrategy mai simple pot să nu utilizeze toate informațiile interfeței Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 23. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 24. 24 Cafea și ceai Rețetele sunt similare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 25. 25 Clasele corespunzătoare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 26. 26 Abstractizarea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 27. Implementare 27 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 28. 28 Definiție  Șablonul Metoda tipar definește scheletul unui algoritm dintr-o operație, transferând unii pași către subclase. Șablonul permite subclaselor să redefinească anumiți pași dintr-un algoritm fără a schimba structura acestuia Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 29. 29 Diagrama UML Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 30. 30 Exemple  Structură...  Ceaiul și cafeaua...  Datele clienților...  Sortările temperaturilor...  Triunghiurile... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 31. 31 Ceaiul și cafeaua Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 32. Datele clienților 32 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 33. Triunghiuri 33 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 34. 34 Metode ancoră  engl. “hooks”  Pot fi suprascrise opțional de clasele derivate ancoră Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 35. 35 Exemplu de ancoră Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 36. 36 Suprascrierea ancorei Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 37. 37 Principiul Hollywood  „Nu ne suna tu, te sunăm noi”  Componentele de nivel scăzut se pot ancora în sistem, dar componentele de nivel înalt determină când vor fi folosite acestea și cum  Componentele de nivel înalt apelează componentele de nivel scăzut și nu invers Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 38. 38 Sortare cu Metoda tipar Metoda care trebuie implementată pentru completarea tiparului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 39. Sortare cu Metoda tipar 39 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 40. 40 Applet-uri  Metode ancoră:  init  start  stop  destroy  paint Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 41. 41 Aplicabilitate  Când un algoritm este compus din părți invariabile, care sunt tratate o singură dată, și părți variabile, implementate de subclase  Când comportarea comună a mai multor subclase poate fi extrasă și localizată pentru evitarea duplicării codului  Când sunt necesare operații ancoră (engl. “hooks”)  Pentru construirea platformelor (engl. “frameworks”) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 42. 42 Avantaje  Reprezintă o tehnică fundamentală pentru reutilizarea codului  Structura de control respectă Principiul Hollywood: clasa părinte apelează operațiile unei subclase și nu invers Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 43. 43 Discuție  Metoda tipar utilizează moștenirea pentru a varia părți ale unui algoritm. Strategia utilizează compunerea pentru a varia întregul algoritm  Constructorul (engl. “Builder”) construiește un obiect în mai mulți pași. Metoda tipar execută un algoritm compus din mai mulți pași  Ca și Metoda fabrică, Metoda tipar lasă subclasele să decidă asupra unor implementări  Ancorele sunt prezente în sistemul de operare Windows (de exemplu funcția WndProc)  Metodele abstracte sunt obligatorii pentru clasele derivate, metodele ancoră sunt opționale Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 44. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 45. 45 Gumball Machine Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 46. 46 Abordarea 1 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 47. 47 Abordarea 1  Număr foarte mare de instrucțiuni condiționale  Pentru s stări și n acțiuni, trebuie n metode, fiecare cu s teste  Aici trebuie 4 metode, fiecare cu 4 teste  Când se adaugă noi stări, trebuie modificate aceste teste Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 48. 48 Abordarea 2 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 49. 49 Exemplu: clasă de stări  Clasa NoQuarterState schimbarea stării Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 50. 50 Tranziții de stare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 51. 51 Tranziții de stare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 52. 52 Definiție  Șablonul Stare permite unui obiect să-și modifice comportamentul când starea sa internă se schimbă. Obiectul va părea că își schimbă clasa Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 53. 53 Diagrama UML Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 54. 54 Exemple  Structură...  Gumball Machine...  Conturi... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 55. Structură 55 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 56. Gumball Machine 56 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 57. Conturi 57 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 58. 58 Aplicabilitate  Când comportamentul unui obiect depinde de starea sa  Când operațiile presupun multiple instrucțiuni condiționale, care depind de starea obiectului Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 59. 59 Avantaje și dezavantaje  Localizează comportarea specifică de stare și partiționează comportarea pentru diferite stări  Face tranzițiile de stare explicite  Obiectele Stare pot fi partajate, dacă nu au câmpuri  Pot exista mai multe Contexte care partajează Stările  Se face un compromis: creșterea flexibilității pe baza creșterii numărului de clase  Alternativa: cod monolitic cu numeroase if-uri, greu de înțeles și modificat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 60. 60 Discuție  Dacă tranzițiile se fac în clasele de stări, se creează dependențe între acestea  Tranzițiile fixe se recomandă să fie efectuate în Context  Tranzițiile dinamice se pot face în Stările Concrete  Pentru aceasta, trebuie să existe metode de acces în Context pentru schimbarea stării curente Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 61. 61 Discuție  Strategia și Starea au diagrame asemănătoare  Strategia este o alternativă la moștenire. Starea este o alternativă la instrucțiunile condiționale  Strategiile sunt de obicei specificate de la început (chiar dacă se pot schimba ușor). Stările se schimbă dinamic prin însăși motivația șablonului  Obiectele Stare pot fi obiecte de tip Categoria muscă (engl. “Flyweight”) sau obiecte Singleton Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 62. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 63. 63 Exemplu Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 64. 64 Soluție Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 65. 65 Definiție  Șablonul Interpretor definește o reprezentare a gramaticii unui limbaj împreună cu un interpretor care utilizează reprezentarea pentru a interpreta propozițiile din limbaj Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 66. 66 Diagrama UML Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 67. 67 Exemple  Structură...  Cifre romane...  Rapoarte... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 68. Structură 68 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 69. Cifre romane 69 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 70. Rapoarte 70 Multe clase! Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 71. Rapoarte 71 Reprezentare mai concisă (doar numele claselor și relațiile dintre ele) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 72. 72 Aplicabilitate  Când trebuie interpretat un limbaj iar instrucțiunile sale pot fi reprezentate sub formă de arbori sintactici abstracți, mai ales:  Când gramatica este simplă  Altfel se pot utiliza generatoare de parsere (de exemplu Lex, Yacc++, Visual BNF etc.)  Când eficiența nu este un factor critic  Expresiile regulate sunt de obicei transformate în stări Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 73. 73 Aplicații în lumea reală  Parsarea comenzilor utilizatorului  Programe precum Mathematica, Maple (calcul simbolic) sau Origin (desenare de grafuri)  Generatoare de rapoarte: întrucât interfața cu utilizatorul este de obicei mai simplă decât limbajul SQL, se pot defini limbaje de interogare mai simple, interpretate și traduse apoi în SQL Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 74. 74 Avantaje și dezavantaje  Modificarea și extinderea gramaticii sunt ușor de realizat  Se poate folosi și moștenirea pentru extindere  Implementarea unei gramatici simple este ușor de făcut  Generarea claselor poate fi automatizată  Gramaticile complexe sunt greu de întreținut  Interpretorul necesită câte o clasă pentru fiecare regulă gramaticală  Adăugarea unei căi noi de interpretare a expresiilor este dificilă  De exemplu verificarea tipurilor într-o expresie prin definirea unei noi operații asupra claselor expresiei Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 75. 75 Discuție  Arborele sintactic abstract este o Compunere (engl. “Composite”)  Categoria muscă (engl. “Flyweight”) poate ajuta la partajarea simbolurilor terminale din arbore  Interpretorul poate folosi un Iterator pentru a traversa structura Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 76. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 77. 77 Definiție  Șablonul Vizitator reprezintă o operație care va fi efectuată pe elementele unei structuri de obiecte, permițând definirea unei operații noi fără a schimba clasele elementelor pe care operează Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 78. Exemplu: clasele Element 78 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 79. Exemplu: clasele Visitor 79 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 80. Exemplu: structura de obiecte și clientul 80 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 81. Diagrama UML 81Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 82. 82 Exemple  Structură...  Angajați...  Zile libere... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 83. Structură 83 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 84. Angajați 84 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 85. Zile libere 85 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 86. 86 Aplicabilitate  Când o structură de obiecte conține multe clase cu interfețe diferite  Când pe obiectele dintr-o structură trebuie efectuate mai multe operații neînrudite  Nu se „poluează” clasele cu aceste operații  Când se definesc des noi operații pe structură, dar clasele structurii nu se modifică des  Dacă o clasă nu are metoda Accept, se poate deriva pentru a o adăuga  Șablonul este util când nu se pot modifica sursele unor biblioteci sau platforme pentru adăugarea unor noi funcții Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 87. 87 Avantaje  Facilitează adăugarea de operații noi  Grupează operațiile înrudite și le separă pe cele neînrudite  Vizitatorul poate vizita obiecte care nu au o clasă părinte comună, spre deosebire de Iterator  Se pot apela metode diferite în Vizitator în funcție de tipul obiectului vizitat  Alternativa ar fi testarea tipului obiectului  Poate acumula starea pe măsură ce vizitează obiectele  Pot exista mai mulți vizitatori într-un sistem  Apelul bidirecțional Accept – Visit permite adăugarea mai multor operații la vizitare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 88. 88 Dezavantaje  Adăugarea de noi clase ConcreteElement este dificilă  Șablonul nu este recomandat în timpul dezvoltării unui sistem, când numărul de clase crește sau clasele se modifică mult  Poate reduce încapsularea, obligând obiectele vizitate să-și expună starea internă  Vizitatorul nu poate accesa câmpurile private, deci trebuie să existe metode publice de acces în obiectele vizitate  Anti-șablonul de proiectare Anemic domain model: logica programului este implementată în afara obiectelor din domeniu Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 89. 89 Discuție  Vizitatorul poate fi utilizat la aplicarea unei operații pe o structură Compusă (engl. “Composite”)  Pentru vizitarea fiecărui element al unei colecții se poate folosi Iteratorul acesteia  Vizitatorul poate fi utilizat pentru a păstra într-o singură clasă comportarea fiecărui nod din arborele sintactic al unui Interpretor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 90. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 91. 91 Concluzii (ȘPC II)  Strategia definește o familie de algoritmi, încapsulează fiecare algoritm și îi face interschimbabili  Metoda tipar definește scheletul unui algoritm dintr-o operație, transferând unii pași către subclase  Starea permite unui obiect să-și modifice comportamentul când starea sa internă se schimbă  Interpretorul definește o reprezentare a gramaticii unui limbaj împreună cu un interpretor care utilizează reprezentarea pentru a interpreta propozițiile din limbaj  Vizitatorul reprezintă o operație care va fi efectuată pe elementele unei structuri de obiecte, permițând definirea unei operații noi fără a schimba clasele elementelor pe care operează Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 92. 92 Șabloanele de proiectare (I)  Cunoașterea fundamentelor programării orientate pe obiecte nu implică automat abilități de proiectare orientată pe obiecte  Proiectele orientate pe obiecte de succes sunt ușor de reutilizat, extins și întreținut  Șabloanele de proiectare recomandă o serie de modalități de a proiecta astfel de sisteme  Șabloanele sunt la un nivel mai înalt de abstractizare decât bibliotecile de funcții  Șabloanele nu au fost inventate, au fost descoperite rezolvând probleme reale  Reflectă experiența unor proiectanți Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 93. 93 Șabloanele de proiectare (II)  Când sunt folosite corect, șabloanele de proiectare pot face un sistem mai flexibil și mai ușor de întreținut  Când sunt folosite fără a fi nevoie, ele cresc inutil complexitatea sistemului  Cunoașterea șabloanelor de proiectare are avantajul folosirii unui vocabular comun, ceea ce permite exprimarea mai succintă a ideilor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 94. Șabloane de proiectare comportamentale (II) 1. Strategia 2. Metoda tipar 3. Starea 4. Interpretorul 5. Vizitatorul 6. Concluzii 7. Recapitularea șabloanelor de proiectare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 95. 95 Recapitulare  Șabloane creaționale 1. Metoda fabrică 2. Fabrica abstractă 3. Singleton 4. Prototipul 5. Constructorul Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 96. 96 Metoda fabrică  Șablonul Metoda fabrică definește o interfață pentru crearea unui obiect, dar lasă subclasele să decidă ce clasă să instanțieze. Șablonul permite unei clase să cedeze subclaselor instanțierea de obiecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 97. 97 Fabrica abstractă  Șablonul Fabrica abstractă asigură o interfață pentru crearea unor familii de obiecte înrudite sau dependente fără a le specifica clasele concrete Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 98. 98 Singleton  Șablonul Singleton asigură faptul că o clasă are o singură instanță și oferă un punct global de acces la aceasta Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 99. 99 Prototip  Șablonul Prototip precizează, folosind o instanță prototip, tipurile de obiecte ce vor fi create și creează noile obiecte copiind acest prototip Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 100. 100 Constructor  Șablonul Constructor separă construcția unui obiect complex de reprezentarea acestuia, astfel încât același proces de construcție să poată crea reprezentări diferite Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 101. 101 Recapitulare  Șabloane structurale 1. Adaptorul 2. Fațada 3. Decoratorul 4. Puntea 5. Proxy 6. Categoria muscă 7. Compunerea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 102. 102 Adaptorul  Șablonul Adaptor convertește interfața unei clase în altă interfață pe care o așteaptă clientul. Adaptorul permite să funcționeze împreună clase care altfel nu ar putea din cauza interfețelor incompatibile Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 103. 103 Fațada  Șablonul Fațadă asigură o interfață unificată la o mulțime de interfețe dintr-un subsistem. Fațada definește o interfață de nivel mai înalt care face subsistemul mai ușor de utilizat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 104. 104 Decoratorul  Șablonul Decorator atașează responsabilități suplimentare unui obiect în mod dinamic. Decoratorii asigură o alternativă flexibilă la derivare pentru extinderea funcționalității Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 105. 105 Puntea  Șablonul Punte decuplează o abstracțiune de implementarea ei, astfel încât cele două să poată varia în mod independent Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 106. 106 Proxy  Șablonul Proxy asigură un surogat sau un înlocuitor pentru alt obiect pentru a controla accesul la acesta Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 107. 107 Categoria muscă  Șablonul Categoria muscă folosește partajarea pentru a gestiona eficient un număr mare de obiecte de dimensiuni mici Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 108. 108 Compunerea  Șablonul Compunere compune obiecte în structuri de tip arbore pentru a reprezenta ierarhii parte-întreg. Șablonul permite clienților să trateze uniform obiecte individuale și compuneri de obiecte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 109. 109 Recapitulare  Șabloane comportamentale 1. Iteratorul 2. Observatorul 3. Comanda 4. Lanțul responsabilităților 5. Mediatorul 6. Memento 7. Strategia 8. Metoda tipar 9. Starea 10. Interpretorul 11. Vizitatorul Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 110. 110 Iteratorul  Șablonul Iterator asigură o cale de accesare secvențială a elementelor unui obiect agregat, fără a expune reprezentarea lui de bază Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 111. 111 Observatorul  Șablonul Observator definește o dependență 1 la N între obiecte, astfel încât în cazul în care un obiect își schimbă starea, vor fi înștiințate și actualizate automat toate obiectele sale dependente Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 112. 112 Comanda  Șablonul Comandă încapsulează o cerere ca obiect, permițând parametrizarea clienților cu diferite cereri, formarea unei cozi de cereri sau stocarea istoricului acestora și asigurarea suportului pentru anularea operațiilor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 113. 113 Lanțul responsabilităților  Șablonul Lanțul responsabilităților evită cuplarea între expeditorul și destinatarul unei cereri, acordând mai multor obiecte o șansă de a rezolva cererea. Șablonul înlănțuie obiectele destinatar și trece cererea de-a lungul lanțului până când un obiect o rezolvă Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 114. 114 Mediatorul  Șablonul Mediator definește un obiect care încapsulează modul în care interacționează o mulțime de obiecte. Acest șablon promovează cuplarea slabă, interzicând obiectelor să facă referințe explicite unul la celălalt și permite modificarea independentă a interacțiunilor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 115. 115 Memento  Șablonul Memento capturează și exteriorizează starea internă a unui obiect fără a viola încapsularea, astfel încât obiectul să poată fi readus ulterior la respectiva stare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 116. 116 Strategia  Șablonul Strategie definește o familie de algoritmi, încapsulează fiecare algoritm și îi face interschimbabili. Acest șablon permite algoritmului să varieze independent de clienții care îl utilizează Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 117. 117 Metoda tipar  Șablonul Metoda tipar definește scheletul unui algoritm dintr-o operație, transferând unii pași către subclase. Șablonul permite subclaselor să redefinească anumiți pași dintr-un algoritm fără a schimba structura acestuia Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 118. 118 Starea  Șablonul Stare permite unui obiect să-și modifice comportamentul când starea sa internă se schimbă. Obiectul va părea că își schimbă clasa Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 119. 119 Interpretorul  Șablonul Interpretor definește o reprezentare a gramaticii unui limbaj împreună cu un interpretor care utilizează reprezentarea pentru a interpreta propozițiile din limbaj Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 120. 120 Vizitatorul  Șablonul Vizitator reprezintă o operație care va fi efectuată pe elementele unei structuri de obiecte, permițând definirea unei operații noi fără a schimba clasele elementelor pe care operează Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm