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