Upload
mladendj
View
128
Download
4
Embed Size (px)
Citation preview
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
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.
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.
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 ***
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.
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
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
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} …
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
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
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.
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
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).
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.
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
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
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)
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
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)
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)