Ingineria programării
7. Șabloane de proiectare
structurale (I)
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
structurale (I)
1. Adaptorul
2. Fațada
3. Principiul cunoașterii minime
4. Decoratorul
5. Principiul deschis-închis
6. Puntea
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
3
Terminologie
 Adapter = Adaptor
 Façade = Fațadă
 Decorator
 Bridge = Punte
 The Principle of Least Knowledge =
Principiul cunoașterii minime
 The Open-Closed Principle =
Principiul deschis-închis
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
structurale (I)
1. Adaptorul
2. Fațada
3. Principiul cunoașterii minime
4. Decoratorul
5. Principiul deschis-închis
6. Puntea
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
6
Adaptoare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
7
Adaptoare OO
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
8
Adaptoare OO
Cod neschimbat Cod neschimbat
Cod nou
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
9
Exemplul 1
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
10
Adaptorul “TurkeyToDuck”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
11
Utilizare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
12
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
13
Definiție
 Ș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
14
Adaptori de obiecte și de clase
 Adaptorul
de obiecte
 Adaptorul
de clase
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
15
Comparație
 Adaptorul de obiecte este mai flexibil
 Poate adapta nu numai clasa Adaptee,
ci și orice clasă derivată a acestuia
 Adaptorul de clase este mai eficient
 Un singur obiect adaptor vs. două obiecte:
un adaptor și un adaptat
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
16
Exemplul 2
Abordare mai veche Abordare mai nouă
Are în plus remove()
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
17
Exemplul 2
throw new Exception("The method or operation is not implemented.")
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
18
Implementare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
19
Alte exemple
 Structură...
 Compuși chimici...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
20
Compuși chimici
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
structurale (I)
1. Adaptorul
2. Fațada
3. Principiul cunoașterii minime
4. Decoratorul
5. Principiul deschis-închis
6. Puntea
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
22
„Cinema la tine-acasă”
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
23
Vizionarea unui film
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
24
Vizionarea unui film
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
25
Fațada
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
26
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
27
Implementare
 Constructor...
 WatchMovie...
 EndMovie...
 Adăugarea unor funcții noi:
 ListenToCd...
 EndCd...
 ListenToRadio...
 EndRadio...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
28
Definiție
 Ș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
29
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
30
Alte exemple
 Structură...
 Credite ipotecare...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Structură
31
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
32
Credite ipotecare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
33
Discuție
 Fațada nu numai că simplifică o interfață,
ci și decuplează clientul de subsistemul de
componente
 Subsistemul poate fi de asemenea accesat direct,
fațada nu încapsulează subsistemul
 Atât Fațada cât și Adaptorul pot împacheta
(pot fi wrappere pentru) una sau mai multe clase
 Scopul Adaptorului este să convertească interfața
 Scopul Fațadei este să simplifice interfața
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
structurale (I)
1. Adaptorul
2. Fațada
3. Principiul cunoașterii minime
4. Decoratorul
5. Principiul deschis-închis
6. Puntea
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
35
Principiul cunoașterii minime
 „Vorbește numai cu prietenii imediați”
 Se recomandă apelul metodelor numai din:
 Obiectul însuși
 Câmpurile obiectului
 Obiectele primite ca parametri în metode
 Obiectele instanțiate în metode
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
36
Principiul cunoașterii minime
 Nu se recomandă apelul metodelor din
obiectele returnate de alte metode
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
37
Apeluri admise
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
38
Fațada și PCM
 Clientul are o singură dependență („prieten imediat”):
fațada
 Dacă subsistemul este prea complex și nu respectă
PCM, se pot defini fațade suplimentare pentru
niveluri succesive din subsistem
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
structurale (I)
1. Adaptorul
2. Fațada
3. Principiul cunoașterii minime
4. Decoratorul
5. Principiul deschis-închis
6. Puntea
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
40
Starbuzz Coffee
cost() este abstract
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
41
Tipuri de cafea și condimente
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
42
Abordarea 1
valori bool pentru
fiecare condiment
cost() nu mai este abstract, ci virtual
Calculează costurile determinate de
condimente
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
43
Abordarea 1
Dacă se adaugă sau se
elimină unele condimente?
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
44
Principiul deschis-închis
 Clasele trebuie să fie deschise pentru
