Diagrame de Stare

18

Click here to load reader

Transcript of Diagrame de Stare

Page 1: Diagrame de Stare

Diagrame de stare

Page 2: Diagrame de Stare

Introducere

O diagramă de stare poate fi ataşată oricărei clase care are stări bine identificate şi un comportament complex. O diagramă de stare descrie o istorie a vieţii obiectelor unei clase şi poate fi considerată un graf, bazată pe stări conectate prin tranziţii.

Diagramele de stare specifică modul în care reacţionează un obiect la primirea unui mesaj.

O diagramă de stare are o singură stare iniţială, una sau mai multe stări simple, una sau mai multe stări finale şi tranziţii între stări.

Page 3: Diagrame de Stare

Elementele unei diagrame de stare

Elementele principale ale unei diagrame de stare sunt următoarele:1) stări2) tranziţii3) evenimente4) acţiuni

1) Stări

Starea acoperă toate proprietăţile statice ale unui obiect şi valorile curente pentru fiecare proprietate. Toate instanţele unei clase există în aceeaşi stare. Starea curentă a unui element se numeşte stare activă.

a) simplăb) iniţialăc) finală

Stare

Page 4: Diagrame de Stare

a) Stare simplă: este o condiţie specială sau o situaţie a unui obiect de-a lungul ciclului lui de viaţă.

Exemplu de stări de obiecte:• obiectul bec poate avea stările: aprins şi stins;• obiectul factură poate avea stările: plătit şi neplătit;• obiectul lift poate avea stările: staţionează, urcă, coboară;• obiectul calculator poate avea stările:

inactiv – calculatorul nu este pornit sau nu este accesibil utilizatorilor;

activ – calculatorul este pornit şi este funcţional pentru utilizatorii săi;

blocat – calculatorul nu este alimentat sau are unele erori majore.

Reprezentarea grafică a unei stări simple: dreptughi cu colţurile rotunjite

Page 5: Diagrame de Stare

b) Stare iniţială: indică starea unui element şi momentul creării lui. Există o singură stare iniţială. Se reprezintă, în UML, sub forma unui cerc plin, de la care pleacă o săgeată.

c) Stare finală: indică starea unui element la sfârşitul vieţii sale, când el este distrus. Într-o diagramă de stare, putem avea zero sau mai multe stări finale. Se reprezintă, în UML, printr-un mic cerc plin, concentric altui cerc gol, la care sosesc săgeţi de la stările sistemului, astfel:

Page 6: Diagrame de Stare

2) Tranziţii

Tranziţiile sunt relaţiile dintre stări. O tranziţie reprezintă schimbarea stării sursă a unui obiect, în urma unor acţiuni, datorită producerii unui eveniment. Tranziţiile dintre stări se produc în felul următor:- un obiect este în stare sursă;- se produce un eveniment (de exemplu recepţionarea unui mesaj);- se execută o acţiune;- obiectul intră în starea ţintă.

Într-o diagramă de stare pot exista:- una sau mai multe tranziţii dintr-o stare, deoarece fiecare este declanşată de un eveniment unic; în acest caz, spunem că există tranziţii cu mai multe ţinte;- din mai multe stări pleacă aceeaşi tranziţie, deoarece acelaşi eveniment poate declanşa o tranziţie de la mai multe stări sursă; în acest caz, avem tranziţia cu mai multe surse;- tranziţie de la o stare la ea însăşi.

Page 7: Diagrame de Stare

Tranziţiile se reprezintă, în UML, printr-o săgeată solidă, de la starea sursă spre starea ţintă, etichetată cu numele evenimentului şi al acţiunii, separată prin caracterul slash (‘/’), astfel:

Elementele etichetei sunt opţionale, dar nu poate exista numai acţiunea. În cazul în care un eveniment cauzează o tranziţie fără acţiune asociată, atunci trebuie să lipsească şi ‘/’ din eticheta unei tranziţii.

Uneori, o tranziţie se produce nu datorită unui eveniment, ci datorită faptului că o stare completează o acţiune. În acest caz, tranziţiile fără etichetă se numesc tranziţii automate (automatic transitions).

