Sunteți pe pagina 1din 89

Ingineria programrii

9. abloane de proiectare
comportamentale (Ib)
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
comportamentale (Ib)
1. Observatorul
2. Comanda
3. Lanul Responsabilitilor
4. Mediatorul
5. Memento
6. Concluzii

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

Terminologie

Observer = Observator
Command = Comand
Chain of Responsibility = Lanul Responsabilitilor
Mediator
Memento

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
comportamentale (Ib)
1. Observatorul
2. Comanda
3. Lanul Responsabilitilor
4. Mediatorul
5. Memento
6. Concluzii

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

Staia meteorologic

Apelat automat
cnd valorile se
schimb

Exist mai
multe tipuri de
afiare

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

Abordarea 1

citete ultimele valori

actualizeaz
afirile

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

ablonul Observator

Analogie

Abonaii unui ziar


Ct timp sunt abonai, ei primesc ziarul
Pot renuna la abonament
Ziarul primete continuu cereri de abonare i
dezabonare
Ziarele sunt trimise doar celor abonai

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

Definiie

ablonul Observator definete o dependen


1 la N ntre obiecte, astfel nct n cazul n care un
obiect i schimb starea, vor fi ntiinate i
actualizate automat toate obiectele sale dependente

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

Diagrama de clase

10

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

Diagrama de secvene

11

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

Cuplarea slab

Obiectele care interacioneaz au puine cunotine


unul despre altul

Interdependena dintre obiecte este minimizat

n ablonul Observator

Subiectul este singurul proprietar al datelor caracteristice


ablonului
Subiectul tie doar c observatorii implementeaz o interfa
(Update)
Se pot aduga oricnd noi observatori
Se pot aduga noi tipuri de observatori
Schimbrile din subiect nu afecteaz observatorii i viceversa
12

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

Protocoale specifice

Modelul de extragere (engl. pull)

Subiectul trimite doar o notificare minimal iar


apoi observatorii cer n mod explicit detalii

Update(void) + proprieti sau metode get accesate


de observatori

Modelul de mpingere (engl. push)

Subiectul trimite informaii detaliate despre


schimbare, indiferent dac observatorii au nevoie
sau nu de toate informaiile

Update(informaii)
13

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

Diagrama aplicaiei

14

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

Interfeele

15

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

Alte clase

WeatherData : ISubject
CurrentConditionsDisplay : IObserver, IDisplayElement

16

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

Alte exemple

Structur...
Stocks...
Culori...

17

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

Structur

18

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

Stocks

19

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

Culori

20

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

Discuie

Viteza crete dac subiecii au referine la


observatori. Dac ns muli subieci nu au
observatori, utilizarea memoriei este ineficient.
Se poate folosi o tabel global de perechi
(Subiect, Observator)

Fiecare observator poate specifica aspectele de


care este interesat i va primi notificri i date doar
n legatur cu aceste aspecte
21

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

Discuie

Pot exista multe obiecte simultan subieci i


observatori

Pentru evitarea dependenelor circulare, fiecare


notificare are o etichet temporal (timestamp)

Notificrile care sunt rezultate ale altor notificri


au aceeai etichet

Dac un observator primete o notificare cu aceeai


etichet ca notificarea trimis de el ca subiect, nu mai
continu propagarea

Niciun obiect nu trimite dou notificri separate cu


aceeai etichet temporal
22

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

Discuie

n abordarea GoF, dac relaia dintre subieci i


observatori este foarte complex, poate exista un obiect
intermediar ChangeManager care s gestioneze aceste
interaciuni

Cnd exist mai muli subieci interdependeni,


observatorii trebuie notificai o singur dat dup ce
toi subiecii au finalizat modificrile

Obiectul ChangeManager este un observator pentru c


primete notificri asupra schimbrilor i un subiect
pentru c notific observatorii
23

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

Change Manager

DAG = Directed Acyclic Graph

24

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

Aplicabilitate

ablonul se folosete cnd un obiect trebuie


s reacioneze la schimbrile din alt obiect iar
obiectele trebuie s fie slab cuplate

Evenimentele componentelor interfeei cu