extindere dar închise pentru modificări
 Utilizarea principiului introduce de obicei noi
niveluri de abstractizare, care cresc
complexitatea codului
 Compromis: aplicarea în secțiunile cu stabilitate
redusă (unde probabilitatea de modificare este
ridicată)
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
45
Decorarea unui obiect
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
46
Apelul metodei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
47
Abordarea 2: decorarea
Componenta
abstractă
Componentele
concrete
Decoratorii concreți
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
48
Clasele abstracte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
49
Clasele concrete
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
50
Utilizare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
51
Definiție
 Ș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
52
Diagrama UML
derivarea este folosită pentru
respectarea interfeței
compunerea este folosită
pentru apelul metodei
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
53
Alte exemple
 Structură...
 Împrumuturi la bibliotecă...
 Butoane decorate...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
54
Structură
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
55
Împrumuturi la bibliotecă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
56
Butoane decorate
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
57
Discuție (I)
 Decoratorii au același tip ca și obiectele decorate
 Putem trimite ca parametru un obiect decorat în locul
obiectului inițial
 Decoratorul folosește moștenirea pentru a prelua tipul
obiectului decorat și compunerea pentru a-i schimba
comportamentul
 Se pot utiliza unul sau mai mulți decoratori pentru un obiect
 Obiectele pot fi decorate dinamic în momentul execuției
 Decoratorul își poate adăuga propriul comportament înainte
sau după delegare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
58
Discuție (II)
 Adaptorul permite utilizarea unor clase fără a modifica
nici codul client nici codul țintă; Decoratorul permite
adăugarea de noi funcționalități fără modificări în cod
 Adaptorul convertește interfețele, Decoratorul nu
 Decoratorul schimbă comportamentul, Adaptorul nu
 Decoratorii pot fi creați cu șabloanele Fabrică și
Constructor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Șabloane de proiectare
structurale (I)
1. Adaptorul
2. Fațada
3. Principiul cunoașterii minime
4. Decoratorul
5. Principiul deschis-închis
6. Puntea
7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
60
Ferestre: motivație
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
61
Ferestre: motivație
 Când o abstracțiune poate avea mai multe implementări,
se utilizează moștenirea pentru acestea
 Însă moștenirea leagă o implementare de o abstracțiune
în mod permanent, deci este dificil să se modifice, să se
extindă și să se reutilizeze în mod independent
abstracțiunea și implementările
 În exemplul anterior, nu este convenabilă extinderea
abstracțiunii Window pentru a acoperi diferite tipuri de
ferestre sau platforme
 Moștenirea fără o Punte face codul client dependent de
platformă
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
62
Ferestre: soluție
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
63
Discuție
 Abstracțiunea Window și implementarea ei sunt puse în
ierarhii de clase separate
 Există o ierarhie de clase pentru interfețele de ferestre și
o ierarhie separată pentru implementările specifice ale
ferestrelor cu rădăcina WindowImp
 Toate operațiile asupra subclaselor Window sunt
implementate în termeni de operații abstracte din
interfața WindowImp
 Se decuplează abstracțiunea fereastră de diferitele
implementări specifice platformelor
 Relația dintre Window și WindowImp este o Punte
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
64
Planificarea firelor de execuție
Se mai adaugă o
platformă cu
planificatori ai
firelor de execuție
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
65
Soluție folosind Puntea
Varianta inițială
Varianta folosind Puntea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
66
Telecomanda: motivație
 Toate telecomenzile au
aceeași abstractizare
 Există foarte multe
implementări, câte una
pentru fiecare tip de
televizor
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
67
Telecomanda: motivație
 Problemă: pe lângă
schimbările din
implementări, vor
exista și schimbări în
abstractizare
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
68
Telecomanda: soluție
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
69
Definiție
 Ș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
70
Diagrama UML
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
71
Alte exemple
 Structură...
 Clienți de afaceri...
 Vizualizări de produse...
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
72
Structură
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
73
Clienți de afaceri
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
74
Vizualizări de produse
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
75
Exemple din viața reală
 Windows
 Șablonul Punte permite unui proiectant să furnizeze o
interfață simplă pentru abstracțiune și o interfață puternică
și complexă pentru implementare
 Win32API este interfața abstracțiunii
 Limbajul de nucleu (engl. “kernel”) este interfața
