Post on 04-Jun-2018
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
1/96
Ingineria programrii
8. abloane de proiectarestructurale (II)
Florin LeonUniversitatea TehnicGheorghe Asachi din IaiFacultatea de Automatici Calculatoare
http://florinleon.byethost24.com/curs_ip.htm
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
2/96
abloane de proiectarestructurale (II)
1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice5. Iteratorul (ablon comportamental: Ia)6. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
3/96
3
Terminologie
Proxy = Intermediar, Delegare
Flyweight = Categoria Musc
Composite = Compunere, Obiect compus Iterator
Principle of Single Responsibility =Principiul Responsabilitii Unice
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
4/96
Not
Programele care implementeaz abloaneledescrise i care pot fi descrcate din paginacursului sunt parte integrant a prezentrii
4Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
5/96
abloane de proiectarestructurale (II)
1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice5. Iteratorul (SC Ia)6. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
6/96
6
Tipuri de delegare
Delegarea la distan (Remote Proxy)
Delegarea virtual (Virtual Proxy)
Delegarea de protecie (Protection Proxy) Referin inteligent (Smart Reference)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
7/96
7
Exemplu
Monitorizarea la distan a unor mainipentru vnzarea gumei de mestecat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
8/96
8
Abordarea local
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
9/96
9
Programul de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
10/96
10
Abordarea distribuit
Scopul este minimizarea modificrilor n codul deja creat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
11/96
11
Apelurile metodelor (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
12/96
12
Apelurile metodelor (II)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
13/96
13
Apelurile metodelor (III)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
14/96
14
Apelurile metodelor (IV)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
15/96
15
Apelurile metodelor (V)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
16/96
16
Apelurile metodelor (VI)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
17/96
17
Abordarea distribuit
Clasa Monitorrmne aproape la felFlorin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
18/96
18
Programul de test
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
19/96
19
Rulare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
20/96
20
Rezultate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
21/96
21
.NET
Delegarea la distan se poate realizautiliznd: Socket-uri (socluri)
Remoting
Windows Communication Foundation
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
22/96
22
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
23/96
23
Definiie
ablonul Proxyasigur un surogat sau un nlocuitorpentru alt obiect pentru a controla accesul la acesta Delegarea la distancontroleaz accesul ctre un obiect
nelocal Delegarea virtualcontroleaz accesul la o resurs
costisitor de creat
Delegarea de proteciecontroleaz accesul la o resurs pebaza unor drepturi de acces
Referin inteligent: copierea la scriere (copy on write),blocarea unui obiect, numrarea referinelor, caching
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
24/96
24
Delegarea virtual
Delegarea la distan
Delegarea virtual
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
25/96
25
Exemplu
ncrcarea unei imagini Foarte mari
De pe Internet
Proxy-ul afieaz un mesaj pn cndimaginea este ncrcat i poate fi afiat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
26/96
26
Imagine mare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
27/96
27
Exemplu de rulare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
28/96
28
Imagine de pe Internet
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
29/96
29
Exemplu de rulare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
30/96
30
Delegarea de protecie
Serviciu de matchmaking
O persoan (owner) i poate modifica numele, sexul (!), interesele
Nu i poate modifica ratingul (hot or not)
Alt persoan (non-owner) Nu i poate modifica alteia numele, sexul, interesele
i poate modifica ratingul
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
31/96
31Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
32/96
32Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
33/96
33
la fel ca Name
IPerson, Person i PersonProxy trebuie s fientr-un namespace diferit de cel al clientului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
34/96
34
Exemplu de rulare (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
35/96
35
Exemplu de rulare (II)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
36/96
36
Rezultate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
37/96
37
Copierea la scriere
Un proxy se poate folosi i pentru pstrareacpiilor unor obiecte mari care pot sau nu s semodifice
Dac se dorete crearea unei alte instane deacest tip, proxy-ul poate decide s nu facefectiv copia, folosind n continuare primul obiect
Cnd clientulncearc s fac modificri n aldoilea obiect, proxy-ul face copia i modificrile
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
38/96
38
Caching Proxy
ine evidena obiectelor create sau resurselordisponibile i cnd apare o cerere, returneazun obiect sau o resurs din cache
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
39/96
39
Discuie
Adaptorulasigur o interfa diferit Decoratorulasigur aceeai interfa, dar cu noi
funcionaliti
Proxy-ul asigur tot aceeai interfa, dar cu unscop diferit Intercepteaz un apel pe care l trimite mai departe
obiectului int Chiar dac sunt incluse i funcionaliti noi, nu acesta este
scopul principal Proxy-ul poate s i instanieze obiecte, Decoratorul
nu (primete obiectul de decorat)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
40/96
abloane de proiectarestructurale (II)
1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice
5. Iteratorul (SC Ia)6. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
41/96
41
O instan a unuiprogram cu mai
multe documente
Mai multe instaneale aceluiaiprogram, cte unapentru fiecaredocument
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
42/96
42
Camerele de hotel
Mai multe tipuri de camere Economy, Deluxe, Royal
Mai multe tipuri de amenajri interioare, n funcie de
preferinele clienilor i tipul de camer Flori, spun, culoarea prosoapelor
Camerele rmn aceleai
Preferinele variaz Acestea sunt obiecte de dimensiuni mici, care instaniaz
un numr restrns de clase, ns sunt foarte numeroase
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
43/96
43
Categoria Musc
Ideea de baz este partajarea instanelor
Fiecare instan are: Date intrinseci(interne, constante)
Camerele
Date extrinseci(externe, variabile) Preferinele clienilor
De obicei exist o Fabricpentru instaniereaobiectelor Flyweight
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
44/96
44
Diagrama UML a exemplului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
45/96
45
Definiie
ablonul Categoria Muscfolosetepartajarea pentru a gestiona eficient unnumr mare de obiecte de dimensiuni mici
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
46/96
46
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
47/96
47
Clase partajate i nepartajate
Pentru clasele partajate (ConcreteFlyweight)exist o singur instan, pentru care separticularizeaz datele extrinseci
Clasele nepartajate (UnsharedConcreteFlyweight)sunt clase normale care implementeaz aceeaiinterfa ablonul nu impune partajarea tuturor instanelor; pentru
clasele nepartajate putem avea mai multe instane i instanele lor pot fi create de aceeai Fabric
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
48/96
48
Alte exemple
Structur...
Caractere...
Directoare Imaginea unui director este
aceeai, n funcie de tip(selectat, neselectat)
Exist un obiect directorselectat i un obiectdirector neselectat
Particularizarea se face nfuncie de coordonate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
49/96
Structur
49
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
50/96
Caractere
50
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
51/96
Directoare
51
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
52/96
52
Aplicaii n lumea real
Editoare de documente n care fiecare simbol(engl. glyph) este flyweight
Programul Doc (1992)
Un document cu 180.000 de caractere necesitalocare de spaiu pentru doar 480 de obiecte caracter
Caching de obiecte n aplicaii web unde
memoria este esenial(de exemplu applet-uri)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
53/96
53
Discuie
Obiectele flyweight sunt obiecte pariale (instane virtuale),care se completeaz cu starea extern
Categoria Muscdifer de Prototipdeoarece nu se foloseteclonarea pentru schimbarea strii interne a obiectelor flyweight
Categoria Muscdifer de Singletondeoarece aici exist cte oinstan pentru fiecare caz diferit, nu doar una singur global
Deseori obiectele flyweight sunt create de o Fabric, dintr-unbazin (engl. pool) de obiecte De exemplu un Dictionary/Hashtable, n care cheia este cazul,
particularizarea obiectului Fabricautilizat pentru crearea obiectelor poate fi Singleton
i pentru Categoria Muscse poate utiliza metoda copierii lascriere (Proxy)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
54/96
abloane de proiectare
structurale (II), abloane deproiectare comportamentale (Ia)
1. Proxy2. Categoria Musc3. Compunerea4. Principiul Responsabilitii Unice
5. Iteratorul (SC Ia)6. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
55/96
55
Fuziunea restaurantelor
Pentru meniuri, unulfolosete un vector deMenuItem, cellalt o
list de MenuItem Cele 2 meniuri trebuie
incluse ntr-un meniuunitar
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
56/96
56
mbinarea: abordarea 1
adugarea unor noimeniuri implic
schimbarea codului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
57/96
57
mbinarea: abordarea 2
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
58/96
58
mbinarea: abordarea 2
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
59/96
59
Clasele agregat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Clasele agregat
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
60/96
60
Clasele agregat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
61/96
61
Clasele iterator
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
62/96
62
Clasele iterator
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
63/96
63
Utilizare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
64/96
64
Definiie
ablonul Iteratorasigur o cale de accesaresecvenial a elementelor unui obiectagregat, fr a expune reprezentarea lui de
baz
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
65/96
65
Diagrama UML
numele metodelorpot fi diferite ct
vreme funcionalitatearmne aceeai
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
66/96
66
Discuie
Metodele Iteratoruluipot avea nume diferite Java Iterator: next(), hasNext(), remove()
C# IEnumerator: Current, MoveNext(), Reset()
Exist Iteratoriinterni i externi Iteratorul externeste controlat de client, ca n exemplul
precedent (cu metoda next)
Iteratorul interneste controlat de Iteratorul nsui, cruiatrebuie s i se spun ce operaii s efectueze cuelementele pe care le parcurge Utilizat mai ales n limbaje ca Lisp, Smalltalk etc. sau cnd se
pot trimite ca parametri funcii anonime pentru operaii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
67/96
67
Principiul Responsabilitii Unice
O clas trebuie s aib un singur motiv deschimbare Fiecare responsabilitate este o zon de posibile
schimbri Deci o clas trebuie s aib o singur
responsabilitate
Respectarea principiului conduce la cretereacoeziunii clasei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Extinderea exemplului
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
68/96
68
Extinderea exempluluiprecedent
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
69/96
69
Iteratorul
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
70/96
Tratarea unitar a meniurilor
70
Un iterator pentru lista demeniuri i cte un iterator
pentru fiecare meniu n parte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
71/96
71
Alte exemple
Structur...
Iterator cu pas variabil...
Iterator de filtrare...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
72/96
72
Colecii C#
Colecii ArrayList
BitArray
Hashtable Queue
SortedList
Stack
Colecii generice Dictionary
Hashset
LinkedList List
Queue
SortedDictionary
SortedList Stack
Obiecte agregate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
73/96
73
Aplicabilitate
ablonul se utilizeaz pentru: A accesa coninutul unui obiect agregat fr a expune
reprezentarea intern
A asigura suport pentru mai multe traversri aleobiectelor agregate
A furniza o interfa uniform pentru traversareastructurilor agregate diferite
Pentru a suporta o iteraie polimorfic
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
74/96
74
Avantaje
Suport variaii n traversarea unui agregat Obiectele agregatepot fi traversate n mai multe feluri i de
mai multe ori
Obiectele Iteratorsimplific interfaaAgregat Agregatulare nevoie de o metod unic pentru creareaIteratorului
Scade cuplarea dintre client i obiectele agregate
Crete coeziunea obiectului agregatprin eliminareanecesitii de a asigura el nsui traversarea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
75/96
75
Discuie
Iteratoriisunt deseori aplicai pe structurirecursive precum obiectele Compuse(engl.Composite), prezentate n continuare
Iteratoriipolimorfici se bazeaz pe MetodeFabricpentru a instania subclasa Iteratorcorect
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Extinderea exemplului cu meniuri:
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
76/96
76
Extinderea exemplului cu meniuri:adugarea de submeniuri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
77/96
77
Reprezentarea de tip arbore
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
78/96
78
Definiie
ablonul Compunerecompune obiecte nstructuri de tip arbore pentru a reprezentaierarhii parte-ntreg. ablonul permite
clienilor s trateze uniform obiecteindividuale i compuneri de obiecte
Pot fi ignorate diferenele dintre obiectelecompuse i obiectele elementare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
79/96
79
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Interfaa comun pentru
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
80/96
Interfaa comun pentrunoduri i frunze
Implementri implicitepentru fiecare metod
80
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
81/96
81
Frunzele
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Nodurile (I)
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
82/96
82
Nodurile (I)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Nodurile (II)
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
83/96
83
Nodurile (II)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
84/96
84
Principiul Responsabilitii Unice
ablonul Compunereare 2 responsabiliti: Gestionarea ierarhiei
Executarea operaiilor legate de meniuri
Compromis pentru creterea transparenei Tratarea similar a nodurilor i frunzelor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
85/96
85
Iteratorulcompus
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
86/96
86
Discuie
Metoda Printera mult mai simpl Este un exemplu de Iterator extern
Iteratorul compuseste mult mai complex Este un Iterator internspecializat pentru
traversarea arborelui
Este mai uor de apelat din exterior
Complexitatea se mut din codul client n codulIteratorului
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
87/96
87
Iteratorul nul
Abordarea 1. Pentrufrunze, CreateIterator()poate returna null Este necesar un test
n codul client
Abordarea 2. Se poatecrea un Iteratorcarereturneaz ntotdeaunafalsen hasNext() /MoveNext()
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
88/96
88
Meniul vegetarian
n mod normal, tratarea excepiilor nu trebuie utilizat pentru logica programului
Este nc un exemplu de compromis pentru pstrarea transparenei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
89/96
89
Alte exemple
Structur:elemente de desenare...
SimpleComposite: angajai...
DLinkComposite: angajai i efi...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
90/96
Elemente de desenare
90
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
91/96
Angajai
91
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
92/96
Angajai i efi
92
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
93/96
93
Aplicabilitate
Cnd se dorete reprezentarea unei ierarhii deobiecte, de tip parte-ntreg
Cnd se dorete ignorarea de ctre clieni a
diferenelor dintre compunerile de obiecte iobiectele individuale Clienii trateaz uniform toate obiectele din structura
compus
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
94/96
94
Avantaje i dezavantaje
Simplific clienii, care trateaz uniform nodurilei frunzele
Faciliteaz adugarea unor noi tipuri de
componente
Poate face un proiect prea general
ngreuneaz restricionarea componentelor uneicompuneri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
95/96
95
Discuie
ablonul Compunereeste uneori utilizatmpreun cu ablonul Decorator
Cnd se utilizeaz mpreun Decoratorii Compuneri,
ei vor avea de obicei o clas printe comun Decoratoriivor trebui s implementeze interfaa
Componentcu operaii precumAdd, RemoveiGetChild
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8/13/2019 Ingineria programarii: Sabloane de proiectare structurale 2
96/96
Concluzii
Proxy-ul asigur un surogat sau un nlocuitor pentru alt obiectpentru a controla accesul la acesta
Categoria Muscfolosete partajarea pentru a gestionaeficient un numr mare de obiecte de dimensiuni mici
Compunereacompune obiecte n structuri de tip arborepentru a reprezenta ierarhii parte-ntreg i permite clienilor strateze uniform obiecte individuale i compuneri de obiecte
Iteratorulasigur o cale de accesare secvenial aelementelor unui obiect agregat, fr a expune reprezentarealui de baz