Concetto: Eventi e segnali
Un evento è la specifica di una ricorrenza significativa che dispone di una collocazione nel tempo e nello spazio. Un segnale è un tipo di evento che rappresenta la specifica di uno stimolo asincrono tra due istanze.
Relazioni
Descrizione principale

Introduzione

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.

Tipi di eventi

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.

Segnali

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

Eventi di chiamata

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.

Eventi di tempo e di modifica

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.

Invio e ricezione di eventi

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.