implementării
 Platforma .NET
 CIL, C#, Visual Basic, Managed C++ sunt abstracțiuni
 MSIL este o implementare
 Mono și dotGnu sunt alte implementări
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
Exemple din viața reală
 Vizualizarea listelor de proprietăți ale controalelor .NET
este implementată cu șablonul Punte
76
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
77
Avantaje și dezavantaje
 Evitarea legării clienților de o implementare;
schimbările de implementare nu afectează clientul
 Detaliile de implementare sunt ascunse clientului
 Potrivit pentru dezvoltarea pentru platforme diferite
 Abstracțiunile și implementările pot fi selectate în
momentul execuției
 Separarea abstracțiunii de implementare crește
complexitatea
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
78
Discuție
 Șablonul Punte descompune interfața și implementarea unei
componente în ierarhii de clase independente
 Clasa de interfață conține o referință la clasa de implementare
abstractă, referință care este inițializată cu o instanță a clasei de
implementare concretă, dar toate interacțiunile ulterioare de la clasa
de interfață spre clasa de implementare se limitează la
abstracțiunea din clasa de bază de implementare
 Clientul interacționează cu clasa de interfață iar cererile sunt
delegate către clasa de implementare
 Obiectul de interfață este punctul de contact cunoscut și utilizat de
către client iar obiectul de implementare este „corpul” încapsulat
pentru a-i permite să evolueze sau chiar să fie schimbat complet
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
79
Concluzii
 Șablonul Adaptor convertește interfața unei clase în
altă interfață pe care o așteaptă clientul
 Șablonul Fațadă asigură o interfață unificată la o
mulțime de interfețe dintr-un subsistem
 Șablonul Decorator atașează responsabilități
suplimentare unui obiect în mod dinamic
 Ș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

