Sunteți pe pagina 1din 78

Ingineria programrii

7. abloane de proiectare structurale (I)


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 (I)


1. Adaptorul 2. Faada 3. Principiul Cunoaterii Minime 4. Decoratorul 5. Principiul Deschis-nchis 6. Puntea 7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Terminologie

Adapter = Adaptor Faade = Faad Decorator Bridge = Punte The Principle of Least Knowledge = Principiul Cunoaterii Minime The Open-Closed Principle = Principiul Deschis-nchis
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 (I)


1. Adaptorul 2. Faada 3. Principiul Cunoaterii Minime 4. Decoratorul 5. Principiul Deschis-nchis 6. Puntea 7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Adaptoare

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

Adaptoare OO

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

Adaptoare OO

Cod neschimbat Cod nou

Cod neschimbat

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

Exemplul 1

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

Adaptorul

TurkeyToDuck

10

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

Utilizare

11

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

Diagrama UML

12

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

Definiie

ablonul Adaptor convertete interfaa unei clase n alt interfa pe care o ateapt clientul. Adaptorul permite s funcioneze mpreun clase care altfel nu ar putea din cauza interfeelor incompatibile.

13

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

Adaptori de obiecte i de clase

Adaptorul de obiecte

Adaptorul de clase

14

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

Comparaie

Adaptorul de obiecte este mai flexibil

Poate adapta nu numai clasa Adaptee, ci i orice clas derivat a acestuia Un singur obiect adaptor vs. dou obiecte: un adaptor i un adaptat

Adaptorul de clase este mai eficient

15

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

Exemplul 2

Abordare mai veche

Abordare mai nou Are n plus remove()

16

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

Exemplul 2

throw new Exception("The method or operation is not implemented.")


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

17

Implementare

18

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

Alte exemple

Structur... Compui chimici...

19

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

Compui chimici

20

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

abloane de proiectare structurale (I)


1. Adaptorul 2. Faada 3. Principiul Cunoaterii Minime 4. Decoratorul 5. Principiul Deschis-nchis 6. Puntea 7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Cinema la tine-acas

22

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

Vizionarea unui film

23

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

Vizionarea unui film

24

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

Faada

25

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

26

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

Implementare

Constructor... WatchMovie... EndMovie... Adugarea unor funcii noi:


ListenToCd... EndCd... ListenToRadio... EndRadio...


27

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

Definiie

ablonul Faad asigur o interfa unificat la o mulime de interfee dintr-un subsistem. Faada definete o interfa de nivel mai nalt care face subsistemul mai uor de utilizat.

28

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

Diagrama UML

29

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

Alte exemple

Structur... Credite ipotecare...

30

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

Structur

31

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

Credite ipotecare

32

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

Discuie

Faada nu numai c simplific o interfa, ci i decupleaz clientul de subsistemul de componente

Subsistemul poate fi de asemenea accesat direct, faada nu ncapsuleaz subsistemul

Att Faada ct i Adaptorul pot mpacheta (pot fi wrappere pentru) una sau mai multe clase

Scopul Adaptorului este s converteasc interfaa Scopul Faadei este s simplifice interfaa
33

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

abloane de proiectare structurale (I)


1. Adaptorul 2. Faada 3. Principiul Cunoaterii Minime 4. Decoratorul 5. Principiul Deschis-nchis 6. Puntea 7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Principiul Cunoaterii Minime

Vorbete numai cu prietenii imediai

Se recomand apelul metodelor numai din:


Obiectul nsui Cmpurile obiectului Obiectele primite ca parametri n metode Obiectele instaniate n metode
35

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

Principiul Cunoaterii Minime

Nu se recomand apelul metodelor din obiectele returnate de alte metode

36

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

Apeluri admise

37

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

Faada i PCM

Clientul are o singur dependen (prieten imediat): faada

Dac subsistemul este prea complex i nu respect PCM, se pot defini faade suplimentare pentru niveluri succesive din subsistem
38

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

abloane de proiectare structurale (I)


1. Adaptorul 2. Faada 3. Principiul Cunoaterii Minime 4. Decoratorul 5. Principiul Deschis-nchis 6. Puntea 7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Starbuzz Coffee

cost() este abstract

40

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

Tipuri de cafea i condimente

41

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

Abordarea 1
valori bool pentru fiecare condiment cost() nu mai este abstract, ci virtual Calculeaz costurile determinate de condimente

42

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

Abordarea 1

Dac se adaug sau se elimin unele condimente?

43

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

Principiul Deschis-nchis

Clasele trebuie s fie deschise pentru extindere dar nchise pentru modificri Utilizarea principiului introduce de obicei noi niveluri de abstractizare, care cresc complexitatea codului

Compromis: aplicarea n seciunile cu stabilitate redus (unde probabilitatea de modificare este ridicat)

44

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

Decorarea unui obiect

45

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

Apelul metodei

46

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

Definiie

ablonul Decorator ataeaz responsabiliti suplimentare unui obiect n mod dinamic. Decoratorii asigur o alternativ flexibil la derivare pentru extinderea funcionalitii.

47

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

Diagrama UML
derivarea este folosit pentru respectarea interfeei
compunerea este folosit pentru apelul metodei

48

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

Abordarea 2: decorarea
Componenta abstract

Componentele concrete Decoratorii concrei


49

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

