Sunteți pe pagina 1din 11

Diagrame de stare

- Concepte şi exemple -
Studiu de caz: ceas digital

1. Modul curent e modul “Afişare”;


2. Când se apasă o dată butonul, ecranul trece în “schimbă ora”. Se
poate schimba ora (prin incrementare cu 1) prin apăsarea repetată a
butonului de Avans;
3. Dacă apăsaţi butonul de mod din nou, ecranul trece în “schimbare
minute”. Apăsând butonul Avans repetat, se modifică minutele cu o
unitate.
4. Apăsând încă o dată butonul Mod, ceasul trece în “Afişare”.
Desenarea diagramei de stare

Obs. În starea Afişare, e posibil să fie apăsat butonul Avans, dar


apăsarea lui nu produce nici un eveniment, de aceea nu s-a mai
reprezentat.
Se consideră următoarea comportare: dacă se apasă lung butonul
Avans (mai mult de 2 secunde), incrementarea orei sau minutelor se
poate face mai repede

Cum poate fi modelat un asemenea comportament?

În exemplul de faţă, apăsarea butonului Avans o dată e echivalent cu


perechea «apasa» şi «eliberează». În condiţiile noului comportament,
se introduce evenimentul “eliberează buton” pentru a gestiona
eficient timpul de apăsare.

O primă soluţie ar fi inserarea unei condiţii asupra duratei de


apăsare, precum şi a unei noi stări, numite “Incrementare rapidă”
(vezi figura de pe pagina următoare).
Obs. Soluţia de mai sus e incorectă, pentru că apăsarea butonului nu
poate fi contorizată în timp (acţiunile sunt atomice).
Soluţii posibile:
• introducerea unei activităţi finite , “aşteaptă 2 sec”;
• folosirea cuvântului cheie «after».
Să presupunem acum că se introduc alte două facilităţi ceasului: buton de
lumină şi buton de alarmă.

În acest caz, avem 3 comportamente concurente:


1. controlul afisării;
2. controlul alarmei;
3. controlul luminii.
Le tratăm în ordinea simplităţii:
3. Controlul luminii

Obs. Controlul luminii poate fi modelat independent de controlul afişării şi


controlul alarmei.

1. Controlul alarmei se poate face ca în exemplul “Ceas cu alarmă”.


1. Controlul afişării depinde de stările de pînă acum, în sensul în care
putem modifica, prin apăsarea butonului Mod, şi timpul de declanşare a
alarmei (prin modificarea orei şi minutelor). De aceea, trebuie introduse 2
noi stări.
Să punem toate comportamentele împreună.
- O primă soluţie: prin intermediul unei diagrame de clasă
- A doua soluţie: arătând “regiunile concurente” din cadrul diagramei de stare. E
mai puţin folosită decât prima soluţie.

S-ar putea să vă placă și