Sunteți pe pagina 1din 96

Ingineria programrii

8. abloane de proiectare
structurale (II)
Florin Leon
Universitatea Tehnic Gheorghe Asachi din Iai
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
structurale (II)
1. Proxy
2. Categoria Musc
3. Compunerea
4. Principiul Responsabilitii Unice
5. Iteratorul (ablon comportamental: Ia)
6. Concluzii

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Terminologie

Proxy = Intermediar, Delegare


Flyweight = Categoria Musc
Composite = Compunere, Obiect compus
Iterator
Principle of Single Responsibility =
Principiul Responsabilitii Unice
3

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Not

Programele care implementeaz abloanele


descrise i care pot fi descrcate din pagina
cursului sunt parte integrant a prezentrii

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

abloane de proiectare
structurale (II)
1. Proxy
2. Categoria Musc
3. Compunerea
4. Principiul Responsabilitii Unice
5. Iteratorul (SC Ia)
6. Concluzii

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

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

Exemplu

Monitorizarea la distan a unor maini


pentru vnzarea gumei de mestecat

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Abordarea local

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Programul de test

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Abordarea distribuit

Scopul este minimizarea modificrilor n codul deja creat

10

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Apelurile metodelor (I)

11

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Apelurile metodelor (II)

12

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Apelurile metodelor (III)

13

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Apelurile metodelor (IV)

14

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Apelurile metodelor (V)

15

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Apelurile metodelor (VI)

16

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Abordarea distribuit

Clasa Monitor rmne aproape la fel


Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

17

Programul de test

18

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Rulare

19

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Rezultate

20

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

.NET

Delegarea la distan se poate realiza


utiliznd:

Socket-uri (socluri)
Remoting
Windows Communication Foundation

21

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Diagrama UML

22

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Definiie

ablonul Proxy asigur un surogat sau un nlocuitor


pentru alt obiect pentru a controla accesul la acesta

Delegarea la distan controleaz accesul ctre un obiect


nelocal
Delegarea virtual controleaz accesul la o resurs
costisitor de creat
Delegarea de protecie controleaz accesul la o resurs pe
baza unor drepturi de acces
Referin inteligent: copierea la scriere (copy on write),
blocarea unui obiect, numrarea referinelor, caching

23

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Delegarea virtual
Delegarea la distan

Delegarea virtual

24

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu

ncrcarea unei imagini

Foarte mari
De pe Internet

Proxy-ul afieaz un mesaj pn cnd


imaginea este ncrcat i poate fi afiat

25

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Imagine mare

26

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu de rulare

27

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Imagine de pe Internet

28

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu de rulare

29

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

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
30

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

31

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

32

la fel ca Name

IPerson, Person i PersonProxy trebuie s fie


ntr-un namespace diferit de cel al clientului

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

33

Exemplu de rulare (I)

34

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Exemplu de rulare (II)

35

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Rezultate

36

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Copierea la scriere

Un proxy se poate folosi i pentru pstrarea


cpiilor unor obiecte mari care pot sau nu s se
modifice

Dac se dorete crearea unei alte instane de


acest tip, proxy-ul poate decide s nu fac
efectiv copia, folosind n continuare primul obiect

Cnd clientul ncearc s fac modificri n al


doilea obiect, proxy-ul face copia i modificrile
37

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Caching Proxy

ine evidena obiectelor create sau resurselor


disponibile i cnd apare o cerere, returneaz
un obiect sau o resurs din cache

38

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Discuie

Adaptorul asigur o interfa diferit


Decoratorul asigur aceeai interfa, dar cu noi
funcionaliti
Proxy-ul asigur tot aceeai interfa, dar cu un
scop 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)
39

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

abloane de proiectare
structurale (II)
1. Proxy
2. Categoria Musc
3. Compunerea
4. Principiul Responsabilitii Unice
5. Iteratorul (SC Ia)
6. Concluzii

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

O instan a unui
program cu mai
multe documente

Mai multe instane


ale aceluiai
program, cte una
pentru fiecare
document

41

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Camerele de hotel

Mai multe tipuri de camere

Mai multe tipuri de amenajri interioare, n funcie de


preferinele clienilor i tipul de camer

Economy, Deluxe, Royal

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
42

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Categoria Musc

Ideea de baz este partajarea instanelor


Fiecare instan are:

Date intrinseci (interne, constante)

Date extrinseci (externe, variabile)

Camerele
Preferinele clienilor

De obicei exist o Fabric pentru instanierea


