Conceito: Eventos e Sinais
Um evento é a especificação de uma ocorrência significativa que possui um local no tempo e no espaço. Um sinal é um tipo de evento que representa a especificação de um estímulo assíncrono entre duas instâncias.
Relacionamentos
Descrição Principal

Introdução

No mundo real, os fatos acontecem; em geral, simultaneamente e de modo imprevisível. Os "fatos que acontecem" são chamados de 'eventos'.

No contexto das máquinas de estado, os eventos modelam a ocorrência de um estímulo que pode disparar uma transição de estado. Os eventos podem incluir sinais, chamadas, o decorrer do tempo ou uma mudança de estado. Eles podem ser síncronos ou assíncronos.

Um 'sinal' é um tipo de evento que representa a especificação de um estímulo assíncrono entre duas instâncias.

Tipos de Eventos

Os eventos podem ser externos ou internos. Os eventos externos são aqueles que ocorrem entre o sistema e seus atores. Os eventos internos são aqueles que ocorrem entre os objetos que vivem no sistema. Há quatro tipos de eventos: sinais, chamadas, decorrência do tempo e alteração no estado.

Sinais

Um sinal representa um objeto que é enviado (lançado) assincronamente por um segundo objeto e, em seguida, recebido (capturado) por um terceiro objeto. As exceções são um exemplo de um tipo de sinal.

Os sinais podem ter instâncias, embora essas instâncias não sejam, em geral, explicitamente modeladas. Eles podem estar envolvidos em relacionamentos de generalização, permitindo a modelagem das hierarquias de eventos.

Eles podem ter atributos e operações. Os atributos de um sinal atuam como seus parâmetros.

Um sinal pode ser enviado como a ação de uma transição de estado em uma máquina de estado ou como o envio de uma mensagem em uma interação. A execução de uma operação também pode enviar sinais. Quando uma classe ou uma interface estiver sendo modelada, uma parte importante na especificação do comportamento é especificar os sinais que podem ser enviados por suas operações. O relacionamento entre uma operação e os eventos que ela pode enviar são modelados utilizando um relacionamento de dependência, estereotipados como <<envio>>.

Eventos de Chamada

Assim como um evento de sinal representa a ocorrência de um sinal, um evento de chamada representa a execução de uma operação. Nos dois casos, o evento pode disparar uma transição de estado em uma máquina de estado.

Enquanto um sinal é um evento assíncrono, um evento de chamada é, em geral, síncrono. Isso significa que, quando um objeto chama uma operação em outro objeto, o controle passa do emissor para o receptor até que a operação seja concluída. Depois disso, o controle retorna ao emissor. A modelagem de um evento de chamada é visualizada da mesma maneira que um evento de sinal. Nos dois casos, o evento é exibido junto com seus parâmetros como o trigger de um estado de transição.

Embora não existam indícios visuais para distinguir um evento de sinal de um evento de chamada, a diferença aparecerá na classe do receptor, já que ela declarará uma operação que manipula o evento de chamada. No caso de um sinal, haverá uma transição na máquina de estado que será disparada pelo sinal.

Eventos de Tempo e Alteração

Um evento de tempo representa o decorrer do tempo. Os eventos de tempo são usados para sincronizar partes do sistema que dependem do tempo usando um mecanismo de relógio comum. Um evento de alteração representa uma mudança no estado do sistema ou o cumprimento de alguma condição.

Enviando e Recebendo Eventos

Os eventos de sinal e de chamada envolvem, pelo menos, dois objetos: um emissor e um receptor. Quando o sinal é enviado, o emissor o transmite e continua em seu fluxo de controle sem precisar esperar um retorno do receptor. Isso está em contraste com a semântica da chamada de operação, em que o emissor deve aguardar o receptor responder para retomar seu fluxo de controle. Por isso, as operações são geralmente utilizadas para representar um comportamento de bloqueio (que bloqueia ou impede outros eventos), enquanto os sinais são utilizados para representar um comportamento sem bloqueio.

O ato de um objeto enviar um sinal a um conjunto de objetos chama-se 'difusão seletiva' e é representado pelo envio de um sinal a um contêiner que retém um conjunto de receptores. A difusão é o ato de enviar um sinal a todos os objetos de um sistema e é representado pelo envio de um sinal a um objeto que representa o sistema como um todo. Esse 'objeto sistema', por sua vez, percebe o mecanismo de distribuição de mensagens, que assegura que o sinal será enviado a todos os objetos apropriados do sistema.