Clasele abstracte

50

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

Clasele concrete

51

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

Utilizare

52

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

Alte exemple

Structur... mprumuturi la bibliotec... Butoane decorate...

53

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

Structur

54

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

mprumuturi la bibliotec

55

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

Butoane decorate

56

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

Discuie (I)

Decoratorii au acelai tip ca i obiectele decorate

Putem trimite ca parametru un obiect decorat n locul obiectului iniial

Decoratorul folosete motenirea pentru a prelua tipul obiectului decorat i compunerea pentru a-i schimba comportamentul Se pot utiliza unul sau mai muli decoratori pentru un obiect Obiectele pot fi decorate dinamic n momentul execuiei Decoratorul i poate aduga propriul comportament nainte sau dup delegare

57

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

Discuie (II)

Adaptorul permite utilizarea unor clase fr a modifica nici codul client nici codul int; Decoratorul permite adugarea de noi funcionaliti fr modificri n cod

Adaptorul convertete interfeele, Decoratorul nu

Decoratorul schimb comportamentul, Adaptorul nu

Decoratorii pot fi creai cu abloanele Fabric i Constructor

58

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

abloane de proiectare structurale (I)


1. Adaptorul 2. Faada 3. Principiul Cunoaterii Minime 4. Decoratorul 5. Principiul Deschis-nchis 6. Puntea 7. Concluzii
Florin Leon, Ingineria programarii, http://florinleon.byethost24.com/curs_ip.htm

Motivaie (I)

Toate telecomenzile au aceeai abstractizare Exist foarte multe implementri, cte una pentru fiecare tip de televizor

60

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

Motivaie (II)

Problem: pe lng schimbrile din implementri, vor exista i schimbri n abstractizare

61

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

Motivaie (III)

62

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

Motivaie (IV)

Cnd o abstraciune poate avea mai multe implementri, se utilizeaz motenirea pentru acestea

ns motenirea leag o implementare de o abstraciune n mod permanent, deci este dificil s se modifice, s se exind i s se reutilizeze n mod independent abstraciunea i implementrile De exemplu: nu este convenabil extinderea abstraciunii pentru a acoperi diferite tipuri de ferestre sau platforme (abstraciunea Window)

Motenirea fr o Punte face codul client dependent de platform


63

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

Telecomanda: soluie

64

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

Ferestre: soluie

65

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

Discuie

Abstraciunea Window i implementarea ei sunt puse n ierarhii de clase separate

Exist o ierarhie de clase pentru interfeele de ferestre i o ierarhie separat pentru implementrile specifice ale ferestrelor cu rdcina WindowImp

Toate operaiile asupra subclaselor Window sunt implementate n termeni de operaii abstracte din interfaa WindowImp Se decupleaz abstraciunea fereastr de diferitele implementri specifice platformelor Relaia dintre Window i WindowImp este o Punte
66

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

Alt exemplu: planificarea firelor de execuie

Se mai adaug o platform cu planificatori ai firelor de execuie

67

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

Soluie folosind Puntea

Varianta iniial

Varianta folosind Puntea


68

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

Definiie

ablonul Punte decupleaz o abstraciune de implementarea ei, astfel nct cele dou s poat varia n mod independent

69

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

Diagrama UML

70

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

Alte exemple

Structur... Clieni de afaceri... Vizualizri de produse...

71

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

Structur

72

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

Clieni de afaceri

73

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

Vizualizri de produse

74

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

Exemple din viaa real

Windows

ablonul Punte permite unui proiectant s furnizeze o interfa simpl pentru abstraciune i o interfa puternic i complex pentru implementare Win32API este interfaa abstraciunii Limbajul de nucleu (engl. kernel) este interfaa implementrii CIL, C#, Visual Basic, Managed C++ sunt abstraciuni MSIL este o implementare Mono i dotGnu sunt alte implementri
75

Platforma .NET

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

Avantaje i dezavantaje

Evitarea legrii clienilor de o implementare; schimbrile de implementare nu afecteaz clientul Detaliile de implementare sunt ascunse clientului Potrivit pentru dezvoltarea pentru platforme diferite Abstraciunile i implementrile pot fi selectate n momentul execuiei Separarea abstraciunii de implementare crete complexitatea
76

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

Discuie

ablonul Punte descompune interfaa i implementarea unei componente n ierarhii de clase independente Clasa de interfa conine o referin la clasa de implementare abstract, referin care este iniializat cu o instan a clasei de implementare concret, dar toate interaciunile ulterioare de la clasa de interfa spre clasa de implementare se limiteaz la abstraciunea din clasa de baz de implementare

Clientul interacioneaz cu clasa de interfa iar cererile sunt delegate ctre clasa de implementare
Obiectul de interfa este punctul de contact cunoscut i utilizat de ctre client iar obiectul de implementare este corpul ncapsulat pentru a-i permite s evolueze sau s fie chiar schimbat complet
77

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

Concluzii

ablonul Adaptor convertete interfaa unei clase n alt interfa pe care o ateapt clientul

ablonul Faad asigur o interfa unificat la o mulime de interfee dintr-un subsistem


ablonul Decorator ataeaz responsabiliti suplimentare unui obiect n mod dinamic ablonul Punte decupleaz o abstraciune de implementarea ei, astfel nct cele dou s poat varia n mod independent
78

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