20
1 UVOD U OBJEKTNO-ORIJENTISANU TEHNOLOGIJU Objektna orijentacija Svuda oko nas u realnom svijetu su objekti (ljudi, životinje, automobili, kuće, igračke, računari...) Ljudi i razmišljaju o svijetu oko sebe objektno orijentisano – stvari zamišljamo i sjećamo ih se u obliku objekata (sa odgovarajućim karakteristikama), a ne u obliku skupa obojenih pojedinačnih tačaka. Fantastična moć apstrakcije ljudskog uma prirodnijim čini sliku plaže od pojedinačnih zrna prijeska koji je čine, ili šume a ne pojedinačnih stabala, ili npr. prelijepe kućice a ne svake pojedinačne ciglice ili crijepa... Bez obzira da li su objekti oko nas živi ili neživi, pokretni ili nepokretni – svi oni imaju neke karakteristike: – obilježja ili atribute – npr. boja, veličina, oblik, težina i sl. – odgovarajuće ponašanje – npr. beba može da spava, plače, sisa... – npr. automobil može da se ubrzava, usporava, sudara... – npr. lopta može da se kotrlja, skače, rotira... Ljudi uče o objektima analizirajući njihove atribute i njihovo ponašanje (različiti objekti mogu imati više- manje slične atribute i više-manje se slično ponašati). Lako se uspostavljaju i uočavaju sličnosti između čimpanze i čovjeka npr. ili voza, automobila i skateboarda, npr. Proceduralno programiranje Paradigma proceduralnog programiranja koncentriše se na procedure – niz akcija. Ovo je suprotno čovjekovom poimanju realnog svijeta. Programiranje u jeziku C Proceduralno – algoritamski orjentisano – akcijski orjentisano Jedinica programiranja – funkcija Programeri se koncentrišu na pisanje funkcija, funkcije se grupišu u program Podaci nisu primarni, oni su u funkciji podrške akcijama koje funkcije izvode Glagoli su ti koji određuju šta sistem radi i koji će to sistem funkcija biti implementiran Instance ugrađenih tipova (npr. int, char i sl.) nazivaju se promjenljive (varijable) Objektno-orijentisano programiranje (OOP) Paradigma OOP koncentriše se na objekte i prilagođena je čovjekovom poimanju realnog svijeta. OOP omogućava prirodniji i intuitivniji način posmatranja i modelovanja realnog svijeta – međusobno povezanih objekata sa pripadajućim atributima i ponašanjem. OOP enkapsulira (objedinjava) atribute (podatke) i ponašanje (funkcije) objekata u jedinstvenu cjelinu. Objekti imaju sposobnost skrivanja informacija (information hiding) – iako objekti mogu međusobno da komuniciraju kroz odgovarajuće interfejse, normalno ne znaju kako su drugi objekti realizovani jer su detalji implementacije skriveni. Npr. ne moramo znati kako radi dizel motor (a najvjerovatnije i ne znamo) da mogli da vozimo automobil. Programiranje u jeziku C++ Objektno orijentisano Jedinica programiranja – klasa (na osnovu koje se kreiraju objekti kao instance klase) Programeri se koncentrišu na kreiranje vlastitih tipova podataka – KLASE Imenice su te koje specificiraju sistem (imenice određuju klase) Svaka klasa sadrži podatke i funkcije za manipulaciju podacima Podaci koji se nalaze u klasi nazivaju se podaci članice (data members) Funkcije koje se nalaze u klasi nazivaju se funkcije članice (metode) Instance korisnički definisanih tipova (klasa) nazivaju se objekti

Objektna orijentacija

Embed Size (px)

Citation preview

Page 1: Objektna orijentacija

1

UVOD U OBJEKTNO-ORIJENTISANU TEHNOLOGIJU

Objektna orijentacija Svuda oko nas u realnom svijetu su objekti (ljudi, životinje, automobili, kuće, igračke, računari...) Ljudi i razmišljaju o svijetu oko sebe objektno orijentisano – stvari zamišljamo i sjećamo ih se u obliku objekata (sa odgovarajućim karakteristikama), a ne u obliku skupa obojenih pojedinačnih tačaka. Fantastična moć apstrakcije ljudskog uma prirodnijim čini sliku plaže od pojedinačnih zrna prijeska koji je čine, ili šume a ne pojedinačnih stabala, ili npr. prelijepe kućice a ne svake pojedinačne ciglice ili crijepa... Bez obzira da li su objekti oko nas živi ili neživi, pokretni ili nepokretni – svi oni imaju neke karakteristike:

– obilježja ili atribute – npr. boja, veličina, oblik, težina i sl. – odgovarajuće ponašanje – npr. beba može da spava, plače, sisa... – npr. automobil može da se ubrzava, usporava, sudara... – npr. lopta može da se kotrlja, skače, rotira...

Ljudi uče o objektima analizirajući njihove atribute i njihovo ponašanje (različiti objekti mogu imati više-manje slične atribute i više-manje se slično ponašati). Lako se uspostavljaju i uočavaju sličnosti između čimpanze i čovjeka npr. ili voza, automobila i skateboarda, npr.

Proceduralno programiranje Paradigma proceduralnog programiranja koncentriše se na procedure – niz akcija. Ovo je suprotno čovjekovom poimanju realnog svijeta.

Programiranje u jeziku C Proceduralno – algoritamski orjentisano – akcijski orjentisano Jedinica programiranja – funkcija Programeri se koncentrišu na pisanje funkcija, funkcije se grupišu u program Podaci nisu primarni, oni su u funkciji podrške akcijama koje funkcije izvode Glagoli su ti koji određuju šta sistem radi i koji će to sistem funkcija biti implementiran Instance ugrađenih tipova (npr. int, char i sl.) nazivaju se promjenljive (varijable)

Objektno-orijentisano programiranje (OOP) Paradigma OOP koncentriše se na objekte i prilagođena je čovjekovom poimanju realnog svijeta. OOP omogućava prirodniji i intuitivniji način posmatranja i modelovanja realnog svijeta – međusobno povezanih objekata sa pripadajućim atributima i ponašanjem. OOP enkapsulira (objedinjava) atribute (podatke) i ponašanje (funkcije) objekata u jedinstvenu cjelinu. Objekti imaju sposobnost skrivanja informacija (information hiding) – iako objekti mogu međusobno da komuniciraju kroz odgovarajuće interfejse, normalno ne znaju kako su drugi objekti realizovani jer su detalji implementacije skriveni. Npr. ne moramo znati kako radi dizel motor (a najvjerovatnije i ne znamo) da mogli da vozimo automobil.

Programiranje u jeziku C++ Objektno orijentisano Jedinica programiranja – klasa (na osnovu koje se kreiraju objekti kao instance klase) Programeri se koncentrišu na kreiranje vlastitih tipova podataka – KLASE Imenice su te koje specificiraju sistem (imenice određuju klase) Svaka klasa sadrži podatke i funkcije za manipulaciju podacima Podaci koji se nalaze u klasi nazivaju se podaci članice (data members) Funkcije koje se nalaze u klasi nazivaju se funkcije članice (metode) Instance korisnički definisanih tipova (klasa) nazivaju se objekti

