Diagrama masinilor de stare

Diagrama maşinilor de stare numită şi diagrama de stare modelează comportamentul dinamic al unei entităţi pe baza modului în care aceasta răspunde la evenimente. Specifică secvenţa de stări prin care o entitate trece pe parcursul ciclului de viaţă.

Diagramele maşinilor de stare sunt utilizate pentru descrierea comportamentului complex al sistemelor, actorilor, sub-sistemelor şi obiectelor.

Principalele componente ale unei diagrame de stare sunt:

  • Stare iniţială – este reprezentată sub forma unui cerc plin şi reprezintă starea iniţială a componentei. Mai este numită şi pseudo-stare;
  • Stare – este reprezentată sub forma unui dreptunghi cu colturile rotunjite. Reprezintă starea componentei la un moment dat. O stare poate avea asociate una sau mai multe activităţi ce se desfăşoară atunci când componenta se află în starea respectivă;
  • Tranziţie – este reprezentată sub forma unei săgeţi. Tranziţiile indică trecerea componentei dintr-o stare în altă stare. Tranziţiile pot avea ataşate informaţii cu privire la condiţiile de execuţie sub forma: eveniment [condiţie] / acţiune. Evenimentul indică cauza tranziţiei dintr-o stare în altă stare. Condiţia indică o expresie a cărei valoare de adevăr trebuie să fie true pentru ca tranziţia să se poată executa. Acţiunea indică operaţia sau lista de operaţii care se realizează în momentul executării tranziţiei;
  • Stare finală – este reprezentată sub forma unui cerc plin circumscris într-un alt cerc şi la fel ca şi starea iniţială este o pseudo-stare. Indică distrugerea componentei descrisă prin diagrama de stare;
  • Stare intrare – este reprezentată sub forma unui cerc gol şi reprezintă punctul de intrare într-o stare compusă;
  • Stare exit – este reprezentată sub forma unui cerc cu litera „X” în interior şi este folosită pentru a modela un punct de terminare a unei stări compuse. La execuţia acestei stări se va executa automat starea conectată la această pseud-stare;
  • Stare „history” – este reprezentată sub forma unui cerc cu litera „H” în interior şi este utilizată pentru a memora starea anterioară a unei maşini de stare atunci când activitatea acesteia a fost întreruptă;
  • Stare punct condiţional – este reprezentată sub forma unui cerc gol şi este utilizată pentru modelarea tranziţiilor condiţionate – trecerea într-o stare sau alta în funcţie de condiţia de adevăr a unei expresii;
  • Stare punct de joncţiune – este reprezentat sub forma unui cerc plin. Într-un punct de joncţiune pot intra una sau mai multe tranziţii şi pot părăsi acest punct de asemenea una sau mai multe tranziţii.

FIGURA 1

În figura de mai sus este exemplificată diagrama de stare pentru descrierea procesului de retragere şi depozitare de numerar la un bancomat. La o stare pot fi asociate una sau mai multe acţiuni reprezentând invocare unor metode. De exemplu în cazul stării Authentication au fost ataşate trei acţiuni. Invocările de metode se pot efectua la intrarea în starea (numele metodei este precedat de notaţia /entry), în momentul în care componenta se află în starea respectivă (numele metodei este precedat de notaţia /do) şi la ieşirea din starea respectivă (numele metodei este precedat de notaţia /exit).

Nu este necesar ca o tranziţie să fie însoţită de toate condiţiile de execuţie. Tranziţiile pot fi marcate doar de evenimentul care determină execuţia tranziţiei sau de condiţia care determină execuţia tranziţiei, eventual însoţite de acţiunea invocată în momentul execuţiei.

FIGURA 2

Pentru descrierea proceselor complexe diagrama de stare permite modelarea de stări compozite care pot fi descompuse la rândul lor în diagrame de stări. În figura 2 este exemplificată o diagrama de stare ce conţine o stare compozită. Stările compozite pot fi reprezentate în cadrul unei diagrame şi în formă condensată (vezi starea SubmachineState2), şi apoi această să fie detaliată într-o diagramă separată.

O proprietate importantă a stărilor complexe este aceea că acestea pot fi partajate în regiuni, permiţând astfel definirea concurenţei prin intermediul diagramelor de stare. În figura 3 este exemplificată o diagramă de stare cu două regiuni concurente.

FIGURA 3

În figura 4 este exemplificată folosirea stărilor compuse şi a pseudo-stărilor exit şi history pentru a descrie modul în care un fir îşi poate întrerupe activitatea şi revine apoi la starea de unde acesta a fost întrerupt.

FIGURA 4

În cadrul diagramei de mai sus la părăsirea stării compuse CurrentThread, starea curentă este salvată folosind pseudo-starea history, astfel încât la revenirea în starea compusă se va reveni la starea din care s-a produs ieşirea (fie starea S2 fie starea S3).

FIGURA 5

În figura 5 este exemplificată folosirea stărilor de joncţiune şi de selecţie. Pseudo-starea selecţie modelează executarea unei tranziţii sau a altei tranziţii în funcţie de o condiţie.