You are on page 1of 30

Arhitektura i projektovanje

softvera
Studijski progam Računarstvo i informatika

- Projektni obrasci 1 -
Katedra za računarstvo
Elektronski fakultet u Nišu

Arhitektura i projektovanje softvera


Prof. dr Dragan Stojanović Računarstvo i informatika
Izvori
Erich Gamma, Richard Helm, Ralph Johnson, John
Vlissides, Design Patterns: Elements of Reusable
Object- Oriented Software, Addison- Wesley © 1995
“Gotova rešenja - Elementi objektno orijentisanog softvera”, prevod
na srpski – CET 2009
E. T Freeman, E. Freeman, B. Bates,
K. Sierra, Head First Design Patterns,
O'Reilly Media‚ 2004.

C. Larman, Applying UML and Patterns: An


Introduction to Object-Oriented Analysis and Design and
Iterative Development, AW Professional, 2004
Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 2
Dodatni izvori
Java
Software Architecture Design Patterns in Java, Partha
Kuchana, AUERBACH; 1 edition (April 22, 2004)
The Design Patterns: Java Companion
http://www.patterndepot.com/put/8/JavaPatterns.htm
Java Design Patterns
http://www.javacamp.org/designPattern/
C#
C# 3.0 Design Patterns, Judith Bishop, O'Reilly Media; (January
11, 2008)
Data & Object Factory - Design patterns
http://www.dofactory.com/Patterns/Patterns.aspx
SourceMaking (C++, C#, Java, Delphi, PHP)
http://sourcemaking.com/design_patterns

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 3
Projektni obrasci
Projektni obrazac (design pattern) predstavlja opšte
rešenje za problem primenljivo u određenom kontekstu
Termin potiče iz arhitekture i urbanizma - Christopher
Alexander
A Pattern Language: Towns, Buildings, Construction, 1977
The Timeless Way of Building, 1979
“Each pattern describes a problem which occurs over and over
again in our environment, and then describes the core solution to
that problem, in such a way that you can use the solution a
million times over, without ever doing it the same way twice.”
Mogu se primeniti u mnogim oblastima čovekovog života i
rada

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 4
Projektni obrasci u razvoju softvera
Predstavlja apstrakciju strukture, komponenti (klasa,
objekata) i njihovih međusobnih veza koja se ponavlja u
projektovanju softvera i generalizuje stečeno iskustvo i
znanje u projektovanju
Obrasci su nezavisni od programskog jezika/grafičke
notacije za projektovanje softvera
Predstavljaju “mikro-arhitekturu”
Integrisani su u postojeće metodologije u razvoju i
projektovanju softvera (RUP, OMT, itd.)
Ne mogu se “mehanički” primeniti
Rešenje definisano obrascem mora biti “prevedeno” u konkretan
oblik u skladu sa kontekstom i domenom primene

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 5
Koristi od projektnih obrazaca
Predstavljaju šablon/preporuku za dobar dizajn
Izvlači se i generalizuje znanje i iskustvo u projektovanju softvera
Pomaže kako početnicima tako i ekspertima u projektovanju
Strukturama u projektovanju se daju eksplicitna imena
Formira se generalni rečnik projektovanja
Smanjuje se kompleksnost u projektovanju
Poboljšava komunikacija između softver inženjera
Poboljšava se razumljivost i dokumentacija
Omogućava se restruktuiranje/refaktorisanje dizajna
Obrasci su međusobno povezani
Postiže se dodatna fleksibilnost u dizajnu

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 6
Katalozi projektnih obrazaca
GoF (“the Gang of Four”) katalog
“Design Patterns: Elements of Reusable Object- Oriented Software,”
Gamma, Helm, Johnson, Vlissides, Addison- Wesley, 1995
POSA katalog
“Pattern-Oriented Software Architecture”, Buschmann, et al., Wiley,
1996
Enterprise katalog
“Patterns of Enterprise Application Architecture”, Martin Fowler,
David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee,
Randy Stafford , Addison Wesley, 2002
GRASP (General Responsibility Assignment Software
Patterns) katalog
“Applying UML and Patterns; An Introduction to Object-Oriented
Analysis and Design and Iterative Development”, 3rd Ed., Craig
Larman, Prentice-Hall, 2005

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 7
GoF projektni obrasci

Oblast (Scope):
nivo na kome je
obrazac primenjen
Klasa
Objekat
Namena
(Purpose):
prikazuje osnovnu
namenu i aktivnost
obrasca
Kreacioni
Strukturni
Bihevioralni

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 8
Klasifikacija GoF projektnih
obrazaca
Namena (Purpose) – šta obrazac treba da radi i koji
generalni problem rešava
Kreacioni obrasci
• Razmatraju proces kreiranja objekata
Strukturni obrasci
• Bave se kompozicijom klasa i objekata
Bihevioralni obrasci
• Bave se interakcijom klasa i objekata
Oblast primene (Scope) – na šta su primenjeni obrasci
Klasni obrasci
• Fokus je na vezama između klasa i njihovih podklasa
• Uključuju reupotrebljivost putem nasleđivanja
Objektni obrasci
• Fokus na vezama između objekata
• Uključuju reupotrebljivost putem kompozicije
Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 9
Elementi projektnog obrasca
Naziv obrasca
Koncizan, smislen naziv obrasca obezbeđuje dobru komunikaciju
između softverskim inženjerima
Problem
Koji je problem i kontekst u kome bi trebalo koristiti obrazac?
Koji su uslovi (preduslovi) koji moraju biti ispunjeni pre nego se
primeni obrazac?
Rešenje
Opis elemenata koji čine projektni obrazac
Definisanje njihovih veza, obaveza i kolaboracije
Ne predstavlja konkretan dizajn ili implementaciju, već apstraktni
opis rešenja
Posledice primene
Prednosti i nedostaci korišćenja obrasca
Uključuje i uticaj obrasca na reupotrebljivost, portabilnost,
proširljivost, itd.
Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 10
Opis projektnog obrasca (1)
Naziv i klasifikacija
Namena
Kratak opis obrasca i njegova namena
Takođe poznat kao
Ostali nazivi koji se koriste za obrazac
Motivacija
Aplikacioni scenario koji ilustruje korišćenje obrasca
Primenljivost
Situacije u kojima je obrazac primenljiv
Struktura
Grafička reprezentacija obrasca korišćenjem UML notacije
Učesnici
Klase i/ili objekti koji učestvuju u obrascu i njihove uloge
Kolaboracija
Kako učesnici u obrascu sarađuju da bi izvršili svoje obaveze/uloge
Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 11
Opis projektnog obrasca (2)
Posledice primene
Rezultat primene, prednosti korišćenja, nedostaci, kompromisi
Implementacija
Saveti za primenu obrasca, tehnike primene, “zamke” prilikom
primene, pitanja zavisna od programskog jezika koje treba imati u
vidu prilikom implementacije obrasca
Primer programskog koda
Primeri implementacije u C++, Java, C#, Smalltalk, C, itd.
Poznate upotrebe
Primeri primene u postojećim softverskim sistemima
Povezani/srodni obrasci
Razmatranje drugih obrazaca koji su povezani sa ovim

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 12
Observer (Bihevioralni)
Svrha
Definiše jedan-na-više zavisnost između objekata tako da kada jedan
objekat promeni svoje stanje, svi objekti koji zavise od njega se
obaveštavaju o tome i automatski ažuriraju
Motivacija
Održavanje konzistentnosti između povezanih objekata

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 13
Observer - Primenljivost
Observer projektni obrazac treba primeniti u nekoj od
sledećih situacija
Kada apstrakcija ima dva aspekta, pri čemu jedan zavisi od drugog.
Enkapsulacijom ovih aspekata u posebne objekte omogućava njihovu
promenljivost i reupotrebljivost nezavisno jednog od drugog
Kada promena u jednom objektu zahteva promene ostalih, pri čemu
se ne zna koliko objekata treba da se promeni
Kada jedan objekat treba da obavesti druge objekte bez potrebe da
zna ili pretpostavlja koji su ti objekti – izbegava se čvrsta sprega
između objekata

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 14
Observer struktura
Struktura (UML notacija)

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 15
Observer - Učesnici
Subject
Vodi evidenciju o svojim observer-ima
Obezbeđuje interfejs za attach-ovanje i detach-ovanje Observer objekata
Observer
Definiše interfejs za notifikaciju zbog ažuriranja
ConcreteSubject
Objekat koji se nadgleda
Čuva stanje koje je od interesa za ConcreteObserver objekte
Šalje notifikaciju svojim observer-ima kada mu se promeni stanje
ConcreteObserver
Objekat koji se nadgleda
Čuva stanje koje treba da ostane konzistentno sa stanjem subjecta
Implementira Observer update interfejs da bi obezbedio očuvanje
konzistentnosti sa stanjem subjecta

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 16
Observer - Kolaboracija

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 17
Observer – Posledice primene
Prednosti
Subject i observer-i mogu nezavisno da se menjaju jedni od drugih
(minimalna sprega subjecta i observer-a) - Modularnost
Može se definisati i u svakom trenutku dodati proizvoljan broj
observer-a bez potrebe da se menja subject - Proširljivost
Različiti observer-i obezbeđuju različite poglede na subject –
Prilagodljivost
Subjekt poznaje samo listu svojih observera, i ne mora da zna klasu
svakog konkretnog observera, dovoljno je da svaki od njih
implementira update interfejs
Nedostaci
Neočekivano ažuriranje: observer-i ne znaju jedan za drugog, pa
mala promena u subjectu može uzrokovati kaskadno ažuriranje
observera i njihovih zavisnih objekata
Jednostavni interfejs update metode, zahteva od observera da sam
zaključi koje promene treba da obavi

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 18
Observer – Implementacija
Asocijacija subjecta i observera – održavanje referenci na observer-e u
subjektu – eksplicitne reference (lančana lista, niz) ili heš tablica
Ukoliko je observer vezan sa više subjekata neophodno je modifikovati
update operaciju da bi se znalo koji subjekt šalje notifikaciju
Ko aktivira ažuriranje observera (notify)?
Subject kad god se njegovo stanje promeni
Observeri nakon što uzrokuju promenu stanja subjecta
Treći objekti
Kada dođe do brisanja subjekta nastaju “viseće” reference na subjekt od
strane observera.
Protokoli za ažuriranje observera – Koliko podataka treba subject da
pošalje observerima o promeni svog stanja (push i pull modeli)
Observerima omogućiti eksplicitno registrovanje modifikacija subjekta
koje su od interesa, tako da samo “zainteresovani” observeri budu
notifikovani o promenama

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 19
Observer – poznati primeri
Primeri korišćenja ovog obrasca u realnim softverskim
sistemima
Smalltalk Model-View-Controller (MVC)
• Model – Subject, View – Observer, Controller bilo koji objekat
koji menja stanje subjecta
Visual C++ MFC (Document – Subject, View – Observer)
Java 1.1 AWT/Swing Event Model
java.util (Observer/Observable)
C# (Delegates/Events)
GUI tolkits, blogovi, mailing liste

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 20
Observer – Primer 1
Razmotrimo ClockTimer, objekat koji čuva i održava vreme
u toku dana. On obaveštava svoje posmatrače (observers)
svake sekunde i obezbeđuje interfejs za dobijanje
vremenskih podataka:

Tick operacija se poziva od strane tajmera i ona ažurira


interno stanje objekta ClockTimer i poziva funkciju Notify da
obavesti observere
Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 21
Observer – Primer 1
DigitalClock je ConcreteObserver

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 22
Observer – Primer 1
Pre iscrtavanja izgleda sata, funkcija Update proverava da li je objekat
koji obaveštava clock objekat:

void DigitalClock::Update (Subject* theChangedSubject) {


if (theChangedSubject == _subject) {
Draw();
}
}

void DigitalClock::Draw () {
// get the new values from the subject
int hour = _subject->GetHour();
int minute = _subject->GetMinute();
// etc.
// draw the digital clock
}

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 23
Observer – Primer 1
Takođe može biti definisana i klasa AnalogClock

class AnalogClock : public Widget, public Observer {


public:
AnalogClock(ClockTimer*);
virtual void Update(Subject*);
virtual void Draw();
// ...
};

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 24
Observer – Primer 1
Mogu se kreirati objekti klasa AnalogClock i DigitalClock koji
pokazuju isto vreme:

ClockTimer* timer = new ClockTimer;


AnalogClock* analogClock = new AnalogClock(timer);
DigitalClock* digitalClock = new DigitalClock(timer);

Pri svakom otkucaju sata (clock tick), oba sata se ažuriraju i


obnavljaju svoj prikaz

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 25
Observer – Primer 2
Weather Monitoring Application
Primer iz knjige: Head First Design Patterns
Weather Station – uređaj koji prima podatke o vremenu
Weather Data Object – objekat koji dobija podatke od Weather
Station i ažurira prikaz tih podataka
Display – prikazuje trenutne vremenske uslove

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 26
Observer – Primer 2
Weather Monitoring Application
Kreirati aplikaciju koja koristi Weather Data Object za
ažuriranje tri vrste prikaza vremenskih uslova: trenutno
vreme, statistika vremenskih uslova i prognoza vremena
Poštovati principe OO projektovanja
Projektovati/programirati rešenje korišćenjem interfejsa, a ne
konkretnih implementacija
Izdvojiti delove koji se menjaju od onih koji ostaju statični
Omogućiti lako dodavanje ili uklanjanje načina prikaza vremenskih
podataka, čak i u vreme izvršenja
Omogućiti kreiranje novog prikaza bez mnogo izmena u kodu

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 27
Observer – Primer 2
Weather Monitoring Application
Implementacija
konkretnog subjecta
WeatherData klasa

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 28
Observer – Primer 2
Weather Monitoring Application
Implementacija konkretnog observera

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 29
Domaći zadatak
Pročitati:
Observer obrazac (strana 293) – GoF knjiga - Design
Patterns: Elements of Reusable Object - Oriented
Software
Poglavlje 2 – Keeping your Objects in the know – Head
First Design Patterns knjiga

Projektni obrasci 1
Prof. dr Dragan Stojanović Arhitektura i projektovanje softvera 30

You might also like