Concepto: Sucesos y señales
Un suceso es la especificación de una aparición significativa ubicada en el tiempo y el espacio. Una señal es una clase de suceso que representa la especificación de un estímulo asíncrono entre dos instancias.
Relaciones
Descripción principal

Introducción

En el mundo real, las cosas suceden, a menudo, de forma simultánea e imprevisible. Las "cosas que suceden" se llaman 'sucesos'.

En el contexto de máquinas de estado, los sucesos modelan la aparición de un estímulo que puede desencadenar una transición de estado. Entre los sucesos se encuentran las señales, las llamadas, el paso del tiempo o un cambio de estado. Los sucesos pueden ser síncronos o asíncronos.

Una 'señal' es una clase de suceso que representa la especificación de un estímulo asíncrono entre dos instancias.

Clases de sucesos

Los sucesos pueden ser externos o internos. Los sucesos externos son los que se producen entre el sistema y sus actores. Los sucesos internos son los que se producen entre los objetos que residen en el sistema. Hay cuatro clases de sucesos: señales, llamadas, el paso del tiempo y los cambios de estado.

Señales

Un señal representa a un objeto que envía (emite) de forma asíncrona un objeto y que es recibido (capturado) por otro. Las excepciones son un ejemplo de una clase de señal.

Las señales pueden tener instancias, aunque estas instancias no suelen modelarse de forma explícita. Las señales pueden estar implicadas en relaciones de generalización, y de este modo habilitar el modelado de jerarquías de sucesos.

Las señales pueden tener atributos y operaciones. Los atributos de una señal funcionan como parámetros.

Una señal puede enviarse como la acción de una transición de estado en una máquina de estado o el envío de un mensaje en una interacción. La ejecución de una operación también puede enviar señales. Al modelar una clase o una interfaz, un parte importante de la especificación del comportamiento del elemento es la especificación de las señales que pueden enviar sus operaciones. La relación entre una operación y los sucesos que puede enviar se modelan con una relación de dependencia, estereotipada como <<enviar>>.

Sucesos de llamada

Del mismo modo que un suceso de señal representa la aparición de una señal, un suceso de llamada representa el envío de una operación. En ambos casos, el suceso puede desencadenar una transición de estado en una máquina de estado.

Una señal es un suceso asíncrono y una llamada es, por lo general, un suceso síncrono. Esto significa que, cuando un objeto invoca una operación de otro objeto, el control pasa del remitente al destinatario hasta que se completa la operación, con lo cual el control vuelve al remitente. El modelado de un suceso de llamada se visualiza de la misma manera que un suceso de señal. En ambos casos, el suceso se muestra junto con sus parámetros como desencadenante de una transición de estado.

No hay pistas visuales que nos permitan distinguir un suceso de señal de un suceso de llamada; la diferencia se apreciará en la clase de destinatario, cuando declare una operación que maneja el suceso de llamada. La señales, por su parte, desencadenan una transición en la máquina de estado.

Sucesos de tiempo y cambio

Un suceso de tiempo representa el paso del tiempo. Los sucesos de tiempo se utilizan para sincronizar partes del sistema dependientes del tiempo mediante un mecanismo de reloj común. Un suceso de cambio representa un cambio en el estado del sistema o el cumplimiento de alguna condición.

Sucesos de envío y recepción

Los sucesos de señal y de llamada incluyen, como mínimo, dos objetos: un remitente y un destinatario. Cuando se envía la señal, el remitente envía la señal y, a continuación, sigue con el flujo de control sin esperar a que el destinatario responda. Contrariamente, en la semántica de la llamada de operación, el remitente espera a que el destinatario responda antes de reanudar el flujo de control. Por este motivo, las operaciones suelen utilizarse para representar el comportamiento "de bloqueo" (comportamiento que bloquea o impide que sucedan otras cosas), mientras que las señales se utilizan para representar un comportamiento de no bloqueo.

La acción de un objeto que envía una señal a un conjunto de objetos se llama 'envío múltiple', y se representa mediante el envío una señal a un contenedor que contiene un conjunto de destinatarios. La difusión es la acción de enviar una señal a todos los objetos de un sistema, y se representa mediante el envío de una señal a un objeto que representa al sistema en su totalidad; este 'objeto de sistema', a su vez, realiza el mecanismo de distribución de mensajes que aseguran que la señal se envía a todos los objetos adecuados en el sistema.