Page 2: Objektna orijentacija

2

Objektno-orijentisana analiza i dizajn (OOAD) Pisanje većih OO programa nije lako baš lako "iz ruke", jednostavno kucanjem koda "iz glave". Praksa pokazuje da je za razvoj softvera neophodna dobra i kvalitetna analiza domena i dizajn ciljnog sistema. Ako je to OO onda govorimo o OOAD. OOAD je termin kojim se označava proces kojim se analizira problem i razvija OO pristup za njegovo rješavanje. Mnogo je metodologija razvijeno da bi se postigla što uspješnija OOAD.

Od posebnog značaja je UML (Grady Booch, James Rumbaugh, Ivar Jacobson – 90ih godina prošlog vijeka), kao jedinstveni jezik modelovanja koji ima veoma bogatu OO (ali ne samo OO) notaciju.

Page 3: Objektna orijentacija

3

CASE STUDY – SIMULACIJA LIFTA

Cilj: Ovladati OOAD (UML) na nekom realnom primjeru. 1. PROBLEM Neka kompanija namjerava da gradi dvospratnu zgradu koji želi opremiti odgovarajućim liftom. Prije toga, cilj im je da razviju u C++ OO softverski simulator koji treba da im pomogne u odluci da li će lift zadovoljiti njihove potrebe.

Simulator treba da ima sat - displej koji pokazuje vrijeme rada u sekundama.

Simulator treba da ima ugrađen mehanizam (dispečer) koji može slučajno da definiše dva trenutka: Trenutak 1: neka osoba na prvom spratu poziva lift (proizvoljan trenutak – cijeli broj 5-20) Trenutak 2: neka osoba na drugom spratu poziva lift (proizvoljan trenutak – cijeli broj 5-20)

U trenutku kad vrijeme rada simulatora dostigne trenutak 1, simulator treba da kreira osobu koja dolazi do lifta i pritišće dugme za poziv lifta (moguće je da obje osobe u istoj sekundi pozovu lift). Kad osoba pritisne dugme – ono zasvijetli kao indikator da je lift pozvan (indikacija se automatski uključuje).

Lift počinje dan čekajući zatvorenih vrata na spratu 1. Da bi se štedjela energija, lift se kreće samo kad je potrebno. Sa prvog sprata lift može da se kreće gore, a sa drugog sprata da se kreće dolje. Radi jednostavnosti, lift ima kapacitet maksimalno jedne osobe.

Simulator prije nego kreira osobu na nekom spratu, provjerava da li već postoji osoba na tom spratu. Ako osoba ne postoji, kreira novu osobu. Ako osoba vec postoji – odgađa se kreiranje nove osobe za jednu sekundu (liftu se daje prilika da "pokupi" osobu i očisti sprat). Nakon kreiranja osobe, simulator će slučajno definisati novo vrijeme (5-15 sekundi) nakon kojeg će se pojaviti nova osoba na spratu.

Kad lift dođe na neki sprat, unutar lifta se oglasi zvonce. Na tom spratu se resetuje dugme kojim je lift pozvan i automatski isključuje svjetlosna indikacija poziva. Iznad ulaza u lift pali se svjetlo i vrata lifta automatski otvaraju. Ako je liftom došla neka osoba ona izlazi iz lifta. Ako neka osoba već čeka lift, ona ulazi u lift nakon što osoba koja je došla liftom izađe iz lifta.

Osoba koja uđe u lift, pritišće dugme (automatski se uključuje svjetlosna indikacija) kojim saopštava da je spremna. Zatvaraju se vrata i lift kreće. Kad se lift zaustavi, isključiće se svjetlosna indikacija.

Kad lift dođe na sprat (dovezao je osobu), a na tom spratu ne postoji osoba koja želi na drugu etažu (nije bilo poziva), vrata lifta se zatvaraju, a lift ostaje na tom spratu sve dok se ne pojavi neki poziv.

Radi jednostavnosti, treba pretpostaviti da je ukupno vrijeme od trenutka kad se lift zaustavi na nekom spratu (otvaranje vrata, izlazak osobe iz lifta, ulazak druge osobe, zatvaranje vrata) jednako nuli. Ovo nije realno, ali pojednostavljuje problem.

Pretpostaviti da se lift kreće pet sekundi između dvije etaže.

Simulator preduzima radnje svake sekunde (da li treba kreirati novu osobu, da li lift treba da se zaustavi, da li treba krene i sl.).

Simulator treba na displeju da prikazuje aktivnosti koje se dešavaju u sistemu. To podrazumijeva poruke da je npr. osoba pritisnula dugme na spratu, da je lift stigao na sprat, da je osoba ušla u lift, podatak o trenutnom vremenu, kao što slijedi u nastavku.

Cilj: REALIZOVATI SIMULATOR KOJI USPJEŠNO MODELUJE OVAJ REALNI SISTEM.

Page 4: Objektna orijentacija

4

Unesite ukupno vrijeme rada simulatora: 25 (osoba 1 se na spratu 1 u trenutku 5) (osoba 2 se na spratu 2 u trenutku 13) *** POCETAK SIMULACIJE *** T: 1 LIFT : STOJI NA SPRATU 1 T: 2 LIFT : STOJI NA SPRATU 1 T: 3 LIFT : STOJI NA SPRATU 1 T: 4 LIFT : STOJI NA SPRATU 1 T: 5 OSOBA 1 : KREIRANA (nova osoba biće u T:16) OSOBA 1 : PRITISCE DUGME NA SPRATU 1 SPRAT 1 : POZIVA LIFT LIFT : RESETUJE SVOJE DUGME LIFT : UKLJUČUJE SE ZVONCE SPRAT 1 : RESETUJE SE DUGME SPRAT 1 : PALI SE SVJETLO LIFT : OTVARAJU SE VRATA NA SPRATU 1 OSOBA 1 : ULAZI U LIFT NA SPRATU 1 OSOBA 1 : PRITISCE DUGME U LIFTU SPRAT 1 : GASI SE SVJETLO LIFT : ZATVARAJU SE VRATA NA SPRATU 1 LIFT : POCINJE KRETANJE PREMA SPRATU 2 (stize u 10) T: 6 LIFT : KRECE SE NAVISE T: 7 LIFT : KRECE SE NAVISE T: 8 LIFT : KRECE SE NAVISE T: 9 LIFT : KRECE SE NAVISE T: 10 LIFT : DOLAZI NA SPRAT 2 LIFT : RESETUJE SVOJE DUGME LIFT : UKLJUČUJE SE ZVONCE SPRAT 2 : RESETUJE SE DUGME SPRAT 2 : PALI SE SVJETLO LIFT : OTVARAJU SE VRATA NA SPRATU 2 OSOBA 1 : IZLAZI IZ LIFTA NA SPRATU 2 SPRAT 2 : GASI SE SVJETLO LIFT : ZATVARAJU SE VRATA NA SPRATU 2 LIFT : STOJI NA SPRATU 2 T: 11 LIFT : STOJI NA SPRATU 2 T: 12 LIFT : STOJI NA SPRATU 2 T: 13 OSOBA 2 : KREIRANA (nova osoba biće u T:31) OSOBA 2 : PRITISCE DUGME NA SPRATU 2 SPRAT 2 : POZIVA LIFT LIFT : RESETUJE SVOJE DUGME LIFT : UKLJUČUJE SE ZVONCE SPRAT 2 : RESETUJE SE DUGME

