Nel mondo reale, le cose succedono, spesso contemporaneamente e in modo imprevedibile. Le "cose che succedono" sono
chiamate 'eventi'.
Nel contesto delle macchine a stati, gli eventi modellano la ricorrenza di uno stimolo che potrebbe attivare una
transizione dello stato. Gli eventi includono i segnali, le chiamate, il passare del tempo o una modifica nello stato.
Gli eventi possono essere sincroni o asincroni.
Un 'segnale' è un tipo di evento che rappresenta la specifica di uno stimolo asincrono tra due istanze.
Gli eventi possono essere esterni o interni. Gli eventi esterni sono quelli che passano tra il sistema e i relativi
attori. Gli eventi interni sono quelli che passano tra gli oggetti che esistono all'interno del sistema. Esistono
quattro tipi di eventi: segnali, chiamate, il passare del tempo e una modifica nello stato.
Un segnale rappresenta un oggetto distribuito (emesso) in modo asincrono da un oggetto e quindi ricevuto (acquisito) da
un altro. Le eccezioni sono un esempio di tipo di segnale.
I segnali possono avere delle istanze, sebbene tali istanze non vengano, generalmente, modellate esplicitamente. I
segnali possono essere coinvolti in relazioni di generalizzazione, consentendo la modellazione di gerarchie di eventi.
I segnali possono avere attributi e operazioni. Gli attributi di un segnale servono come parametri dello stesso.
Un segnale può essere inviato come azione di una transizione di stato in una macchina a stati o come invio di un
messaggio in un'interazione. L'esecuzione di un'operazione può anche inviare dei segnali. In caso di modellamento di
una classe o di un'interfaccia, una parte importante della specifica della funzionalità dell'elemento è la definizione
dei segnali che è possibile inviare tramite le relative operazioni. La relazione tra un'operazione e gli eventi che
esso invia vengono modellati utilizzando una relazione di dipendenza, stereotipata come <<send>>.
Così come un evento di segnale rappresenta la ricorrenza di un segnale, un evento di chiamata rappresenta la
distribuzione di un'operazione. In entrambi i casi, l'evento può attivare una transizione di stato in una macchina a
stati.
Mentre un segnale è un evento asincrono, un evento di chiamata è, in generale, sincrono. Ciò significa che, quando un
oggetto richiama un'operazione su un altro oggetto, il controllo passa dal mittente al ricevitore, finché l'operazione
non viene completata, dopodiché il controllo ritorna al mittente. La modellazione di un evento di chiamata viene
visualizzata nello stesso modo di un evento del segnale. In entrambi i casi, l'evento viene visualizzato insieme ai
relativi parametri come trigger per una transizione di stato.
Sebbene non esistano spunti visivi per distinguere un evento del segnale da un evento di chiamata, la differenza sarà
evidente nella classe del ricevitore, come dichiarerà un'operazione che gestisce l'evento di chiamata. Nel caso di un
segnale, vi sarà una transizione nella macchina a stati, attivata dal segnale.
Un evento di tempo rappresenta il trascorrere del tempo. Tali eventi vengono utilizzati per sincronizzare le parti
dipendenti dal tempo del sistema, utilizzando un comune meccanismo di orologio. Un evento di modifica rappresenta una
modifica nello stato del sistema o la soddisfazione della stessa condizione.
Gli eventi del segnale e di chiamata comprendono almeno due oggetti: un mittente e un ricevitore. Quando viene inviato
il segnale, il mittente lo distribuisce e quindi continua il proprio flusso di controllo senza attendere un ritorno dal
ricevitore. Ciò è in contrasto con la semantica della chiamata dell'operazione in cui il mittente attende una risposta
dal ricevitore prima di riprendere il proprio flusso di controllo. A causa di ciò, le operazioni vengono, generalmente,
utilizzate per rappresentare una funzionalità di "blocco" (funzionalità che blocca o impedisce il verificarsi di altri
eventi), mentre i segnali vengono utilizzati per rappresentare una funzionalità non di blocco.
L'atto di un oggetto che invia un segnale a una serie di oggetti è chiamato 'multi-casting' ed è rappresentato
dall'invio di un segnale a un contenitore che contiene una serie di ricevitori. La diffusione è l'atto di invio di un
segnale a tutti gli oggetti in un sistema ed è rappresentato dall'invio di un segnale a un oggetto che rappresenta il
sistema come un'entità unica; tale 'oggetto di sistema' realizza, a turno, il meccanismo di distribuzione dei messaggi
che assicura che il segnale venga inviato a tutti gli oggetti appositi nel sistema.
|