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:
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
y
,
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:
-
Condición que toma el valor de verdadero o falso
-
Recepción de una señal de otro objeto en el modelo
-
Recepción de un mensaje
-
Paso de cierto período de tiempo, después de entrar al estado
o de cierta hora y fecha particular
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:
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.
Vea más información aquí.
Pablo
Figueroa
Versión 1.1