SPRAT 2 : PALI SE SVJETLO LIFT : OTVARAJU SE VRATA NA SPRATU 2 OSOBA 2 : ULAZI U LIFT NA SPRATU 2 OSOBA 2 : PRITISCE DUGME U LIFTU SPRAT 2 : GASI SE SVJETLO LIFT : ZATVARAJU SE VRATA NA SPRATU 2 LIFT : POCINJE KRETANJE PREMA SPRATU 1 (stize u 18) T: 14 LIFT : KRECE SE NANIZE T: 15 LIFT : KRECE SE NANIZE T: 16 OSOBA 3 : KREIRANA (nova osoba biće u T:28) OSOBA 3 : PRITISCE DUGME NA SPRATU 1 SPRAT 1 : POZIVA LIFT LIFT : KRECE SE NANIZE T: 17 LIFT : KRECE SE NANIZE T: 18 LIFT : DOLAZI NA SPRAT 1 LIFT : RESETUJE SVOJE DUGME LIFT : UKLJUČUJE SE ZVONCE SPRAT 1 : RESETUJE SE DUGME SPRAT 1 : PALI SE SVJETLO LIFT : OTVARAJU SE VRATA NA SPRATU 1 OSOBA 2 : IZLAZI IZ LIFTA NA SPRATU 1 OSOBA 3 : ULAZI U LIFT NA SPRATU 1 OSOBA 3 : PRITISCE DUGME U LIFTU SPRAT 1 : GASI SE SVJETLO LIFT : ZATVARAJU SE VRATA NA SPRATU 1 LIFT : POCINJE KRETANJE PREMA SPRATU 2 (stize u 23) T: 19 LIFT : KRECE SE NAVISE T: 20 LIFT : KRECE SE NAVISE T: 21 LIFT : KRECE SE NAVISE T: 22 LIFT : KRECE SE NAVISE T: 23 LIFT : DOLAZI NA SPRAT 2 LIFT : RESETUJE SVOJE DUGME LIFT : UKLJUČUJE SE ZVONCE SPRAT 2 : RESETUJE SE DUGME SPRAT 2 : PALI SE SVJETLO LIFT : OTVARAJU SE VRATA NA SPRATU 2 OSOBA 3 : IZLAZI IZ LIFTA NA SPRATU 2 SPRAT 2 : GASI SE SVJETLO LIFT : ZATVARAJU SE VRATA NA SPRATU 2 LIFT : STOJI NA SPRATU 2 T: 24 LIFT : STOJI NA SPRATU 2 T: 25 LIFT : STOJI NA SPRATU 2 *** KRAJ SIMULACIJE ***

Page 5: Objektna orijentacija

5

2. ANALIZA I DIZAJN SISTEMA Koristićemo pojednostavljenu UML notaciju za razumijevanje koncepata OOAD.

Kad govorimo o simulaciji, podrazumijevamo dva aspekta :

1. aspekt: elementi koji pripadaju sistemu koji simuliramo (lift, spratovi, dugmad, svjetla...)

2. aspekt: elementi koji nam trebaju da bi mogli simulirati sistem (sat, dispečer zadataka)

Prva faza u realizaciji sistema je analiza domena.

Cilj ove faze je formiranje liste zahtjeva koje treba da zadovolji ciljni sistem.

Identifikacija zahtjeva vrši se intervjuisanjem lica koja žele da grade dati sistem, intervjuisanjem lica koja će ga koristiti i sl.

Zahtjevi su osnova za dizajn (projektovanje). Treba da tačno kažu šta sistem treba da radi.

Dizajn je faza u kojoj će se na osnovu zahtjeva definisati kako će sistem da radi.

Use Case dijagrami

UML nudi dijagrame slučajeva upotrebe (use case diagram) da bi se obavila specifikacija zahtjeva.

Ovdje se modeluju interakcije sistema i vanjskih klijenata (učesnika) kroz slučajeve upotrebe.

Slučaj upotrebe (use case) je neka konkretna aktivnost ili funkcija kojom sistem stvara učesniku neku konkretnu prepoznatljivu vrijednost. (npr. podizanje gotovine na bankomatu, provjera stanja na računu, slanje SMS poruke, i sl.). UML simbol za slučaj upotrebe i primjeri:

slučaj upotrebe

podizanje gotovoine

Provjera stanja na računu

Slanje SMS poruke

Slučajevi upotrebe u našem sistemu nisu brojni. Imamo samo vožnju liftom kao slučaj upotrebe! Treba paziti da nije svaka konkretna aktivnost u sistemu

slučaj upotrebe! Nije poziv lifta slučaj upotrebe, jer nije poziv sam sebi cilj, nego samo jedna od aktivnosti u vožnji liftom!!!

vožnja liftom

Učesnici (actors) su najčešće eksterni objekti ili sistemi koji koriste dati sistem.

Učesnici u našem sistemu su osobe koje će koristiti lift. Mi smo ih nazvali osobe. UML simbol za učesnika:

Osoba

Dijagram slučajeva upotrebe u našem sistemu:

Osoba

vožnja liftom

LIFT

U većim sistemima, broj slučajeva upotrebe ide i do nekoliko stotina ili čak hiljada.

Page 6: Objektna orijentacija

6

IDENTIFIKOVANJE KLASA U SISTEMU

Da bi se identifikovale klase u sistemu, treba u eseju koji opisuje sistem (slučaj upotrebe) pronaći sve imenice. Najčešće su to klase (ili instance neke klase) koje treba da se realizuju.

U našem primjeru lifta mogu se identifikovati sljedeće imenice: KOMPANIJA ZGRADA LIFT SIMULATOR SAT

VRIJEME TRENUTAK DISPEČER OSOBA SPRAT

DUGME NA SPRATU VRATA LIFTA ZVONCE LIFTA SVJETLO NA SPRATU itd.

Nisu sve jednako značajne. Neke su i beznačajne za dati simulator, npr. kompanija, simulator, energija…

Za simulaciju nam nije potrebna KOMPANIJA kao klasa. Takođe, SIMULATOR će biti naš program, a ne neka pojedinačna klasa. VRIJEME je samo jedno od obilježja našeg sata i ne treba ga posmatrati kao zasebnu klasu. ENERGIJA nije predmet simulacije, pa u konkretnom slučaju ne treba kao zasebna klasa...

Za našu simulaciju sve imenice bi mogli svrstati u sljedeće kategorije: ZGRADA LIFT SAT

DISPEČER OSOBA SPRAT

