DIAGRAMAS DE ESTADO
Un diagrama de estados muestra la secuencia de estados que
un objeto ó una interacción pueden atravesar durante su existencia en respuesta
a eventos externos o internos que provocan los cambios de un estado a otro.
Un diagrama de estados es útil sólo para los objetos con un
comportamiento
Significativo. El
resto de objetos se puede considerar que tienen un único
Estado.
Un diagrama de estados completa la definición de los casos
de uso y sirven de base para el diseño de la interfaz de usuario.
Los diagramas de estados y los diagramas de
interacción son complementarios.
Un ejemplo de un
diagrama de estados podría ser:
En un diagrama de estados el objeto analizado siempre posee
un estado en un momento determinado, caracterizado por los valores de los
atributos y los enlaces del objeto. El estado en el que se encuentra un objeto
determina su comportamiento valido.
Un diagrama de estados es un grafo dirigido y deterministico
que permite expresar concurrencia, sincronización (Si la comunicación es
síncrona el objeto debe esperar la respuesta)y jerarquías de objetos. Los estados inicial y final están
diferenciados de los demás.
Los elementos que conforman un diagrama de estados son:
Estados
Un estado se representa mediante de un rectángulo con las
esquinas redondeadas. Puede tener de
forma opcional uno o más secciones, tales como el nombre y las transiciones
internas.
En la sección nombre se coloca el nombre del estado. Mientras que en la sección transiciones
internas se coloca una lista de acciones realizadas mientras el objeto están en
un estado según el siguiente formato:
evento argumentos / acción
Cada nombre de evento puede aparecer más de una vez en un
único estado. Las acciones pueden
utilizar los atributos y enlaces del objeto al que pertenecen o los parámetros
de transiciones de entrada. Las
siguientes acciones utilizan palabras reservadas:
- entrar: ocurre a la entrada del estado
- salir: ocurren a la salida del estado
- hacer: ocurren mientras está en el estado
Existen dos (2) estados especiales y que se distinguen del
resto:
El estado inicial y el estado final. El primero ocurren cuando se crea un objeto y
el segundo ocurre cuando este desaparece. Se ilustran mediante un punto negro y
un punto negro con un circulo externo respectivamente.
Subestados
Además de los compartimentos de nombre y transiciones
internas, cada estado puede tener un compartimiento con un diagrama anidado.
Un estado se puede refinar ya sea mediante subestados
concurrentes, a través de relaciones AND ó mediante subestados mutuamente
excluyentes, utilizando la relación OR.
La expansión de un estado en subestados concurrentes se
indica a través de un gráfico dividido en subregiones horizontales con líneas
discontinuas. Cada una de estas subregiones
horizontales puede tener un nombre opcional y debe contener un diagrama de
estados anidado, con estados disjuntos.
La expansión de un estado en subestados sirve para
determinar su estructura en detalle.
En dichos ilustraciones, los estados iniciales y finales se
consideran
Pseudoestados, es decir, son un artificio notacional, no un
elemento
Significativo.
Eventos
Un evento es un suceso notable. Una situación que puede
disparar una transición.
Los eventos pueden ser de distintos tipos, no necesariamente
excluyentes:
Señal recibida de forma explícita
Llamada a una operación desde otro objeto.
Condición que se verifica
Transcurso de un período de tiempo
Los eventos de señales ocurren cuando se recibe una señal
explicita desde otro objeto. Los eventos
de llamada ocurren se recibe una llamada de operación por parte de otro objeto.
Las señales y las llamadas se denotan por el nombre del disparador de la
transición.
Las señales y las llamadas se definen a través del siguiente
formato:
evento ( [parametro: tipoDatos] )
Los eventos de condiciones ocurren si una condición dada ha
sido verificada, normalmente descrita a través de una expresión lógica. Estos eventos se denotan como condiciones de
guarda en las transiciones, y no se les da nombre.
Un evento de condición se representa a través de una
condición sin evento, utilizando por ejemplo:
when( pH>7.0 )
Los eventos de tiempo ocurren por el transcurrir de un
cierto tiempo luego de que un evento ocurre o por la ocurrencia de una determinada
fecha u hora.
Un evento por transcurso de tiempo es una expresión que
evalúa dicho intervalo. Por defecto
indica el tiempo transcurrido en el estado en curso, por ejemplo:
after( 5 segundos )
Otros eventos temporales podrían ser especificados como
condiciones, como por ejemplo:
when( fecha=“1/01/2000” )
Transiciones
Hay dos (2) tipos de transiciones:
Transiciones simples
Una transición simple es una relación entre dos estados,
indicando que un objeto del primer estado entrará en el segundo estado y
realizará ciertas operaciones cuando ocurra un evento dado si determinadas
condiciones
se cumplen.
El disparador de la transición es la ocurrencia del evento
que está etiquetando la transición.
El evento podría tener parámetros, que se utilizarán en:
- - Las acciones especificadas en la transición
- - Las acciones iniciadas en el siguiente estado
Los eventos se procesan de forma exclusiva en cada momento,
nunca concurrente mente.
Si un evento no disparara ninguna transición, simplemente se
ignora.
Las transiciones se representan por una flecha sólida que va
de un estado a otro, etiquetada por un string de transición con el siguiente
formato:
Evento ( [parámetros] ) [condición guarda] / acción
La condición de guarda es una expresión lógica en términos
de los parámetros del evento disparado, atributos y enlaces del objeto al que
pertenece la máquina de estados.
No hay comentarios:
Publicar un comentario