Supponiamo di voler creare un modello che descriva il funzionamento di
un tostapane. Ovviamente, rivolgiamo la nostra attenzione agli state
diagram che un simile sistema può avere.
Quali sono i passi perchè un tostapane riesca a preparare un toast?
Per prima cosa bisognerà accendere il tostapane, quindi mettere le
fette di pan carrè all'interno di esso ed attendere alcuni minuti
perchè sia cotto il toast. Lo state diagram iniziale sarà, dunque:
Ma quello rappresentato non è il diagramma
finale. Per prevenre che il toast si bruci, la resistenza del tostapane
deve produrre calore che non superi determinati valori di temperatura.
Naturalmente, perchè il toast si cuocia a dovere è necessario anche che
la temperatura non vada al di sotto di un certo valore minimo.
Per tale ragione un termometro misura la temperatura prodotta dalla
resistenza e quando il limite massimo viene raggiunto la resistenza
passa in uno stato di attesa e non emette altro calore. Tale stato
perdura finché la temperatura decresce fino ad arrivare al valore
minimo. A questo punto ritorna lo stato di "In Lavorazione". Con questi
ulteriori dettagli, il nostro State Diagram diverrà:
Ma per descrivere la transizione tra lo
stato di "In Lavorazione" e lo stato "Inattivo" è necessario aggiungere
dei sottostati al diagramma, come mostrato nella prossima figura:
Si può notare che gli stati "In Lavorazione
" e "Inattivo" sono molto simili. Entrambi devono misurare e comparare
gli stati ma si differenziano nel processo di confronto della
temperatura. Infatti, lo stato di "In Lavorazione" deve comparare la
temperatura corrente con la temperatura limite superiore (se viene
raggiunta allora si passa allo stato "Inattivo") e lo stato "Inattivo"
confronta la temperatura corrente con la temperatura limite inferiore
(lo stato "Inattivo" viene rimpiazzato dallo stato di "In Lavorazione"
quando accade che la temperatura scende al di sotto del limite).
È utile utilizzare gli State Diagrams perché essi aiutano gli analisti,
i disegnatori e gli sviluppatori a capire il comportamento degli
oggetti in un sistema. Gli sviluppatori, in particolare, devono
conoscere come gli oggetti devono comportarsi in quanto è loro compito
tradurre tali comportamenti in software.