DUGME NA SPRATU DUGME U LIFTU ZVONCE

SVJETLO VRATA

Identifikovane kategorije pogodne su kao klase koje treba implementirati u sistemu.

Imaju dva dugmeta. Oni jesu dugmad, ali svojim funkcija u sistemu se razlikuju pa su zato razdvojeni.

Nakon identifikacije značajnih objekata u sistemu možemo modelovati klase na osnovu identifikovanih kategorija. Prvo treba odrediti nazive klasa. Prema konvenciji, prvo slovo u nazivu klase je veliko a ostala slova mala. U slučaju naziva sa više riječi, pišemo ih zajedno a početno slovo svake riječi stavljamo veliko:

Zgrada Lift Sat

Dispecer Osoba Sprat

DugmeSprat DugmeLift Zvonce

Svjetlo Vrata

Identifikovane klase biće gradivni elementi našeg sistema.

Još treba da bolje razumijemo i prikažemo veze između pojedinih klasa.

Dijagram klasa

Svaka klasa prikazuje se pravougaonikom. Pravougaonik može biti podijeljen na tri dijela. Gornji dio sadrži IME KLASE, srednji dio sadrži ATRIBUTE, a donji dio METODE. Radi preglednosti dijagrama, ponekad može da se samo koristi pravougaonik sa imenom klase.

ili Klasa Ime

atributi

metode

Klase i relacije između klasa u nekom sistemu prikazuju se (UML) dijagramom klasa.

Postoji nekoliko različitih tipova relacija između klasa.

Prvi tip relacije je ASOCIJACIJA. Ova relacija se prikazuje punom linijom. Uz liniju se navode i odgovarajući brojevi koji predstavljaju tzv. kardinalnost mapiranja – broj koji kaže koliko objekata date klase učestvuje u toj relaciji. Zgrada u našem primjeru ima dva sprata, pa je klasa Zgrada u vezi 1-prema-2 (1:2) sa klasom Sprat, a Sprat u relaciji 2-prema-1 (2:1) sa klasom Zgrada. Nadalje, zgrada ima jedan lift pa su klase Zgrada i Lift u relaciji 1:1.

2 1 1 1 Zgrada Lift Sprat

Page 7: Objektna orijentacija

7

Moguće su sljedeće kardinalnosti (multiplikativnosti) mapiranja:

simbol značenje

0 Nijedan

1 Jedan

m Neki cijeli broj

0..1 Nula ili jedan

m..n Najmanje m¸ali ne više od n

* Bilo koji nenegativni cijeli broj

0..* Nula ili više

1..* Jedan ili više

Asocijacija može da se imenuje. Za imenovanje se obično koriste glagoli, npr. služi, sastoji se i sl. Tada se obično stavlja strelica koja ukazuje smjer asocijacije. U sljedećem primjeru asocijacija bi se čitala u obliku: "Jedan objekat klase Lift opslužuje dva objekta klase Sprat".

1 1

2 1 2 opslužuje 1

3 Lift Sprat

Zgrada

Neka klasa, odnosno objekti neke klase mogu da sadrže objekte neke druge klase. Tada govorimo o KOMPOZICIJI (veza CJELINA – DIJELOVI). Kompozicija se prikazuje kao asocijacija koja na strani cjeline ima ispunjeni romb.

1 1

2 1 2 opslužuje 1

3 Lift Sprat

Zgrada

Page 8: Objektna orijentacija

8

Potpuni dijagram klasa za posmatrani sistem:

Sat

Zgrada

Dispecer

Osoba

LiftSprat

Svjetlo DugmeSprat DugmeLift Zvonce

Vrata

opslužuje

poziva

putnik putnik koji čeka

Klasa Zgrada se komponovana od 4 klase (Sprat, Lift, Dispecer, Sat). Klase Sat i Dispecer čine kontrolni (upravljački dio simulacije).

Klasa Sprat se je komponovana (čine je) od jednog objekta klase Svjetlo i jednog objekta klase DugmeSprat.

Klasa Lift je komponovana od po jednog objekta klasa DugmeLift, Vrata i Zvonce.

Svaka od klasa igra ili ima neku ulogu. Uloge pojašnjavaju relaciju između dvije klase. Tako, klasa Osoba igra ulogu "putnik koji ceka" u asocijaciji sa klasom Sprat, a ulogu "putnik" u asocijaciji sa klasom Lift. Uloga se navodi pored linije koja predstavlja asocijaciju i to bliže simbolu klase na koju se odnosi. Svaka klasa u asocijaciji može da igra drugačiju ulogu.

Isprekidane linije koje povezuju dve asocijacije predstavljaju ograničenja. U konkretnom primjeru objekat klase Osoba može učestvovati u relaciji sa objektom klase Sprat ili u relaciji sa objektom klase Lift, ali ne istovremeno. Ovdje se koristi simbol {xor} da ukaže na ograničenje. Mogu da se koriste i {or}, {and} …

Page 9: Objektna orijentacija

9

Dijagram objekata

UML definiše i dijagrame objekata.

Dijagrami objekata su slični dijagramima klasa, s tom razlikom što modeluju objekte i njihove međusobne veze.

I dijagram objekata kao i dijagram klasa predstavlja model strukture sistema. Dijagram objekata prikazuje stanje sistema (stanje strukture) u nekom konkretnom vremenskom trenutku. Kaže se da dijagram objekata predstavlja snimak sistema u nekom trenutku (snapshot).

Na sljedećoj slici prikazan je model sistema kad nema nikog u zgradi – dijagram objekata prazne zgrade.

zgrada : Zgrada

pozi

va

dispecer : Dispecer sat : Sat

lift : Lift

sprat1 : Sprat Sprat2 : Sprat

: Svjetlo : DugmeSprat : DugmeSprat : Svjetlo

: Zvonce : Vrata

: DugmeSprat

pozi

va

opsl

užuj

e

opsl

užuj

e

Objekti na dijagramu objekata prikazuju se u obliku

imeObjekta : ImeKlase

Prvo slovo u imenu objekta ostavlja se malo za razliku od imena klase. Sva imena objekata u dijagramu objekata su podvučena.

Navođenje imena objekata opterećuje i čini dijagram manje čitljivim u slučaju velikih sistema. Ako je ime nekog objekta nepoznato ili nije prijeko potrebno – ime objekta može da se izostavi. Tada se jednostavno navede

: ImeKlase

Page 10: Objektna orijentacija

10

IDENTIFIKOVANJE ATRIBUTA U KLASAMA

Klasu čine podaci (atributi) i funkcije članice (operacije nad atributima).

Posmatrajmo atribute objekata iz realnog svijeta. Osoba ima npr. ime, visinu, težinu i dr. Automobil ima npr. boju, trenutnu brzinu, količinu goriva u rezervoaru itd. Računar npr. kapacitet RAM-a, tip procesora, kapacitet hard diska itd.

