You are on page 1of 8

Projektovanje softvera

Posmatra

Posmatra (1)
Ime i klasifikacija:

Posmatra (engl. Observer) objektni uzorak ponaanja

Namena:

definie 1:n zavisnost izmeu objekata


takvu da kada jedan objekat promeni stanje
svi zavisni se obaveste i modifikuju automatski

Druga imena:

Zavisni objekti, Objavljivanje-Pretplata


(Dependents, Publish-Subscribe)

Posmatra

01.05.2011.

Posmatra (2)
Motivacija:

nije dobro da su klase sistema vrsto-spregnute (smanjuje se reupotrebljivost)


na primer, GUI toolkits razdvajaju prezentacione aspekte od aplikativnih podataka
klase aplikativnih podataka i one za prezentaciju se mogu reupotrebiti nezavisno

objekat za tabelarni prikaz i objekat za histogram mogu prikazati iste podatke


objekat za tabelarni prikaz i objekat za histogram ne znaju jedan za drugog
zbog toga doputaju nezavisnu reupotrebu, a ponaaju se kao da su spregnuti
kada se podaci promene kroz tabelu promeni se i histogram
posmatraci
histogram
pita
tabela
3 : osvezi()

4 : citajStanje()
5 : osvezi()
6 : citajStanje()

1 : promeniStanje()

model
2 : obavesti()
subjekat

Posmatra

01.05.2011.

Posmatra (3)
Motivacija (nastavak):

tabela i histogram su zavisni od modela:


treba ih obavestiti kad model promeni stanje
nema ogranienja u broju zavisnih objekata koje treba obavetavati
kljuni objekti u uzorku su subjekat (subject) i posmatra (observer)
posmatra zavisi od subjekta
subjekat obavetava posmatraa kad promeni stanje
posmatra zatim alje upit subjektu o njegovom stanju
da bi aurirao svoje stanje

uzorak se naziva i Publish-Subscribe


posmatrai se "pretplauju" kod subjekta za obavetenja (notifikaciju)
subjekat alje signal posmatrau (notifikacija)
siganali se alju svim posmatraima i ne znajui ko su sve posmatrai

Posmatra

01.05.2011.

Posmatra (4)
Primenljivost: uzorak treba koristiti u sledeim situacijama:

kada jedna apstrakcija ima barem dva meusobno zavisna apsekta


takva da promena bilo kog utie na promenu drugih
kada izmena jednog objekta zahteva izmenu nepoznatog broja drugih objekata
kada jedan objekat treba da signalizira promenu drugim objektima
ne znajui ko su ti objekti

Struktura:
obavesti(){
for all p in posmatraci
p.osvezi()
}

Subjekat
-posmatraci
+pridruzi()
+razdruzi()
+obavesti()

KonkretanSubjekat
-stanjeSubjekta
+citajStanje()
+menjajStanje()

Posmatrac
+osvezi()

KonkretanPosmatrac

-subjekat

-stanjePosmatraca
1

osvezi(){
stanjePosmatraca:=subjekat.citajStanje()
}

+osvezi()

Posmatra

01.05.2011.

Posmatra (5)
Uesnici:

Subjekat (klasa Model)


zna svoje posmatrae; proizvoljan broj posmatraa moe da nadgleda subjekat
obezbeuje interfejs za pridruivanje i razdruivanje posmatraa

Posmatrac (klasa Prikaz)


definie interfejs za signaliziranje promena subjekta

KonkretanSubjekat (klasa Statistika)


uva stanje od interesa za konkretne posmatrae
omoguava itanje stanja
alje signal posmatraima kada se promeni stanje

KonkretanPosmatrac (klase Tabela, Histogram, Pita)


poseduje referencu na konkretan subjekat (subjekat moe da bude i parametar)
uva stanje koje treba da bude u konzistenciji sa stanjem konkretnog subjekta
implementira operaciju za signaliziranje promene subjekta
ita stanje konkretnog subjekta da bi aurirao sopstveno stanje

Posmatra

01.05.2011.

Posmatra (6)
Saradnja:

konkretan subjekat signalizira svojim posmatraima svaku promenu svog stanja


nakon poziva osvezi, konkretan posmatra trai od subjekta informaciju o stanju

posmatra koristi informaciju o stanju subjekta da aurira svoje stanje

sd uzorak Posmatrac
s : KonkretanSubjekat

p1 : KonkretanPosmatrac

p2 : KonkretanPosmatrac

1 : menjajStanje()
2 : obavesti()
3 : osvezi()
4 : citajStanje()
5 : osvezi()
6 : citajStanje()

Posmatra

01.05.2011.

Posmatra (7)
UML notacija
Model

Subjekat

KonkretanSubjekat
Statistika

Posmatrac
Uzorak Posmatrac

Prikaz

KonkretanPosmatrac
Tabela

Histogram

Pita

Posledice:

dobre strane
apstraktno vezivanje izmeu subjekata i posmatraa;
tako se omoguava da subjekat i posmatra budu u razliitim slojevima aplikacije
podrka sa broadcast komunikaciju; subjekat ne zna identitet posmatraa kojem alje signal

nedostatak:
nepoznata cena promene:
poto posmatrai ne znaju ko e sve dobiti signal, oni nisu svesni cene promene subjekta

Povezani uzorci:

za kapsuliranje kompleksne semantike auriranja


Mediator moe da posreduje izmeu subjekata i posmatraa

Posmatra

01.05.2011.

You might also like