Page 8: Diagrame de Stare

3) Evenimente

Un eveniment este ceva ce se produce asupra unui element. Cele mai frecvente evenimente sunt mesajele recepţionate de un obiect.

În UML, un eveniment are următoarea sintaxă:nume eveniment (listă parametri) [condiţia de gardă]

unde:-nume eveniment – este, de obicei, acelaşi cu numele operaţiei elementului care corespunde în diagrama de stare şi care se execută pentru evenimentul respectiv (de exemplu, achitarea unei facturi, pornirea unui calculator, etc);

-lista de parametri – este opţională şi conţine parametrii evenimentului separaţi prin virgulă. Fiecare parametru poate fi o valoare explicită sau o variabilă. Dacă evenimentul nu are parametri, se omit şi parantezele;

- condiţia de gardă – este, de asemenea, opţională şi indică o condiţie care trebuie satisfăcută pentru ca o tranziţie să aibă loc. O condiţie poate fi exprimată în limbaj natural, în limbaj de programare sau OCL.

Page 9: Diagrame de Stare

În exemplul unui calculator, putem avea evenimentele următoare:

-Startup – indică faptul că un calculator trece din starea sursă, inactiv, în starea ţintă, activ. Dacă calculatorul este parolat, atunci există parametrul UserID. De asemenea, există posibilitatea ca un calculator să nu poată fi pornit din anumite motive (pană de curent), atunci se impune condiţia de gardă: dacă calculatorul poate fi pornit.

-Shutdown – indică faptul că un calculator, din starea activ, trece în starea inactiv. Acest eveniment poate avea parametrul UserID. De asemenea, există posibilitatea ca un calculator să nu poate fi închis din anumite motive (de exemplu, nu au fost închise toate aplicaţiile), atunci se impune condiţia de gardă: dacă calculatorul poate fi închis.

-Reset – indică faptul că respectivul calculator poate trece din starea blocat în starea activ.

- Eroare Sistem – indică faptul că respectivul calculator are erori grave şi trece din starea activ în starea blocat.

Page 10: Diagrame de Stare
Page 11: Diagrame de Stare

4) Acţiuni: reprezintă o prelucrare executată de un obiect aflat într-o stare sursă, declanşată în urma producerii unui eveniment (de exemplu, recepţionarea unui mesaj). O acţiune nu poate fi întreruptă de evenimente.

În UML, o acţiune are următoarea sintaxă:Valoare_returnată:= element_ţintă.nume_acţiune (listă argumente)

unde:- Valoare_returnată – este opţională şi indică numele pentru valoarea rezultată de acţiunea declanşată de un eveniment. Dacă se omite acest câmp sau dacă acţiunea nu întoarce nici o valoare, atunci se vor omite şi caracterele “:=”.- Element_ţintă – este numele elementului care va executa acţiunea. Dacă elementul care enunţă acţiunea este acelaşi cu elementul care primeşte evenimentul declanşator al acţiunii respective, atunci acest câmp se omite, împreună cu caracterul punct (‘.’).- Nume acţiune – este, de obicei, acelaşi cu numele operaţiei elementului respectiv sau al operaţiei elementului – ţintă, dacă acesta este specificat.- Listă de argumente – este opţională şi indică parametrii care participă la acţiune, separaţi prin virgulă. Fiecare parametru poate fi o variabilă sau o valoare explicită.

Page 12: Diagrame de Stare

variabilă

Page 13: Diagrame de Stare

Tipuri de evenimente şi acţiuniÎn UML, există patru tipuri de evenimente: a)apeluri de operaţii; b)semnale; c)schimbarea condiţiilor; d)scurgerea unui interval de timp.

a) Eveniment – apel de operaţie

Apelul de operaţie este un eveniment care, atunci când se produce, determină schimbări în starea elementului care primeşte apelul.

Acest tip de eveniment este numit mesaj, se implementează, de obicei, ca un mesaj sincron şi apare în eticheta unei tranziţii. Astfel, când un obiect transmite un mesaj altui obiect (sau lui însuşi) şi invocă o operaţie, controlul trece de la obiectul expeditor la obiectul destinatar. Obiectul apelat execută tranziţia asociată evenimentului respectiv, îşi schimbă starea şi transmite apelantului controlul. Apelurile de operaţii pot fi mesaje asincrone, dacă limbajul care le implementează suportă calcul paralel.

