sabloane de proiectare : observer

36
Sabloane de proiectare: Observer Cosmin Varlan Cosmin Vârlan http://www.infoiasi.ro/~flash/ prezentari_cerc 1

Upload: adli

Post on 21-Jan-2016

96 views

Category:

Documents


3 download

DESCRIPTION

Sabloane de proiectare : Observer. Cosmin Varlan. PE 22 VINE ADOBE :D. VESTEA BUNA:. Ne usureaza viata …. Ne ajuta sa organizam mai bine treaba Putem sa intelegem “ mai bine ” OOP Uneori pot reduce oridunl de complexitate al problemei …. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Sabloane  de  proiectare : Observer

1

Sabloane de proiectare:Observer

Cosmin Varlan

Cosmin Vârlan

http://www.infoiasi.ro/~flash/prezentari_cerc

Page 2: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

2

VESTEA BUNA:

PE 22 VINE ADOBE :D

Cosmin Vârlan

Page 3: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

3

Sabloane de proiectare (design patterns)

• Ne usureaza viata….• Ne ajuta sa organizam mai bine treaba• Putem sa intelegem “mai bine” OOP• Uneori pot reduce oridunl de complexitate al

problemei….• … sau fac definitiile obietelor mai usor de

inteles…

Cosmin Vârlan

Page 4: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

4

Sabloane de proiectare Sabloane… Sabloane… Sabloane…

Strategy Adapter Proxy

Decorator Facade Command

Factory Template Mediator

Observer Builder Model-View-Controller

Chain of responsibility Iterator Recycle Bin

Singleton Composite The Circular

Fly Weight State Bridge

Cosmin Vârlan

… si multe altele….

Page 5: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

5

Recomandare:

Cosmin Vârlan

Da, o gasiti si pe torente…

Page 6: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

6

Sabloane de proiectare Sabloane… Sabloane… Sabloane…

Strategy Adapter Proxy

Decorator Facade Command

Factory Template Mediator

Observer Builder Model-Viwev-Controller

Chain of responsibility Iterator Recycle Bin

Singleton Composite The Circular

Fly Weight State Brydge

Cosmin Vârlan

Despre asta vom vorbi azi…

Page 7: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

7

Problema:

• Ionel, Maria, Gigel si Ioana sunt foarte interesati de ActionScript. Ei vor sa afle cand va apare noua versiune a flexului, cea care incorporeaza noile facilitati ale Flash Playerului 10 (3D, engine nou pentru formatarea textului, pixelBenders si multe altele).

Cosmin Vârlan

Page 8: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

8

Problema:

• Ca sa afle, ei intra zilnic pe situl Adobe, chiar de doua ori pe zi sau in cazul Ioanei care e super-maniaca de AS3 de trei ori.

• Adobe s-a saturat sa faca trafic mereu si mereu spre aceleasi persoane si din cauza asta vine cu o solutie:….

Cosmin Vârlan

Page 9: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

9

Problema - solutia:

• Hai ca va zic eu cand apare flexul ala, dati-mi voi adresele voastre de mail si cand o apare va trimiti cate un mail la fiecare.

Cosmin Vârlan

Page 10: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

10

Observer…

• In exemplul dat, Ionel, Maria, Gigel si Ioana (nu neaparat in ordinea asta) sunt observatori. Ei se “inregistreaza” intr-un fel la entitatea pe care vor sa o interogheze (si pentru care vor sa afle cand i s-a modificat o anumita proprietate) .

• Obiectul observat se numeste “Subject”• Obiectele care observa se numesc “Observers”

Cosmin Vârlan

Page 11: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

11

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Salut, eu sunt obiectul Subject

Page 12: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

12

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Am o proprietate interesanta:

culoare (RGB)

Page 13: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

13

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Obiectele din dreapta sunt

cele interesate de culoarea

mea

Page 14: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

14

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Atunci cand imi schimb culoarea, le

transmit si ei isi vor

schimba culoarea

pentru a fi ca mine

Because I’m cool

Page 15: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

15

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Sa imi schimb culoarea