obiectelor Flyweight

43

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Diagrama UML a exemplului

44

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Definiie

ablonul Categoria Musc folosete


partajarea pentru a gestiona eficient un
numr mare de obiecte de dimensiuni mici

45

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Diagrama UML

46

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Clase partajate i nepartajate

Pentru clasele partajate (ConcreteFlyweight)


exist o singur instan, pentru care se
particularizeaz datele extrinseci
Clasele nepartajate (UnsharedConcreteFlyweight)
sunt clase normale care implementeaz aceeai
interfa

ablonul nu impune partajarea tuturor instanelor; pentru


clasele nepartajate putem avea mai multe instane

i instanele lor pot fi create de aceeai Fabric

47

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Alte exemple

Structur...
Caractere...
Directoare

Imaginea unui director este


aceeai, n funcie de tip
(selectat, neselectat)
Exist un obiect director
selectat i un obiect
director neselectat
Particularizarea se face n
funcie de coordonate
48

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Structur

49

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Caractere

50

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Directoare

51

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

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 necesit


alocare de spaiu pentru doar 480 de obiecte caracter

Caching de obiecte n aplicaii web unde


memoria este esenial (de exemplu applet-uri)

52

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Discuie

Obiectele flyweight sunt obiecte pariale (instane virtuale),


care se completeaz cu starea extern
Categoria Musc difer de Prototip deoarece nu se folosete
clonarea pentru schimbarea strii interne a obiectelor flyweight
Categoria Musc difer de Singleton deoarece aici exist cte o
instan pentru fiecare caz diferit, nu doar una singur global
Deseori obiectele flyweight sunt create de o Fabric, dintr-un
bazin (engl. pool) de obiecte
De exemplu un Dictionary/Hashtable, n care cheia este cazul,
particularizarea obiectului

Fabrica utilizat pentru crearea obiectelor poate fi Singleton

i pentru Categoria Musc se poate utiliza metoda copierii la


scriere (Proxy)
53

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

abloane de proiectare
structurale (II), abloane de
proiectare comportamentale (Ia)
1. Proxy
2. Categoria Musc
3. Compunerea
4. Principiul Responsabilitii Unice
5. Iteratorul (SC Ia)
6. Concluzii

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Fuziunea restaurantelor

Pentru meniuri, unul


folosete un vector de
MenuItem, cellalt o
list de MenuItem

Cele 2 meniuri trebuie


incluse ntr-un meniu
unitar

55

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

mbinarea: abordarea 1

adugarea unor noi


meniuri implic
schimbarea codului

56

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

mbinarea: abordarea 2

57

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

mbinarea: abordarea 2

58

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Clasele agregat

59

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Clasele agregat

60

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Clasele iterator

61

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Clasele iterator

62

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Utilizare

63

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Definiie

ablonul Iterator asigur o cale de accesare


secvenial a elementelor unui obiect
agregat, fr a expune reprezentarea lui de
baz

64

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Diagrama UML
numele metodelor
pot fi diferite ct
vreme funcionalitatea
rmne aceeai

65

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Discuie

Metodele Iteratorului pot avea nume diferite

Java Iterator: next(), hasNext(), remove()


C# IEnumerator: Current, MoveNext(), Reset()

Exist Iteratori interni i externi

Iteratorul extern este controlat de client, ca n exemplul


precedent (cu metoda next)
Iteratorul intern este controlat de Iteratorul nsui, cruia
trebuie s i se spun ce operaii s efectueze cu
elementele pe care le parcurge

Utilizat mai ales n limbaje ca Lisp, Smalltalk etc. sau cnd se


pot trimite ca parametri funcii anonime pentru operaii
66

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul Responsabilitii Unice

O clas trebuie s aib un singur motiv de


schimbare

Fiecare responsabilitate este o zon de posibile


schimbri
Deci o clas trebuie s aib o singur
responsabilitate

Respectarea principiului conduce la creterea


coeziunii clasei
67

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Extinderea exemplului
precedent

68

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Iteratorul

69

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Tratarea unitar a meniurilor

Un iterator pentru lista de


meniuri i cte un iterator
pentru fiecare meniu n parte

70

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Alte exemple

Structur...
Iterator cu pas variabil...
Iterator de filtrare...

71

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Colecii C#

Colecii

ArrayList
BitArray
Hashtable
Queue
SortedList
Stack

Colecii generice

Dictionary
Hashset
LinkedList
List
Queue
SortedDictionary
SortedList
Stack