Sabloane de proiectare structurale (I)

  • 1.
    Ingineria programării 7. Șabloanede proiectare structurale (I) 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 structurale(I) 1. Adaptorul 2. Fațada 3. Principiul cunoașterii minime 4. Decoratorul 5. Principiul deschis-închis 6. Puntea 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 3.
    3 Terminologie  Adapter =Adaptor  Façade = Fațadă  Decorator  Bridge = Punte  The Principle of Least Knowledge = Principiul cunoașterii minime  The Open-Closed Principle = Principiul deschis-închis Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 4.
    Notă  Programele careimplementează ș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 structurale(I) 1. Adaptorul 2. Fațada 3. Principiul cunoașterii minime 4. Decoratorul 5. Principiul deschis-închis 6. Puntea 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 6.
    6 Adaptoare Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 7.
    7 Adaptoare OO Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 8.
    8 Adaptoare OO Cod neschimbatCod neschimbat Cod nou Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 9.
    9 Exemplul 1 Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 10.
    10 Adaptorul “TurkeyToDuck” Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 11.
    11 Utilizare Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 12.
    12 Diagrama UML Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 13.
    13 Definiție  Șablonul Adaptorconverteș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
  • 14.
    14 Adaptori de obiecteși de clase  Adaptorul de obiecte  Adaptorul de clase Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 15.
    15 Comparație  Adaptorul deobiecte este mai flexibil  Poate adapta nu numai clasa Adaptee, ci și orice clasă derivată a acestuia  Adaptorul de clase este mai eficient  Un singur obiect adaptor vs. două obiecte: un adaptor și un adaptat Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 16.
    16 Exemplul 2 Abordare maiveche Abordare mai nouă Are în plus remove() Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 17.
    17 Exemplul 2 throw newException("The method or operation is not implemented.") Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 18.
    18 Implementare Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 19.
    19 Alte exemple  Structură... Compuși chimici... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 20.
    20 Compuși chimici Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 21.
    Șabloane de proiectare structurale(I) 1. Adaptorul 2. Fațada 3. Principiul cunoașterii minime 4. Decoratorul 5. Principiul deschis-închis 6. Puntea 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 22.
    22 „Cinema la tine-acasă” FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 23.
    23 Vizionarea unui film FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 24.
    24 Vizionarea unui film FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 25.
    25 Fațada Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 26.
    26 Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 27.
    27 Implementare  Constructor...  WatchMovie... EndMovie...  Adăugarea unor funcții noi:  ListenToCd...  EndCd...  ListenToRadio...  EndRadio... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 28.
    28 Definiție  Ș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
  • 29.
    29 Diagrama UML Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 30.
    30 Alte exemple  Structură... Credite ipotecare... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 31.
    Structură 31 Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 32.
    32 Credite ipotecare Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 33.
    33 Discuție  Fațada nunumai că simplifică o interfață, ci și decuplează clientul de subsistemul de componente  Subsistemul poate fi de asemenea accesat direct, fațada nu încapsulează subsistemul  Atât Fațada cât și Adaptorul pot împacheta (pot fi wrappere pentru) una sau mai multe clase  Scopul Adaptorului este să convertească interfața  Scopul Fațadei este să simplifice interfața Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 34.
    Șabloane de proiectare structurale(I) 1. Adaptorul 2. Fațada 3. Principiul cunoașterii minime 4. Decoratorul 5. Principiul deschis-închis 6. Puntea 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 35.
    35 Principiul cunoașterii minime „Vorbește numai cu prietenii imediați”  Se recomandă apelul metodelor numai din:  Obiectul însuși  Câmpurile obiectului  Obiectele primite ca parametri în metode  Obiectele instanțiate în metode Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 36.
    36 Principiul cunoașterii minime Nu se recomandă apelul metodelor din obiectele returnate de alte metode Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 37.
    37 Apeluri admise Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 38.
    38 Fațada și PCM Clientul are o singură dependență („prieten imediat”): fațada  Dacă subsistemul este prea complex și nu respectă PCM, se pot defini fațade suplimentare pentru niveluri succesive din subsistem Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 39.
    Șabloane de proiectare structurale(I) 1. Adaptorul 2. Fațada 3. Principiul cunoașterii minime 4. Decoratorul 5. Principiul deschis-închis 6. Puntea 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 40.
    40 Starbuzz Coffee cost() esteabstract Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 41.
    41 Tipuri de cafeași condimente Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 42.
    42 Abordarea 1 valori boolpentru fiecare condiment cost() nu mai este abstract, ci virtual Calculează costurile determinate de condimente Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 43.
    43 Abordarea 1 Dacă seadaugă sau se elimină unele condimente? Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 44.
    44 Principiul deschis-închis  Claseletrebuie să fie deschise pentru extindere dar închise pentru modificări  Utilizarea principiului introduce de obicei noi niveluri de abstractizare, care cresc complexitatea codului  Compromis: aplicarea în secțiunile cu stabilitate redusă (unde probabilitatea de modificare este ridicată) Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 45.
    45 Decorarea unui obiect FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 46.
    46 Apelul metodei Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 47.
    47 Abordarea 2: decorarea Componenta abstractă Componentele concrete Decoratoriiconcreți Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 48.
    48 Clasele abstracte Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 49.
    49 Clasele concrete Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 50.
    50 Utilizare Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 51.
    51 Definiție  Șablonul Decoratorataș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
  • 52.
    52 Diagrama UML derivarea estefolosită pentru respectarea interfeței compunerea este folosită pentru apelul metodei Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 53.
    53 Alte exemple  Structură... Împrumuturi la bibliotecă...  Butoane decorate... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 54.
    54 Structură Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 55.
    55 Împrumuturi la bibliotecă FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 56.
    56 Butoane decorate Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 57.
    57 Discuție (I)  Decoratoriiau același tip ca și obiectele decorate  Putem trimite ca parametru un obiect decorat în locul obiectului inițial  Decoratorul folosește moștenirea pentru a prelua tipul obiectului decorat și compunerea pentru a-i schimba comportamentul  Se pot utiliza unul sau mai mulți decoratori pentru un obiect  Obiectele pot fi decorate dinamic în momentul execuției  Decoratorul își poate adăuga propriul comportament înainte sau după delegare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 58.
    58 Discuție (II)  Adaptorulpermite utilizarea unor clase fără a modifica nici codul client nici codul țintă; Decoratorul permite adăugarea de noi funcționalități fără modificări în cod  Adaptorul convertește interfețele, Decoratorul nu  Decoratorul schimbă comportamentul, Adaptorul nu  Decoratorii pot fi creați cu șabloanele Fabrică și Constructor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 59.
    Șabloane de proiectare structurale(I) 1. Adaptorul 2. Fațada 3. Principiul cunoașterii minime 4. Decoratorul 5. Principiul deschis-închis 6. Puntea 7. Concluzii Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 60.
    60 Ferestre: motivație Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 61.
    61 Ferestre: motivație  Cândo abstracțiune poate avea mai multe implementări, se utilizează moștenirea pentru acestea  Însă moștenirea leagă o implementare de o abstracțiune în mod permanent, deci este dificil să se modifice, să se extindă și să se reutilizeze în mod independent abstracțiunea și implementările  În exemplul anterior, nu este convenabilă extinderea abstracțiunii Window pentru a acoperi diferite tipuri de ferestre sau platforme  Moștenirea fără o Punte face codul client dependent de platformă Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 62.
    62 Ferestre: soluție Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 63.
    63 Discuție  Abstracțiunea Windowși implementarea ei sunt puse în ierarhii de clase separate  Există o ierarhie de clase pentru interfețele de ferestre și o ierarhie separată pentru implementările specifice ale ferestrelor cu rădăcina WindowImp  Toate operațiile asupra subclaselor Window sunt implementate în termeni de operații abstracte din interfața WindowImp  Se decuplează abstracțiunea fereastră de diferitele implementări specifice platformelor  Relația dintre Window și WindowImp este o Punte Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 64.
    64 Planificarea firelor deexecuție Se mai adaugă o platformă cu planificatori ai firelor de execuție Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 65.
    65 Soluție folosind Puntea Variantainițială Varianta folosind Puntea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 66.
    66 Telecomanda: motivație  Toatetelecomenzile au aceeași abstractizare  Există foarte multe implementări, câte una pentru fiecare tip de televizor Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 67.
    67 Telecomanda: motivație  Problemă:pe lângă schimbările din implementări, vor exista și schimbări în abstractizare Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 68.
    68 Telecomanda: soluție Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 69.
    69 Definiție  Șablonul Puntedecuplează 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
  • 70.
    70 Diagrama UML Florin Leon,Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 71.
    71 Alte exemple  Structură... Clienți de afaceri...  Vizualizări de produse... Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 72.
    72 Structură Florin Leon, Ingineriaprogramarii, http://florinleon.byethost24.com/curs_ip.htm
  • 73.
    73 Clienți de afaceri FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 74.
    74 Vizualizări de produse FlorinLeon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 75.
    75 Exemple din viațareală  Windows  Șablonul Punte permite unui proiectant să furnizeze o interfață simplă pentru abstracțiune și o interfață puternică și complexă pentru implementare  Win32API este interfața abstracțiunii  Limbajul de nucleu (engl. “kernel”) este interfața implementării  Platforma .NET  CIL, C#, Visual Basic, Managed C++ sunt abstracțiuni  MSIL este o implementare  Mono și dotGnu sunt alte implementări Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 76.
    Exemple din viațareală  Vizualizarea listelor de proprietăți ale controalelor .NET este implementată cu șablonul Punte 76 Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 77.
    77 Avantaje și dezavantaje Evitarea legării clienților de o implementare; schimbările de implementare nu afectează clientul  Detaliile de implementare sunt ascunse clientului  Potrivit pentru dezvoltarea pentru platforme diferite  Abstracțiunile și implementările pot fi selectate în momentul execuției  Separarea abstracțiunii de implementare crește complexitatea Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 78.
    78 Discuție  Șablonul Puntedescompune interfața și implementarea unei componente în ierarhii de clase independente  Clasa de interfață conține o referință la clasa de implementare abstractă, referință care este inițializată cu o instanță a clasei de implementare concretă, dar toate interacțiunile ulterioare de la clasa de interfață spre clasa de implementare se limitează la abstracțiunea din clasa de bază de implementare  Clientul interacționează cu clasa de interfață iar cererile sunt delegate către clasa de implementare  Obiectul de interfață este punctul de contact cunoscut și utilizat de către client iar obiectul de implementare este „corpul” încapsulat pentru a-i permite să evolueze sau chiar să fie schimbat complet Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm
  • 79.
    79 Concluzii  Șablonul Adaptorconvertește interfața unei clase în altă interfață pe care o așteaptă clientul  Șablonul Fațadă asigură o interfață unificată la o mulțime de interfețe dintr-un subsistem  Șablonul Decorator atașează responsabilități suplimentare unui obiect în mod dinamic  Ș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