Page 16: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

16

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Am o proprietate de

tip Array in care pastrez

referinte catre observatorii

mei…

Page 17: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

17

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Pentru fiecare obiect din Array ii voi transmite

noua culoare.

Page 18: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

18

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Page 19: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

19

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

OK

OK

OK

Page 20: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

20

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Momentan Array-ul cu referinte este:

Observatori = {Cerc, Patrat, Pentagon}

Page 21: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

21

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Vreau si eu sa fiu Cool (ca tine).

Cerc.register(“me”)….

Page 22: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

22

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Ok…Observatori.push(stea);

Page 23: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

23

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Page 24: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

24

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

Page 25: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

25

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

OK, ai devenit prea mandru, nu te mai

plac, Cerc.unregister(“me”)

Page 26: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

26

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

OK, DeleteFromList(“pentagon”)

Page 27: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

27

Pasii “de urmat” pentru a deveni un observer:

Cosmin Vârlan

… color changing ….

Page 28: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

28

Cum se realizeaza ?

• Pentru a putea inregistra / elimina observeri, obiectul Subject trebuie sa posede cate o functie ce va fi apelata de observatori (posibili sau existenti).

• In obiectul-subiect trebuie sa existe un Array ce va contine referinte catre obiectele inregistrate.

• register va adauga o referinta, • unregister va elimina o referinta

Cosmin Vârlan

Page 29: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

29

Cum se realizeaza ?

• Daca obiectele - observatori sunt heterogene, ar fi bine sa implementeze o interfata : sa primeasca toti modificarea prin aceeasi functie.. “receiveData”

Cosmin Vârlan

Page 30: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

30

Subiectul:

• Interfata cu: - registerObject() - unregisterObject() - notifyObservers()

Eventual (vedem acusi de ce): - getState(); - setStateCosmin Vârlan

Page 31: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

31

Observerul:

• Interfata cu: - update

Cosmin Vârlan

Page 32: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

32

O alta idee… (Java - like)

• De ce sa trimite fortat datele catre observatori?• Am putea mai degraba doar sa informam

observatorii ca o proprietate s-a schimbat si sa facem acea proprietate disponibila printr-un getter. Daca Observerul este interesat, va prelua singur informatia (interesant cand sunt multe proprietati ce pot fi modificate)

• De asta aveam nevoie de getState / setState de mai sus.

Cosmin Vârlan

Page 33: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

33

Problema:

• Avem un numar mare de buline (400) care se “plimba“ intr-un plan.

• Cu cat o bulina are mai multi vecini cu atat va fi mai mare (schimbam diamentrul in functie de distanta: de exemplu la diametrul bulinei curente se adauga 1/(distanta*10) dintre ea si toate celelalte buline).

• De la o anumita valoare incolo nu mai conteaza (de exemplu daca distanta este mai mare ca 20, diametrul se va mari cu 1/200 - insignifiant)

Cosmin Vârlan

Page 34: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

34

Problema:

• Ar fi ok daca am imparti planul 2D in patrate cu latura de 20px si de fiecare data cand un punct intra intr-un patrat, se inregistreaza acelui patrat.

• Cat timp este in patrat primeste notificari de la acesta cu lista obiectelor care se mai afla in patrat

• In functie de aceasta lista, va reduce numarul calculelor de la 400 la numarul pnctelor din patrat.

Cosmin Vârlan

Page 35: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

35

Problema:

• Atunci cand iese din patrat, face unregister si face register la noul patrat (desi aici ar fi bine sa faca unregister/register) din doua in doua patrate (adica sa se inregistreze in patratul curent si in patratele adiacente).

• Motivul este ca daca trece dintr-un patrat aglomerat intr-unul gol se stinge prea brusc.

• Se asteapta implementatori

Cosmin Vârlan

Page 36: Sabloane  de  proiectare : Observer

http://www.infoiasi.ro/~flash/prezentari_cerc

36

NU UITATI !!!

PE 22 VINE ADOBE :DFiti prezenti……

Cosmin Vârlan