Atributi opisuju klase. Atributi se dobijaju ako se imenice – objekti u sistemu počnu opisivati. Dakle, atributi slijede iz deskriptivnog opisa imenica u eseju kojim se opisuje posmatrani sistem. Za svaku deskriptivnu riječ ili frazu možemo da kreiramo neki atribut i da ga pridružimo klasi. Takođe, klasi mogu da se dodaju svi potrebni podaci – npr. dispečeru u primjeru simulatora treba i podatak kad mora da kreira novu osobu na spratu.

U sljedećoj tabeli su prikazane klase simulatora i identifikovani atributi:

Klasa Deskriptivna riječ ili fraza

Lift

Počinje dan čekajući na spratu 1 Mijenja smjer: kreće se gore-dolje Kapacitet: 1 osoba Vrijeme kretanja: 5 sekundi s jednog sprata na drugi

Sat Na početku dana počinje sa nulom

Dispecer Slučajno zadaje dolazak osobe u intervalu 5-20 sekundi za svaki sprat

Osoba Broj osobe

Sprat Kapacitet od 1 osobe: POPUNJEN / NIJE POPUNJEN

DugmeSprat PRITISNUTO

DugmeLift PRITISNUTO

Vrata OTVORENA / ZATVORENA

Zvonce -

Svjetlo UPALJENO / UGAŠENO

Zgrada -

Atributi se u simbolu klase u dijagramu klasa navode u srednjem dijelu. Za dati primjer simulatora imamo:

Lift Vrata Zvonce

trenutniSprat : int = 1 otvorena : bool = FALSE

kapacitet : int = 1

kretanje : bool = FALSE

vrijemeDolaska : int DugmeLift Zgrada

smjer : enum pritisnuto : bool = FALSE

Sprat DugmeSprat Svjetlo

kapacitet : int = 1 pritisnuto : bool = FALSE upaljeno : bool = FALSE

popunjen : bool = FALSE

Dispecer Osoba Sat

sprat1DolaznoVrijeme : int ID : int vrijeme : int = 0

sprat2DolaznoVrijeme : int

Page 11: Objektna orijentacija

11

Dijagram stanja (Statechart diagram – State diagram)

Objekti u sistemu mogu da imaju različita stanja. Stanje opisuje status objekta u nekom trenutku vremena. Dijagrami stanja daju mogućnost da se opiše način kako i pod kojim uslovima objekat u sistemu mijenja svoje stanje.

Na sljedećoj slici je prikazan jednostavan dijagram stanja koji modeluje stanja objekta klase DugmeSprat ili stanja objekta klase DugmeLift.

nije pritisnuto

pritisnuto

pritisak na dugme

resetovanje dugmeta

Svako stanje se prikazuje pravougaonikom sa zaobljenim vrhovima. Unutar pravougaonika se navodi naziv stanja (npr. pritisnuto, nije pritisnuto...).

Ispunjeni kružić sa strelicom pokazuje na početno stanje, u primjeru to je stanje nije pritisnuto.

Pune linije sa strelicama pokazuju tranzicije između stanja. Objekat prelazi iz stanja u stanje kao odziv na neki događaj. Npr. pritisak na dugme prevodi dugme iz stanja nije pritisnuto u stanje pritisnuto. Događaj koji proizvodi promjenu stanja navodi se pored linije koja označava datu tranziciju.

Na sljedećoj slici je prikazan dijagram stanja za klasu Lift. Lift ima tri moguća stanja: čekanje, kretanje i opsluživanje sprata.

čekanje

kretanje

pritisak na dugme [treba da se kreće] / vrijemeDolaska = vrijeme + 5

pritisak na dugme [na istom spratu]

opsluživanje sprata

when [vrijemeDolaska == vrijeme]

[nema novih zahtjeva]

pritisak na dugme [na drugom spratu] / vrijemeDolaska = vrijeme + 5

exit / zatvori vrata

Lift počinje u stanju čekanje. Događaji koji izazivaju promjenu stanja strelicama su naznačeni prema susjednim stanjima.

Ako je dugme pritisnuto na istom spratu prelazi se u stanje opsluživanje sprata. Unutar srednjih zagrada navodi se uslov koji mora biti ispunjen u slučaju nekog događaja. U ovom slučaju: ako je lift na istom spratu.

Ako je dugme pritisnuto na drugom spratu, lift prelazi u stanje kretanje. Ako se pri tom događaju treba još nešto desiti u sistemu (npr. ovdje treba izračunati kad će lift stići) nakon događaja navedi se iznak "/" i odgovarajuća aktivnost.

Lift će se zaustaviti i preći iz stanja kretanja kad protekne odgovarajuće vrijeme, odnosno kad se izjednače trenutno vrijeme i izračunato vrijeme dolaska. Tada se prelazi u stanje opsluživanje sprata.

Ako nema zahtjeva nakon što dođe na sprat (dovezao putnika), zatvara vrata i prelazi u stanje čekanje.

Ako je na spratu ušao putnik i pritisnuo dugme u liftu, lift prelazi u stanje kretanje i računa se vrijeme dolaska.

Ako se neko stanje završava nekom specifičnom akcijom, tada se simbol može podijeliti na dva dijela, a u donjem dijelu navesti exit / akcija, gdje akcija prikazuje šta se radi prilikom izlaza iz tog stanja.

Page 12: Objektna orijentacija

12

Dijagram aktivnosti (Activity diagram)

Dijagram aktivnosti je varijacija dijagrama stanja. Dijagram aktivnosti fokusira se na aktivnosti koje objekat izvodi. Dijagram aktivnosti modeluje ono šta objekat radi tokom svog postojanja.

Aktivnosti se u dijagramu aktivnosti prikazuju pomoću ovalnih simbola. Naziv aktivnosti navodi se unutar simbola. Dvije aktivnosti međusobno se povezuju strelicama tako da smjer ukazuje na redoslijed aktivnosti u procesu.

Dijagram aktivnosti započinje ispunjenim krugom, a završava krugom u čijoj se unutrašnjosti nalazi ispunjeni krug ("bikovo oko").

Sljedeći dijagram aktivnosti modeluje aktivnosti koje se izvršavaju svaki put kad je dugme pritisnuto. Kad se dugme pritisne, lift donosi odluku. Tačka odlučivanja prikazuje se pomoću romba. Lift bira odgovarajuću aktivnost na bazi ispunjenosti postavljenih uslova. Svaka linija ili putanja od tačke odlučivanja predstavlja jednu ili više različitih aktivnosti koje mogu da se izaberu. Pored tih linija navode se uslovi koji su ispunjeni.

U našem slučaju, lift izvodi jedan od tri različita seta aktivnosti kad je dugme pritisnuto.

Ako je lift u stanju mirovanje, ne moraju se izvoditi nikakve aktivnosti kretanja pa je ova sekvenca aktivnosti jednostavno završava.

Ako je dugme pritisnuto na istom spratu, lift resetuje dugme na tom spratu, zvoni i otvara vrata.

Ako je dugme pritisnuto na drugom spratu, lift mora da se kreće, zaustavi na tom spratu, resetuje dugme, zvoni i otvori vrata.