Obiecte agregate
72

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Aplicabilitate

ablonul se utilizeaz pentru:

A accesa coninutul unui obiect agregat fr a expune


reprezentarea intern

A asigura suport pentru mai multe traversri ale


obiectelor agregate

A furniza o interfa uniform pentru traversarea


structurilor agregate diferite

Pentru a suporta o iteraie polimorfic

73

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Avantaje

Suport variaii n traversarea unui agregat

Obiectele Iterator simplific interfaa Agregat

Obiectele agregate pot fi traversate n mai multe feluri i de


mai multe ori
Agregatul are nevoie de o metod unic pentru crearea
Iteratorului

Scade cuplarea dintre client i obiectele agregate


Crete coeziunea obiectului agregat prin eliminarea
necesitii de a asigura el nsui traversarea

74

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Discuie

Iteratorii sunt deseori aplicai pe structuri


recursive precum obiectele Compuse (engl.
Composite), prezentate n continuare

Iteratorii polimorfici se bazeaz pe Metode


Fabric pentru a instania subclasa Iterator
corect

75

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Extinderea exemplului cu meniuri:


adugarea de submeniuri

76

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Reprezentarea de tip arbore

77

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Definiie

ablonul Compunere compune obiecte n


structuri de tip arbore pentru a reprezenta
ierarhii parte-ntreg. ablonul permite
clienilor s trateze uniform obiecte
individuale i compuneri de obiecte

Pot fi ignorate diferenele dintre obiectele


compuse i obiectele elementare

78

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Diagrama UML

79

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Interfaa comun pentru


noduri i frunze

Implementri implicite
pentru fiecare metod
80

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Frunzele

81

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Nodurile (I)

82

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Nodurile (II)

83

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul Responsabilitii Unice

ablonul Compunere are 2 responsabiliti:

Gestionarea ierarhiei
Executarea operaiilor legate de meniuri

Compromis pentru creterea transparenei

Tratarea similar a nodurilor i frunzelor

84

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Iteratorul
compus
85

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Discuie

Metoda Print era mult mai simpl

Este un exemplu de Iterator extern

Iteratorul compus este mult mai complex

Este un Iterator intern specializat pentru


traversarea arborelui
Este mai uor de apelat din exterior

Complexitatea se mut din codul client n codul


Iteratorului

86

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Iteratorul nul

Abordarea 1. Pentru
frunze, CreateIterator()
poate returna null

Este necesar un test


n codul client

Abordarea 2. Se poate
crea un Iterator care
returneaz ntotdeauna
false n hasNext() /
MoveNext()

87

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Meniul vegetarian

n mod normal, tratarea excepiilor nu trebuie utilizat pentru logica programului


Este nc un exemplu de compromis pentru pstrarea transparenei
88

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Alte exemple

Structur: elemente de desenare...


SimpleComposite: angajai...
DLinkComposite: angajai i efi...

89

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Elemente de desenare

90

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Angajai

91

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Angajai i efi

92

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Aplicabilitate

Cnd se dorete reprezentarea unei ierarhii de


obiecte, de tip parte-ntreg
Cnd se dorete ignorarea de ctre clieni a
diferenelor dintre compunerile de obiecte i
obiectele individuale

Clienii trateaz uniform toate obiectele din structura


compus

93

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Avantaje i dezavantaje

Simplific clienii, care trateaz uniform nodurile


i frunzele
Faciliteaz adugarea unor noi tipuri de
componente
Poate face un proiect prea general
ngreuneaz restricionarea componentelor unei
compuneri
94

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Discuie

ablonul Compunere este uneori utilizat


mpreun cu ablonul Decorator

Cnd se utilizeaz mpreun Decoratori i Compuneri,


ei vor avea de obicei o clas printe comun

Decoratorii vor trebui s implementeze interfaa


Component cu operaii precum Add, Remove i
GetChild

95

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Concluzii

Proxy-ul asigur un surogat sau un nlocuitor pentru alt obiect


pentru a controla accesul la acesta
Categoria Musc folosete partajarea pentru a gestiona
eficient un numr mare de obiecte de dimensiuni mici
Compunerea compune obiecte n structuri de tip arbore
pentru a reprezenta ierarhii parte-ntreg i permite clienilor s
trateze uniform obiecte individuale i compuneri de obiecte

Iteratorul asigur o cale de accesare secvenial a


elementelor unui obiect agregat, fr a expune reprezentarea
lui de baz
96

Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

S-ar putea să vă placă și