Page 14: Diagrame de Stare

b) Eveniment – semnal

Semnalul este un obiect expediat asincron de un obiect şi recepţionat de alt obiect. Acest tip de eveniment se numeşte tot mesaj şi apare ca o semnătură de eveniment într-o stare de tranziţie. Semnalul poate declanşa o acţiune obiectului receptor într-o maşină de stare, în urma căreia obiectul respectiv îşi schimbă starea, sau poate fi un mesaj asincron într-o diagramă de interacţiune. Semnalele pot avea parametri, care se scriu între paranteze rotunde.

Semnalele sunt definite ca un tip special de clasă, stereotipizate cu <<signal>>. Aceste clase sunt folosite numai pentru trimiterea mesajelor, nu pot avea operaţii, iar eventualii parametri ai semnalului sunt trecuţi în compartimentul atributelor. Se poate construi o ierarhie de clase signal, adică între semnale pot exista relaţii de generalizare, dar sunt excluse orice relaţii cu clasele obişnuite.

Page 15: Diagrame de Stare

Dacă o tranziţie are o semnătură de eveniment semnal, atunci toate subsemnalele vor putea fi recepţionate prin acelaşi semnal, aşa cum este ilustrat în figura de mai jos:

Page 16: Diagrame de Stare

c) Eveniment – schimbareUn eveniment schimbare reprezintă trecerea unui obiect în altă stare, în funcţie de satisfacerea unei condiţii. Condiţia apare în condiţia de gardă a semnăturii unei tranziţii. În UML, un astfel de eveniment este modelat cu cuvântul cheie when, urmat de o expresie booleană. Se poate folosi o expresie booleană pentru a indica o valoare (exemplu [when x=1]) sau pentru testarea continuă a unei expresii (ca de exemplu, [when x<100]).

d) Eveniment – temporalUn eveniment temporal este o întâmplare care depinde de scurgerea timpului. El se reprezintă în UML prin cuvântul cheie after, urmat de un interval de timp care reprezintă timpul scurs din momentul tranziţiei până la schimbarea stării. Intervalul de timp poate fi redat în limbaj natural, expresie de timp, sau în orice mod, dar trebuie să fie cât mai explicit. Această combinaţie after+expresie_timp se trece în semnătura unei tranziţii, la condiţia de gardă.

De exemplu, putem reprezenta evenimentele temporale, [after 5 secunde], [after 2 secunde de la părăsirea stării], etc. Într-un eveniment temporal, expresia din condiţia de gardă poate să nu fie precedată de cuvântul cheie after (de exemplu, putem scrie [timp = timpdat], în loc de [after timpdat]).

Page 17: Diagrame de Stare

Activităţile stărilor

Pentru reprezentarea unei stări, se foloseşte tot dreptunghiul cu colţurile rotunjite, compartimentat în trei zone:

- Compartimentul superior este dedicat numelui stării, care trebuie să fie scris indiferent dacă dreptunghiul este compartimentat sau nu.

- În compartimentul din mijloc se scriu eventualele variabile de stare (contori, date, constrângeri, etc.).

- În zona inferioară se trec activităţile, unde vor fi specificate evenimentele şi acţiunile.

Page 18: Diagrame de Stare

În cazul descrierii activităţilor, evenimentele şi acţiunile au aceeaşi sintaxă ca şi în cazul tranziţiilor şi anume:

Nume eveniment (listă_parametri) [condiţie_gardă]/element_ţintă.nume acţiune (listă_argumente)

Nume eveniment poate fi orice, dar, de obicei, există trei evenimente standard care pot declanşa acţiuni stărilor, şi anume:- entry – specifică acţiunea care se produce atunci când obiectul intră în starea respectivă;- exit – specifică acţiunea care se execută atunci când obiectul părăseşte starea respectivă;- do – specifică acţiunea care se execută atunci când obiectul se află în starea respectivă.