[u kretanju][dugme pritisnuto]

zatvori vrata

kreni na drugi sprat

zaustavi kretanje

[pritisnuto dugme na istom spratu]

[nije pritisnuto dugme na istom spratu]

[vrijeme ==vrijemeDolaska]

[vrijeme < vrijemeDolaska]

resetuje dugme

zazvoni

otvori vrata

Page 13: Objektna orijentacija

13

IDENTIFIKOVANJE OPERACIJA U KLASAMA

Da bi model klasa bio potpun, treba da identifikujemo ponašanje objekata, odnosno operacije u klasama.

Operacija u klasi je usluga koju klasa pruža klijentima – korisnicima klase. U realnom svijetu to bi npr. bilo: ubrzavanje automobila (pritiskom na papučicu gasa), usporenje automobila (pritiskom na kočnicu) i dr.

Obično objekti ne izvode operacije spontano. Najčešće se specifična operacija poziva kada klijentski objekat pošalje poruku serverskom objektu tražeći od njega da izvrši specificiranu operaciju. Ovo zapravo znači poziv funkcije članice date klase.

Iz eseja koji opisuje konkretan realni sistem mogu da se izvuku operacije za svaku klasu. Da bi se identifikovale operacije treba posmatrati glagole i glagolske fraze.

U sljedećoj tabeli su prikazane klase simulatora i identifikovane operacije (glagoli i glagolske fraze):

Klasa Glagolska fraza

Lift

kreće se dolazi na sprat resetuje dugme u liftu uključuje zvonce signalizira dolazak na sprat otvara vrata, zatvara vrata

Sat "Tik-tak" svake sekunde

Dispecer

slučajno određuje vremena kreiranje osoba kreira osobe verifikuje da li je sprat slobodan ili zauzet odgađa kreiranje nove osobe za jednu sekundu

Osoba

dolazi do lifta pritišće dugme na spratu pritišće dugme u liftu ulazi u lift izlazi iz lifta

Sprat resetuje dugme na spratu uključuje svjetlo isključuje svjetlo

DugmeSprat poziva lift

DugmeLift signalizira liftu da krene

Vrata (otvaranje vrata) signalizira osobi da izađe iz lifta (otvaranje vrata) signalizira osobi da uđe u lift

Zvonce -

Svjetlo -

Zgrada -

Da bi se na osnovu navedenih fraza odredile operacije, treba svaku frazu analizirati ponaosob.

Glagol "kreće se" u klasi Lift upućuje na aktivnost u kojoj se lift kreće između spratova. Treba li "kreće se" biti operacija u klasi Lift? Nema poruke koja liftu kaže da se kreće, odnosno, lift odlučuje da se kreće kao odgovor na pritisnuto dugme zavisno od toga da li su vrata zatvorena. Ovo upućuje da "kreće se" nije operacija u klasi.

Fraza "dolazi na sprat" takođe nije operacija, jer je dolazak na sprat uslovljen proteklim vremenom.

Fraza "resetuje dugme u liftu" ukazuje da lift šalje poruku dugmetu da se resetuje. To znači da klasa DugmeLift treba neku operaciju kojom će omogućiti ovu uslugu liftu. Operacije se u simbolu klase navode u donjem dijelu. Ime operacije se predstavlja kao ime funkcije uključujući tip podatka koji funkcija vraća, npr:

resetDugme() : void

Unutar zagrada navodi se lista parametara koji se šalju funkciji (koje funkcija prima).

Page 14: Objektna orijentacija

14

DugmeLift

pritisnuto : bool = FALSE

resetDugme() : void

Iz fraze "uključuje zvonce" u klasi Lift, zaključujemo da klasa Zvonce treba da omogući uslugu zvonjenja. Dakle, klasa Zvonce treba da ima operaciju zvoniZvonce() : void.

Kad lift dođe na sprat on "signalizira dolazak" i sprat odgovara izvođenjem odgovarajućih aktivnosti. Dakle, klasa Sprat treba jednu operaciju kojom to omogućava – npr. liftDolazak() : void.

Fraze "otvara vrata" i "zatvara vrata" upućuju da klasa Vrata treba da omogući te operacije, pa u klasu Vrata uvodimo operacije otvoriVrata() : void i zatvoriVrata() : void.

Klasu sat karakteriše "tik-tak" svake sekunde. Sigurno bi operacija "pokaži vrijeme" bila operacija klase Sat.

Šta je sa "tik-tak". To zavisi od naše simulacije. Iz eseja se vidi da dispečer treba da zna tekuće vrijeme da bi odlučio da li će kreirati novu osobu. Takođe, lift mora da zna vrijeme da bi odlučio da li je vrijeme da se zaustavi na spratu. Nadalje, odlučeno je da "zgrada" nosi odgovornost za izvršavanje simulacije i prosljeđivanje vremena dispečeru i liftu. Vidi se da "zgrada" svake sekunde za vrijeme trajanja simulacije ponavlja sljedeće korake:

1. očitava vrijeme sa sata 2. šalje vrijeme dispečeru da bi on kreirao novu osobu ako je potrebno 3. šalje vrijeme liftu da bi lift odlučio da li treba da stane na spratu ako je u stanju kretanja

Takođe, sat treba biti ažuriran svake sekunde. Ovo vodi da treba operacija tiktak() : void. Osim toga, treba i operacija koja očitava vrijeme citajVrijeme() : int. Ovo su operacije klase Sat.

Koraci "šalje vrijeme dispečeru" i "šalje vrijeme liftu" upućuje da Lift i Dispečer trebaju operaciju koja prima i procesira vrijeme – procesVrijeme(vrijeme : int) : void.

Klasa Zgrada treba operaciju startSimulacije() : void.

Fraze "slučajno određuje vremena" i "odgađa kreiranje nove osobe" su aktivnosti koje sam dispečer izvodi i nisu usluge koje pruža drugima, zato ove dvije fraze nisu operacije.

Fraza "kreira osobu" predstavlja specijalan slučaj. Iako možemo modelovati da objekat klase Dispecer šalje poruku o kreiranju osobe, objekat klase Osoba ne može da odgovori, jer još uvijek ne postoji. Kreiranje objekta ostavićemo za kasniju fazu (faza implementacije) i ne predstavlja se kao neka operacija u klasi.

Fraza "verifikuje da li je sprat slobodan" upućuje na to da klasa Sprat treba da omogući tu uslugu objektima u sistemu. Ova operacija treba da vrati istinu ako je sprat slobodan ili laž ako je sprat zauzet, pa imamo operaciju ZauzetSprat() : bool u klasi Sprat.

Fraze "pritišće dugme na spratu" i "pritišće dugme u liftu" u klasi Osoba vode ka operaciji pritisniDugme():void u klasama DugmeSprat i DugmeLift.

Fraze "ulazi u lift" i "izlazi iz lifta" u klasi Osoba upućuje da klasa Lift treba to da omogući objektima klase Osoba, pa klasa Lift treba da ima operacije osobaUlazi() : void i osobaIzlazi() : void.

