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