Upload
others
View
6
Download
1
Embed Size (px)
Citation preview
SOFTVERSKO INŽENJERSTVO
Vježbe 13: State machine dijagrami
Robert Manger
Sveučilište u Zagrebu
PMF-Matematički odsjek
Akademska godina 2018/2019.
V-13 Softversko inženjerstvo 2
Sadržaj Vježbi 13
Općenito o state machine dijagramima
Stanja, akcije, aktivnosti
Prijelazi, njihovo povezivanje i grananje
Događaji, signali
Daljnje primjene state machine dijagrama
V-13 Softversko inženjerstvo 3
Općenito o state machine dijagr
State machine dijagram modelira ponašanje objekta koji
reagira na događaje i prelazi iz stanja u stanje.
Otprilike je riječ o onome što se u matematici zove
konačni automat.
State machine dijagrami grade se od sljedećih
elemenata. Stanja u kojima se može naći objekt.
Događaji koji utječu na ponašanje objekta.
Prijelazi objekta iz jednog stanja u drugo, kao reakcija na
događaj.
Akcije i aktivnosti koje objekt izvršava kad se nalazi u nekom
stanju ili kad prelazi iz jednog stanja u drugo.
V-13 Softversko inženjerstvo 4
Usporedba s activity dijagramima
State machine dijagram ima neke sličnosti s activity
dijagramom. Oba služe za opisivanje dinamike sustava.
Oba su zasnovana na “grafovskom” matematičkom modelu koji
se sastoji od čvorova i lukova.
No postoje i sljedeće razlike. Activity dijagrami služe za modeliranje jednog poslovnog procesa
u kojem sudjeluje više objekata.
State machine dijagrami služe za modeliranje ponašanja samo
jednog objekta, možda u raznim procesima.
Semantika activity dijagrama oslanja se na Petrijeve mreže.
Semantika state machine dijagrama oslanja se na konačne
automate.
V-13 Softversko inženjerstvo 5
Primjer state machine dijagrama (1)
Sljedeći dijagram modelira ponašanje žarulje. Ona se može naći u dva stanja: ugašena (Off), upaljena (On).
Događaji koji utječu na promjene stanja su: okretanje prekidača u
jednom smjeru (turnOn), u drugom smjeru (turnOff), te pregaranje
žarulje (burnOut).
V-13 Softversko inženjerstvo 6
Primjer state machine dijagrama (2)
Iz prethodnog dijagrama otprilike
je vidljiv način crtanja pojedinih
elemenata state machine-a.
Stanja su zaobljeni pravokutnici.
Prijelazi su strelice
Događaji su oznake na strelicama.
U svakom state machine
dijagramu također mora
postojati:
jedno početno stanje,
barem jedno završno stanje.
V-13 Softversko inženjerstvo 7
Detaljnije o stanjima (1)
Stanje objekta mijenja se tokom vremena, no u
jednom trenutku ono je određeno s:
vrijednostima atributa tog objekta,
poveznicama prema drugim objektima,
aktivnostima koje objekt upravo obavlja.
Kod modeliranja ponašanja objekta ne smije se
pretjerati s brojem stanja. Naime:
Treba uočiti samo stanja koja zaista ima smisla razlikovati sa
stanovišta aplikacije.
Takva stanja zovemo “semantički značajna” za ponašanje
objekta.
V-13 Softversko inženjerstvo 8
Detaljnije o stanjima (2) Primjerice, sljedeća slika prikazuje klasu Color čiji objekti
opisuju boje. Klasa ima tri atributa red, green, blue, od
kojih svaki može poprimiti vrijednost 0 – 255.
Samo na osnovi različitih kombinacija vrijednosti
atributa, mogli bi za klasu Color definirati 256 x 256 x 256
= 16777216 stanja. No takva stanja nema smisla
razlikovati jer ona sigurno nisu semantički značajna.
V-13 Softversko inženjerstvo 9
Akcije, aktivnosti, unutarnji prijelazi Kad se nalazi u određenom stanju, objekt može izvršavati
određene akcije i aktivnosti, odnosno može obavljati
unutarnje prijelaze.
Između akcija i aktivnosti postoji sljedeća razlika. Akcija je dio posla koji se izvršava trenutno i ne može se prekinuti.
Aktivnost je dio posla koji troši određeno vrijeme i može se
prekinuti.
Postoje dvije posebne akcije. Ulazna akcija: izvršava se u trenutku ulaska u stanje (događaj
entry).
Izlazna akcija: izvršava se u trenutku izlaska iz stanja (događaj
exit).
Unutarnji prijelaz predstavlja reakciju objekta na određeni
događaj koja nije toliko značajna da bi je smatrali
prijelazom u novo stanje.
V-13 Softversko inženjerstvo 10
Primjer stanja s akcijama, aktivnostima i unutarnjim prijelazima Sljedeći
dijagram
prikazuje stanje
objekta koji
učitava lozinku.
Vidljiva je UML-
ova sintaksa za
prikazivanje
akcija, aktivnosti
i unutarnjih
prijelaza. Uočite
ključne riječi
entry, exit, do.
V-13 Softversko inženjerstvo 11
Detaljnije o prijelazima (1)
Semantika ovog dijagrama može se izraziti pseudokodom:
On (event1 OR event2) if (guardCondition is true)
then perform anAction and immediately enter stateB
Prijelaz (transition) je promjena stanja objekta koja se
dešava kao reakcija na neki događaj.
UML-ova sintaksa za prikazivanje prijelaza vidljiva je na
sljedećem dijagramu.
V-13 Softversko inženjerstvo 12
Detaljnije o prijelazima (2) Prijelaz se na dijagramu prepoznaje kao strelica između
dva stanja. Uz samu strelicu zapisani su sljedeći
opcionalni elementi. Nula jedan ili više događaja – to su događaji od kojih svaki
pobuđuje prijelaz.
Nula, jedan ili više uvjeta- stražara – to su Booleovski izrazi koji svi
moraju biti istina da bi se prijelaz zaista dogodio. Zapisuju se iza
događaja.
Nula, jedna ili više akcija – to su dijelovi posla koji se svi izvršavaju
u trenutku prijelaza.
Isti ovi elementi mogu se zadati i kod unutrašnjih prijelaza,
no tada su oni upisani unutar ikone stanja i nema strelice.
Ako kod prijelaza nije zadan nikakav događaj, tada je riječ
o automatskom prijelazu koji se aktivira sam od sebe čim
njegov uvjet-stražar postane istina.
V-13 Softversko inženjerstvo 13
Povezivanje prijelaza (1) Prijelazi na dijagramu mogu biti povezani preko spojnog
pseudo-stanja (junction pseudo-state). To pseudo-stanje
predstavlja mjesto gdje se prijelazi sažimlju ili granaju.
Crta se kao puni krug.
Sljedeći dijagram prikazuje promjene stanja za objekt iz
klase Loan koji opisuje posudbu knjige iz knjižnice. Stanja odgovaraju situaciji kad je posudba u tijeku (OnLoan), kad
je došlo do kašnjenja s vraćanjem (Overdue), kad posuditelj mora
platiti globu (FineDue), te kad je knjiga napokon vraćena
(Terminated).
Događaji su vraćanje knjige (returnBook) i plaćanje globe (payFine)
Koristi se i uvjet-stražar koji automatski aktivira prijelaz čim prođe
rok posudbe.
Vidimo upotrebu jednog spojnog pseudo-stanja.
V-13 Softversko inženjerstvo 14
Povezivanje prijelaza (2)
Spojno stanje može imati više od jednog izlaznog
prijelaza. No tada ti prijelazi moraju imati međusobno
isključujuće uvjete-stražare.
V-13 Softversko inženjerstvo 15
Povezivanje prijelaza (3) Slijedi primjer spojnog stanja s više izlaznih prijelaza. Tu
smo proširili model ponašanja klase Loan tako da
omogućimo produljenje posudbe knjige. Da bi produljio
posudbu, posuditelj mora donijeti knjigu u knjižnicu.
Međusobno isključujući uvjeti-stražari su [extend] i [!extend].
V-13 Softversko inženjerstvo 16
Grananje prijelaza (1) Ako želimo na dijagramu prikazati grananje prijelaza bez
spajanja, tada možemo koristiti pseudo-stanje za
grananje (choice pseudo-state). Ono se crta kao romb.
Sljedeći dijagram prikazuje promjene stanja za objekt iz
klase BankLoan koji opisuje bankovni kredit i njegovo
vraćanje. Stanja odgovaraju situaciji kad korisnik kredita još nije vratio dug
(UnPaid), kad je djelomično (PartiallyPaid) ili potpuno (FullyPaid)
vratio dug, ili kad je preplatio dug (OverPaid).
Događaji su primanje uplate kojom korisnik vraća dug
(acceptPayment) te refundacija preplate korisniku (makeRefund).
Vidimo upotrebu pseudo-stanja za grananje. Tri grane koje izlaze
iz pseudo-stanja zaštićene su međusobno isključivim uvjetima-
stražarima koji ispituju da li je korisnikova uplata veća, manja ili
jednaka preostalom dugu.
V-13 Softversko inženjerstvo 17
Grananje prijelaza (2)
V-13 Softversko inženjerstvo 18
Detaljnije o događajima Događaj (event) je nešto što se dogodilo u nekom trenutku
i na nekom mjestu te ima utjecaj na ponašanje objekta.
Događaj na UML dijagramu može biti prikazan: izvana na strelici koja predstavlja prijelaz,
iznutra unutar stanja (unutrašnji događaj).
Postoje četiri vrste događaja, od kojih svaka ima donekle
drukčiju semantiku. Događaj-poziv (call event). To je poziv da se izvrši neki skup akcija.
Obično je riječ o pozivu operacije iz pripadne klase.
Događaj-signal (signal event). Prijem signala, dakle asinkrone
poruke od nekog drugog objekta.
Događaj-promjena (change event). Dešava se kad neki Booleovski
izraz promijeni vrijednost iz false u true.
Vremenski događaj (time event). Dešava se nakon što protekne
zadani vremenski interval ili kad nastupi zadani trenutak.
V-13 Softversko inženjerstvo 19
Događaji-pozivi (1) Događaj-poziv je najčešća vrsta događaja. Dešava se
kad netko pozove određenu operaciju nad objektom.
Sljedeći dijagram djelomično prikazuje promjene stanja
objekta iz klase SimpleBankAccount koji opisuje bankovni
račun. Pretpostavlja se poslovno pravilo da na računu uvijek mora
postojati nenegativni iznos novaca. Dakle, dizanje novaca koje
bi dovelo račun u minus bit će odbijeno.
Vidimo unutrašnje i vanjske događaje-pozive. Njihova signatura
se poklapa sa signaturom odgovarajućih operacija iz klase
SimpleBankAccount.
Stanja odgovaraju situaciji kad je iznos na računu pozitivan
(InCredit), situaciji kad se podizanje novaca mora odbiti
(RejectingWithdrawal), odnosno situaciji kad se podizanje novaca
prihvaća (AcceptingWithdrawal).
Vidimo ulazne akcije i unutarnje prijelaze.
V-13 Softversko inženjerstvo 20
Događaji-pozivi (2)
V-13 Softversko inženjerstvo 21
Događaji-signali (1) Signal je informacija koju jedan objekt asinkrono šalje
drugom. Modelira se kao klasa bez operacija sa
stereotipom <<signal>>. Informacija koja se prenosi nalazi
se u atributima te klase.
Sljedeća slika prikazuje signal koji objekt iz klase
SimpleBankAccount šalje objektu iz klase Bank, da bi javio da
je korisnik pokušao podići previše novaca.
U nastavku slijedi dopunjena
verzija state machine dijagrama
za SimpleBankAccount, gdje
bankovni račun šalje signal
banci kad god je podizanje
novaca bilo odbijeno.
V-13 Softversko inženjerstvo 22
Događaji-signali (2)
Slanje
signala
prikazano
je konve-
ksnim
petero-
kutom, s
upisanim
imenom
signala.
V-13 Softversko inženjerstvo 23
Događaji-signali (3) Dalje imamo dio state machine dijagrama za klasu Bank.
Banka prima signal o odbijenoj transakciji kojeg je
poslao bankovni račun, a zatim ulazi u stanje gdje šalje
obavijest korisniku. Događaj primanja signala crta se kao konkavni peterokut s
upisanom operacijom koja prima signal kao svoj parametar.
Prijem signala može se također prikazati pomoću standardne
notacije imeDogađaja / akcija, na strelici ili unutar stanja.
V-13 Softversko inženjerstvo 24
Događaji-promjene (1) Događaj-promjena je promjena vrijednosti zadanog
Booleovog izraza iz false u true. U tom Booleovom
izrazu mogu se pojavljivati konstante, globalne varijable,
atributi ili operacije odgovarajuće klase.
Događaj-promjena prikazuje se na dijagramu tako da na
mjesto gdje inače upisujemo događaj (iznad strelice ili
unutar stanja) upišemo odgovarajući Booleov izraz.
Slijedi dopunjena verzija state machine dijagrama za
SimpleBankAccount. Unutar stanja InCredit dodan je
događaj-promjena koji će se aktivirati onda kad stanje
na računu dosegne 5000. Kad se događaj desi, šalje se obavijest menadžeru.
Nakon toga menadžer može obavijestiti klijenta o drugim
opcijama za investiranje.
V-13 Softversko inženjerstvo 25
Da bi se
događaj-
promjena
ponovo
desio,
vrijednost
Booleovog
izraza se
iz true
najprije
mora
vratititi u
false, pa
zatim opet
u true.
Događaji-promjene (2)
V-13 Softversko inženjerstvo 26
Vremenski događaji (1)
Vremenski događaji se dešavaju kad nastupi zadani
trenutak, ili nakon što protekne zadani vremenski
interval.
Na dijagramu su označeni ključnom riječi when ili after, s
vremenskim izrazom u zagradama.
Izraz uz when određuje vremenski trenutak kad će se
događaj aktivirati. Na primjer: when(date=07/10/2009).
Izraz uz after određuje vremenski interval nakon kojeg će
se događaj aktivirati. Na primjer after(3 months).
U vremenskom izrazu mogu se pojaviti konstante, globalne
varijable, te atributi ili operacije dotične klase.
V-13 Softversko inženjerstvo 27
Vremenski događaji (2)
Sljedeća slika
prikazuje dio
state machine
dijagrama za
klasu
CreditAccount
koja opisuje
tekući račun.
Ako je račun u
minusu više od
3 mjeseca, on
se zamrzava.
V-13 Softversko inženjerstvo 28
Daljnje primjene state machine dijagrama
State machine dijagrami kojima smo se mi bavili
zapravo se preciznije zovu behavioral state
machines, budući da oni opisuju ponašanje.
Osim njih, u UML 2 postoje i takozvane protocol
state machines, koje služe za definiranje protokola.
Također, state machine dijagrami kojima smo mi se
bavili opisuju ponašanje objekata.
UML 2 inače dozvoljava da dijagram opisuje i
ponašanje nekog drugog klasifikatora, na primjer
komponente ili podsustava.