Klasu Sprat karakteriše fraza "resetuje dugme na spratu", pa klasa DugmeSprat treba da ima operaciju resetDugme() : void. Takođe, imamo "uključuje svjetlo" i "isključuje svjetlo", pa klasa Svjetlo treba da ima operacije ukljuciSvjetlo() : void i iskljuciSvjetlo() : void.

Klasa DugmeSprat poziva objekat klase Lift, pa klasa Lift treba operaciju pozoviLift() : void.

Fraza "signalizira liftu da krene" u klasi DugmeLift ukazuje da Lift treba da omogući uslugu kretanja. Lift može da krene samo ako su vrata zatvorena. Zato imamo operaciju PripremiZaKretanje() : void koja vrši sve potrebne pripreme lifta za kretanje.

Fraze u klasi Vrata šalju poruke osobi da izađe iz lifta ili da uđe u lift, pa su Udji() : void i Izadji() : void potrebne operacije u klasi Osoba.

Page 15: Objektna orijentacija

15

Na sljedećoj slici prikazane su sve klase uključujući i obilježja i operacije.

Lift Vrata Zvonce

trenutniSprat : int = 1 otvorena : bool = FALSE ---

kapacitet : int = 1 otvoriVrata() : void zvoniZvonce() : void

kretanje : bool = FALSE zatvoriVrata() : void

vrijemeDolaska : int

smjer : enum DugmeLift Zgrada

procesVrijeme (vrijeme : int) : void pritisnuto : bool = FALSE ---

osobaUlazi() : void resetDugme() : void startSimulacije() : void

osobaIzlazi() : void pritisniDugme() : void

pozoviLift() : void

pripremiZaKretanje() : void

Sprat DugmeSprat Svjetlo

kapacitet : int = 1 pritisnuto : bool = FALSE upaljeno : bool = FALSE

popunjen : bool = FALSE resetDugme() : void ukljuciSvjetlo() : void

liftDolazak() : void pritisniDugme() : void iskljuciSvjetlo() : void

zauzetSprat() : bool

osobaDolazak() : void

Dispecer Osoba Sat

sprat1DolaznoVrijeme : int ID : int vrijeme : int = 0

sprat2DolaznoVrijeme : int udji() : void dajVrijeme() : int

procesVrijeme (vrijeme : int) : void izadji() : void tiktak() : void

Page 16: Objektna orijentacija

16

Dijagram sekvence (Sequence diagram)

Dijagram sekvence koristi se za modelovanje ponašanja sistema. Fokusira se na poruke koje se šalju između objekata. Pogodan za fokusiranje na vremensku komponentu procesa. Ovdje će se zgodno iskoristiti za modelovanje simulacije.

Na slici je prikazan dijagram sekvence simulacije. Tekst s lijeve strane predstavlja potreban uslov (vremensko ograničenje)

: Sat : Zgrada tiktak()

: Dispecer : Lift

dajVrijeme()

vrijeme : int

procesVrijeme (vrijeme : int)

procesVrijeme (vrijeme : int)

{vrijeme < ukupnoVrijeme}

Svaki objekat se predstavlja simbolom koji se koristio i u dijagramu objekata. Simboli objekata koji učestvuju u procesu stavljaju se na vrh dijagrama. Ispod tih simbola povlače se isprekidane linije koje pokazuju životni vijek objekata. Životna linija nekog objekta pokazuje progres tokom vremena – prikaz akcija hronološkim redom od vrha prema dnu životne linije.

Poruka (message) između dva objekta prikazuje se kao usmjerena linija (strelica) od klijenta prema serveru. Poruka izaziva odgovarajuću operaciju na serveru – objektu koji pruža uslugu. Strelica pokazuje na životnu liniju objekta koji prima poruku. Ime poruke navodi se iznad linije i može da uključuje i parametre koji se prenose. Npr. objekat klase Zgrada šalje poruku procesVrijeme objektu klase Lift. Pošto se šalje parametar vrijeme na dijagramu imamo procesVrijeme (vrijeme : int).

Ako neki objekat vraća kontrolu toka ili ako vraća neku vrijednost, povratna poruka se prikazuje na dijagramu u obliku isprekidane linije sa strelicom usmjerenom prema objektu koji je pozivao. Npr. objekat klase Sat vraća vrijeme kao odgovor na poruku dajVrijeme koju je poslao objekat klase Zgrada.

Kad objekat primi poruku to se na životnoj liniji označava posebnom trakom koja traje sve dok se akcija ne završi. Ove trake nazivaju se aktivacije. Svaka aktivacija predstavlja trajanje neke aktivnosti. Što aktivnost duže traje, to je i aktivacija duža.

Na sljedećoj slici prikazan je dijagram sekvence koji modeluje ponašanje dispečera. Objekat zgrada prvo dispečeru šalje poruku procesVrijeme.

Dispečer mora da odluči da li treba da kreira novu osobu na prvom spratu (objekat sprat1 klase Sprat). Zato dispečer prvo mora da provjeri da li je sprat1 slobodan ili zauzet pa šalje poruku zauzetSprat objektu sprat1, koji vraća odgovor TRUE ili FALSE. Ovdje se životna linija dispečera dijeli na dvije paralelne životne linije koje predstavljaju potencijalne sekvence poruka koje objekat može da pošalje, zavisno od odgovora koji je vratio objekat sprat1. Potencijalno se životna linija može dijeliti i na veći broj novih uslovnih linija. Pored tih linija treba navesti uslov pod kojim je životna linija važeća. Linije mogu da se spajaju u nekoj tački ili da nastave paralelno da postoje.

Ako sprat1 vrati TRUE (sprat1 je zauzet), dispečer poziva svoju vlastitu funkciju odgodiKreiranje kojoj parametrom ukazuje da treba vrijeme kreiranja promijeniti za prvi sprat. Ova funkcija nije operacija u klasi Dispečer, jer je ne pozivaju drugi objekti. To je jednostavno aktivnost klase Dispecer koja se izvodi unutar

Page 17: Objektna orijentacija

17

neke operacije. Dakle, objekat dispecer šalje sam sebi poruku (poziva svoju funkciju članicu). Aktivacije se za ovakve poruke crtaju na desnom rubu trenutne aktivacije (kao na slici).

Ako sprat1 vrati FALSE (sprat1 je slobodan), dispečer kreira novi objekat klase Osoba. U dijagramu sekvence, kada se kreira novi objekat, simbol objekta se postavlja na vertikalnoj poziciji koja odgovara vremenu kada je objekat kreiran. Objekat koji kreira neki drugi objekat šalje poruku <<create>>. Strelica ove poruke pokazuje na simbol novog objekta. Kad neki objekat prestaje da živi, životna linija se prekida simbolom X. Ovdje nije prikazano.

Nakon kreiranja, osoba se pojavljuje na spratu1, tj. objektu sprat1 šalje se poruku osobaDolazak. Osim toga, dispečer poziva svoju vlastitu funkciju odrediNoviDolazak, što se prikazuje kao nova aktivacija na desnom rubu postojeće aktivacije. Ova funkcija nije operacija koja se nudi drugima, nego samo neka aktivnost koja se izvodi unutar jedne operacije.

