- 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.