È possibile indicare sugli State Diagram un evento che causa il verificarsi di una transizione (un evento trigger) e l'azione che viene eseguita che fa sì che il cambio di stato possa avvenire.
Per aggiungere graficamente eventi e azioni si scrive vicino la linea
di transizione una descrizione di essi, utilizzando una barra per
separare un evento di trigger da un'azione.
Qualche volta può accadere che un evento causi una transizione senza
azioni associate e, qualche altra volta una transizione si verifica
perchè uno stato completa un'attività (piuttosto che a causa di un
evento). Questo tipo di transizione viene chiamata transizione senza
trigger (triggerless transition).
È anche possibile inserire una condizione di controllo (guard condition).
Quando la si incontra, la transizione ha luogo. (Per esempio lo screen
saver viene attivato quando l'intervallo di tempo di x minuti viene
raggiunto).
Gli State Diagrams consentono, inoltre, di definire degli stati
all'interno di altri stati. In tal caso, gli stati interni verranno
definiti sotto-stati (substates) i quali, a loro volta, possono essere disinti in sottostati sequenziali e sottostati concorrenti
I primi, come si evince dal nome stesso, rappresentano una sequenza di
stati che vengono raggiunti uno susseguentemente all'altro. I
sottostati concorrenti, invece, rappresentano due o più sottostati
sequenziali che si verificano allo stesso tempo. Tutto ciò viene
rappresentato graficamente con una linea tratteggiata tra gli stati
concorrenti. Per comprendere meglio questi concetti, comunque, si
faccia riferimento all'esempio del paragrafo successivo.
L'UML fornisce un simbolo che mostra che uno stato composto ricorda i
suoi attivi sottostati quando l'oggetto effettua transizioni fuori
dallo stato composto. Il simbolo usato è: unito da una linea continua ai sottostati "ricordati", con una freccia che punta al sottostato opportuno.
Un messaggio che causa una transizione in un oggetto dello State
Diagram (che riceve il messaggio stesso) viene chiamato segnale (signal).
Nel mondo orientato agli oggetti, il mandare un segnale viene visto
allo stesso modo come la creazione di un oggetto Segnale e la
trasmssione di questo ad un oggetto Ricevente. L'oggetto Segnale può
avere delle proprietà che saranno rappresentate da attributi.
Infine, poiché un segnale è un oggetto, è anche possibile creare gerarchie di ereditarietà di segnali.