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.