Conceptos básicos en un Diagrama de Estados

Muestra el conjunto de estados por los cuales pasa un objeto durante su vida en una aplicación, junto con los cambios que permiten pasar de un estado a otro.Un ejemplo en el caso de la cafetera son los estados posibles para la clase MaquinaCafe:

Ejemplo Estados de la Maquina de Cafe

Estado

Identifica un periodo de tiempo del objeto (no instantáneo) en el cual el objeto esta esperando alguna operación, tiene cierto estado característico o puede recibir cierto tipo de estímulos. Se representa mediante un rectángulo con los bordes redondeados, que puede tener tres compartimientos: uno para el nombre, otro para el valor característico de los atributos del objeto en ese estado y otro para las acciones que se realizan al entrar, salir o estar en un estado (entry, exit o do, respectivamente). En el caso del ejemplo anterior, se tienen cuatro estados (EnFuncionamiento, SinCambio, SinIngredientes, MalFuncionamiento) , en los cuales se desarrollan ciertas acciones al entrar; por ejemplo, al entrar al estado SinIngredientes se debe realizar la accion "Indicador SinIngredientes en On".

Se marcan también los estados iniciales y finales mediante los símbolos Estado inicialEjemplo de estado final, respectivamente.

Eventos

Es una ocurrencia que puede causar la transición de un estado a otro de un objeto. Esta ocurrencia puede ser una de varias cosas: El nombre de un evento tiene alcance dentro del paquete en el cual está definido, no es local a la clase que lo nombre.

En el caso del ejemplo anterior se encuentra nombrado en varias transiciones el evento userInput, que recibe como parámetro un Button , para indicar el botón que ha sido presionado por el usuario de la máquina de café.

Envío de mensajes

Además de mostrar y transición de estados por medio de eventos, puede representarse el momento en el cual se envían mensajes a otros objetos. Esto se realiza mediante una línea punteada dirigida al diagrama de estados del objeto receptor del mensaje. Si tomamos como ejemplo un control remoto que puede enviar órdenes de encender o apagar al televisor o a la videograbadora se puede obtener un diagrama de estados como el siguiente:

Ejemplo de envio de mensajes

Los tres aparatos tienen diagramas de estados separados y algunas de las transiciones del control remoto causan el envío de mensajes (togglePower) a los otros aparatos.

Transición simple

Una transición simple es una relación entre dos estados que indica que un objeto en el primer estado puede entrar al segundo estado y ejecutar ciertas operaciones, cuando un evento ocurre y si ciertas condiciones son satisfechas. Se representa como una línea sólida entre dos estados, que puede venir acompañada de un texto con el siguiente formato:

event-signature [ guard-condition] / action-expression ^ send-clause

event-signature es la descripción del evento que da a lugar la transición, guard-condition son las condiciones adicionales al evento necesarias para que la transición ocurra, action-expression es un mensaje al objeto o a otro objeto que se ejecuta como resultado de la transición y el cambio de estado y send-clause son acciones adicionales que se ejcutan con el cambio de estado, por ejemplo, el envio de eventos a otros paquetes o clases.

En el caso del ejemplo inicial de esta hoja se tiene una transición entre los estados IntroduciendoMoneda y SeleccionadoAzucaryProducto que tiene una transición con el siguiente detalle:

userInput( Button ) | [TodoOk=true} / MostrarNivelAzucar, MostrarProducto

El evento que dispara el cambio de estado es userInput( Button). Se requiere como condición adicional que no se haya detectado ninguna falla (TodoOk = true) y se ejecuta MostrarNivelAzucar y MostrarProducto, que deberían ser ejecutables por el objeto al cual pertenece el diagrama.

Transición interna

Es una transición que permanece en el mismo estado, en vez de involucrar dos estados distintos. Representa un evento que no causa cambio de estado. Se denota como una cadena adicional en el compartimiento de acciones del estado.

Supongamos el estado de una interfaz pidiendo password al usuario. En este caso puede tenerse una transición interna que muestre una ayuda al usuario. Esta transición se muestra en el siguiente diagrama con la cadena "help / display help " dentro del cuerpo del estado.

Ejemplo de evento interno

Vea más información aquí.



Pablo Figueroa
Versión 1.1