utilizatorul
Evenimente acionate de timp: momente
predeterminate, timere, triggere n baze de date
Model-View-Controller: ntre model i vizualizri

25

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

abloane de proiectare
comportamentale (Ib)
1. Observatorul
2. Comanda
3. Lanul Responsabilitilor
4. Mediatorul
5. Memento
6. Concluzii

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

Telecomanda universal

27

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

Obiectul de comand

28

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

Exemplu de utilizare

29

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

Paii de execuie

30

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

Definiie

ablonul Comand ncapsuleaz o cerere ca


obiect, permind:

parametrizarea clienilor cu diferite cereri (trimiterea


ca parametru a unei funcii ncapsulate ntr-un obiect)

formarea unei cozi de cereri sau stocarea istoricului


acestora (engl. logging)

asigurarea suportului pentru anularea operaiilor


(engl. undo)

31

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

Diagrama de clase

32

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

Diagrama de secvene

33

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

Atribuirea comenzilor

34

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

Implementare

Obiect nul:
elimin necesitatea
unui test pentru null
35

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

Implementare

36

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

Anularea (undo)

37

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

Implementare

38

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

Folosirea strii pentru anulare

39

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

Comenzi macro

40

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

Construirea macro-ului

Party Mode

41

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

Alte exemple

Structur...
Calculator...
Comenzi de anulare...

42

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

Structur

43

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

Calculator

44

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

Comenzi de anulare

45

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

Alte utilizri

Formarea unei cozi de cereri

46

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

Alte utilizri

Stocarea istoricului cererilor (engl. logging)

47

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

Aplicabilitate

Cnd este necesar delegarea rspunsului la


evenimente al unui client de la o clas de invocare
la alt clas ce ncapsuleaz reacia

Cnd trebuie diminuat cuplarea ntre clieni i


obiectele receiver

Pentru ncapsularea codului de tratare a


evenimentelor, de exemplu evenimentele .NET

button.Click += new System.EventHandler(button_Click);

48

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

Discuie

Pentru pstrarea mai multor operaii de anulare,


se poate folosi o stiv de comenzi

Pentru implementarea unei comenzi macro, se


poate folosi o Compunere (engl. Composite)

n cazul n care o comand trebuie copiat


pentru introducerea n lista cronologic, se
poate folosi Prototipul

49

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

abloane de proiectare
comportamentale (Ib)
1. Observatorul
2. Comanda
3. Lanul Responsabilitilor
4. Mediatorul
5. Memento
6. Concluzii

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

Exemplu

51

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

Definiie

ablonul Lanul responsabilitilor evit


cuplarea ntre expeditorul i destinatarul unei
cereri, acordnd mai multor obiecte o ans de
a rezolva cererea. ablonul nlnuie obiectele
destinatar i trece cererea de-a lungul lanului
pn cnd un obiect o rezolv

52

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

Diagrama de clase

53

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

Diagrama de secvene

54

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

Exemple

Structur...
Cereri de cumprare...
Imagini, fiiere i culori...

55

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

Structur

56

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

Cereri de cumprare

57

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

Imagini, fiiere i culori

58

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

Aplicabilitate

Cnd cererea poate fi rezolvat de mai multe


obiecte iar obiectul care o va rezolva nu este
cunoscut a priori

Obiectul care rezolv cererea este stabilit dinamic

Cnd trebuie generat o cerere ctre unul sau mai


multe obiecte, fr a preciza n mod explicit
destinatarul

Cnd mulimea de obiecte care pot rezolva o cerere


trebuie construit dinamic
59

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

Exemplu din lumea real

Servlet-uri Java: doFilter

60

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

Avantaje i dezavantaje

Reduce cuplarea

Expeditorul i destinatarul nu se cunosc explicit

Un obiect nu tie structura lanului

Crete flexibilitatea

Noi responsabiliti pot fi adugate sau unele pot fi eliminate


prin modificarea structurii lanului

Recepia nu este garantat

O cerere poate rmne nerezolvat dac ajunge la sfritul


lanului (dac niciun obiect nu o poate rezolva sau dac lanul
nu este corect configurat)
61

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

Discuie