Sada se dvije životne linije dispečera spajaju. Kao što je opisano za sprat1, dispečer procesira vrijeme i za sprat2.

Kad dispečer završi i sa drugim spratom, kontrola se vraća objektu zgrada.

zgrada : Zgrada

procesVrijeme (vrijeme)

dispecer : Dispecer sprat1 : Sprat sprat2 : Sprat

zauzetSprat () : bool

bool

[ zauzet == false ]

[ zauzet == true ]osobaDolazak ()

odgodiKreiranje (sprat1)

odrediNoviDolazak (sprat1)

zauzetSprat () : bool

bool

[ zauzet == false ]

[ zauzet == true ] osobaDolazak ()

odgodiKreiranje (sprat2)

odrediNoviDolazak (sprat2)

Page 18: Objektna orijentacija

18

SARADNJA (INTERAKCIJA) IZMEĐU OBJEKATA

Kad dva objekta međusobno komuniciraju da bi realizovali neki zadatak kažemo da sarađuju (collaborate), odnosno da imamo saradnju ili kolaboraciju dva objekta. Kolaboracija se sastoji u sljedećem:

1. objekat jedne klase 2. šalje odgovarajuću poruku 3. objektu druge klase Poruka koju šalje prvi objekat, poziva operaciju u drugoj klasi. Ovdje ćemo se koncentrisati na poruke koje pozivaju te operacije. U našem sistemu uočili smo sljedeće operacije:

Klasa Glagolska fraza

Lift resetuje dugme u liftu, uključuje zvonce signalizira dolazak na sprat, otvara vrata, zatvara vrata

Sat "Tik-tak" svake sekunde

Dispecer kreira osobu, verifikuje da li je sprat slobodan ili zauzet

Osoba pritišće dugme na spratu, pritišće dugme u liftu ulazi u lift, izlazi iz lifta

Sprat resetuje dugme na spratu uključuje svjetlo, isključuje svjetlo

DugmeSprat poziva lift

DugmeLift signalizira liftu da krene

Vrata (otvaranje vrata) signalizira osobi da izađe iz lifta (otvaranje vrata) signalizira osobi da uđe u lift

Zvonce -

Svjetlo -

Zgrada inkrementira vrijeme, dobija vrijeme od sata obezbjeđuje vrijeme dispečeru, obezbjeđuje vrijeme liftu

Operacije navedene u tabeli predstavljaju kolaboracije u sistemu. Određuju se na sljedeći način: za klasu Lift imamo uključuje zvonce, pa da bi se realizovao zadatak zvonjenja objekat klase Lift mora poslati poruku zvoniZvonce objektu klase Zvonce kojom poziva operaciju zvoniZvonce te klase. U sljedećoj tabeli su prikazane sve kolaboracije:

objekat klase šalje poruku objektu klase

Lift

resetDugme zvoniZvonce liftDolazak otvoriVrata, zatvariVrata

DugmeLift Zvonce Sprat Vrata

Sat

Dispecer kreirajOsoba zauzetSprat

Osoba Sprat

Osoba

pritisniDugme pritisniDugme osobaUlazi, osobaIzlazi osobaDolazak

DugmeLift DugmeSprat Lift Sprat

Sprat resetDugme ukljuciSvjetlo, iskljuciSvjetlo

DugmeSprat Svjetlo

DugmeSprat pozoviLift Lift

DugmeLift pripremiZaKretanje Lift

Vrata udji, izadji Osoba

Zvonce -

Svjetlo -

Zgrada tiktak, dajVrijeme procesVrijeme procesVrijeme

Sat Dispecer Lift

Page 19: Objektna orijentacija

19

Dijagram saradnje (Collaboration diagram)

UML raspolaže dijagramima kolaboracije da bi se modelovala interakcija objekata u sistemu. I dijagrami sekvence su dijagrami za modelovanje interakcije, ali dijagrami sekvence su pogodniji za fokusiranje na vremensku komponentu interakcije (kada se šta dešava i kojim redom), a dijagrami kolaboracije na strukturalnu komponentu (ko učestvuje u interakciji).

Na sljedećoj slici prikazan je dijagram saradnje koji modeluje interakcije između objekata u sistemu u kojem objekti klase Osoba ulaze i izlaze iz lifta. Saradnja započinje kad lift dođe na sprat.

putnik : Osoba

: DugmeSprat

: Sprat

: Lift

1: resetDugme()

: Svjetlo

: Zvonce : DugmeLift

: Vrata

putnikKojiCeka: Osoba

2: zvoniZvonce()

3: liftDolazak()

3.1: resetDugme() 3.2: ukljuciSvjetlo()

4: otvoriVrata()

4.1: izadji()

4.1.1: osobaIzlazi()

4.2: udji()

4.2.1: osobaUlazi()

Objekti se standardno prikazuju kao i u ostalim dijagramima. Objekti koji sarađuju povezuju se punim linijama. Poruke se prikazuju strelicama koje su usmjerene ka objektu prema kojem se poruka šalje. Redoslijed poruka prikazuje se uvođenjem numeracije.

Startna poruka ima broj 1 (lift šalje poruku resetDugme dugmetu u liftu kako bi se resetovalo dugme u liftu). Nakon toga, lift šalje poruku zvoniZvonce (poruka br. 2).

Nakon toga lift najavljuje dolazak na sprat porukom liftDolazak (poruka 3), pa sprat može resetovati dugme na spratu (poruka 3.1) i upaliti svjetlo (poruka 3.2).

Kad sprat resetuje dugme i upali svjetlo, lift otvara vrata (poruka 4). Ovdje vrata šalju poruku izadji (poruka 4.1) putniku koji je u liftu a zatim putnik izlazi iz lifta i obavještava lift da je izašao porukom osobaIzlazi (poruka 4.1.1). Nakon što osoba koja je bila u liftu izađe iz lifta, osoba koja je čekala može ući u lift pa objekat vrata šalje poruku udji (poruka 4.2). Po ulasku putnik obavještava lift da je ušao (poruka 4.2.1)

Page 20: Objektna orijentacija

20

REZIME OBJEKTNO-ORIJENTISANE ANALIZE I DIZAJNA 1. Od krajnjeg korisnika (investitora) saznaj što više možeš

2. Kreiraj slučajeve upotrebe

3. Identifikuj klase

(identifikuj prvo sve imenice, a zatim ih filtriraj da ostanu samo one koje predstavljaju klase)

4. Identifikuj atribute u svakoj klasi

5. Upoznaj se sa dinamičkom prirodom sistema

(kreiraj dijagrame stanja da uočiš promjene klasa tokom vremena)

6. Ispitaj glagole i glagolske fraze vezane za svaku klasu da bi izdvojio operacije u klasi

(dijagrami aktivnosti mogu biti od pomoći)

7. Ispitaj interakcije između objekata (nacrtaj dijagram sekvence i dijagram saradnje)