Lanul Responsabilitilor poate fi aplicat


n conjuncie cu ablonul Compunere
(engl. Composite)

62

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

abloane de proiectare
comportamentale (Ib)
1. Observatorul
2. Comanda
3. Lanul Responsabilitilor
4. Mediatorul
5. Memento
6. Concluzii

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

Exemplu

64

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

Soluie

65

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

Definiie

ablonul Mediator definete un obiect care


ncapsuleaz modul n care interacioneaz
o mulime de obiecte. Acest ablon promoveaz
cuplarea slab, interzicnd obiectelor s fac
referine explicite unul la cellalt i permite
modificarea independent a interaciunilor

66

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

Diagrama de clase

67

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

Diagrama de secvene

68

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

Exemple

Structur...
Camera de chat...
Liste...

69

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

Structur

70

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

Camera de chat

71

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

Liste

72

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

Aplicabilitate

Cnd o mulime de obiecte comunic pe ci


bine definite dar complexe

Interdependenele rezultate nu sunt structurate i


sunt dificil de neles

Cnd este dificil reutilizarea unui obiect


deoarece el refer i comunic cu mai multe
alte obiecte

73

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

Exemplu din lumea real

System.Windows.Forms.Form n .NET

Un formular are multe controale care nu tiu unul de


existena celorlalte

De exemplu: cnd utilizatorul alege un element dintr-un


ListBox, se afieaz un mesaj ntr-un TextBox i se
activeaz un GroupBox

ListBox-ul, TextBox-ul i GroupBox-ul nu comunic


direct, ci prin intermediul Form-ului

74

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

Avantaje i dezavantaje

Decupleaz colegii

Simplific protocoalele de comunicare ntre


obiecte

Abstractizeaz modul de cooperare dintre obiecte

Centralizeaz controlul

God object

75

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

Discuie

Faada abstractizeaz un subsistem n mod


unidirecional. Mediatorul permite colaborarea
obiectelor i acioneaz multidirecional

Colegii pot s comunice cu mediatorul folosind


ablonul Observator

Obiectul ChangeManager din ablonul


Observator este un Mediator i poate fi
Singleton

76

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

abloane de proiectare
comportamentale (Ib)
1. Observatorul
2. Comanda
3. Lanul Responsabilitilor
4. Mediatorul
5. Memento
6. Concluzii

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

Exemplu

Salvarea strii unui joc

78

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

Definiie

ablonul Memento captureaz i exteriorizeaz


starea intern a unui obiect fr a viola
ncapsularea, astfel nct obiectul s poat fi
readus ulterior la respectiva stare

79

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

Diagrama de clase

80

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

Diagrama de secvene

81

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

Exemple

Structur...
Vnzri...
Dreptunghiuri...

82

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

Structur

83

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

Vnzri

84

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

Dreptunghiuri

85

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

Aplicabilitate

Cnd trebuie salvat un instantaneu al strii unui


obiect (sau al unei poriuni din stare), astfel nct
acesta s poat fi readus ulterior la acea stare

Cnd o interfa direct pentru obinerea strii


ar expune detaliile implementrii i ar viola
ncapsularea obiectului

86

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

Avantaje i dezavantaje

Pstreaz limitele ncapsulrii


Simplific obiectul Originator

Obiectul nu mai trebuie s rein el nsui istoricul


strilor

Utilizarea Memento-urilor poate fi costisitoare

Copierea unui volum mare de date

87

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

Discuie

O Comand poate utiliza obiecte Memento


pentru operaiile de anulare (engl. undo)
Obiectele Memento pot fi manipulate cu
ajutorul unui Iterator

88

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

Concluzii

Observatorul permite ca un obiect s notifice alte obiecte


atunci cnd se produc modificri n starea sa intern
Comanda este un obiect-funcie care ncapsuleaz
apelul unei metode din alt obiect
Lanul Responsabilitilor ncearc rezolvarea unei cereri
cu ajutorul unui numr necunoscut n mod explicit de
obiecte
Mediatorul ncapsuleaz protocolul de comunicare al
obiectelor
Memento reprezint starea intern a unui obiect la un
anumit moment de timp
89

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

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