lunes, 27 de abril de 2015

UML Capítulo 13: Vista de Máquina de Estados I

¡Hola de nuevo internauta!,

     Bienvenido una vez más a este blog y gracias por tu paciencia porque sé que estos temas son un poquito cansinos.

Hoy empezaremos con el primer artículo sobre la vista de máquinas de estados, fundamental para entender los flujos que se implementarán más adelante. Pero empecemos por el comienzo que exige toda buena historia(si exceptuamos Pulp Fiction, claro).


Imagen Chiste
Tranquilo Samuel... digo Furia, digo Jules

Bueno, tras esta pequeña interrupción de Mr. Jules, continúo. A modo de introducción indicaros que esta vista se caracteriza por los siguientes puntos:
  • Describe el comportamiento dinámico de un objeto en un periodo de tiempo.
  • Indica la secuencia de eventos que un objeto puede ejecutar durante su tiempo de vida.
Así que sin más vamos al meollo.


La vista de Máquina de estados está compuesta por los siguientes elementos:

1. Evento

Es un tipo de ocurrencia significativa que tiene localización en tiempo y espacio y no posee una duración determinada. Se modela algo como evento si su ocurrencia tiene consecuencias. Pueden tener parámetros para cada ocurrencia de un evento individual. Los tipos de eventos existentes a día de hoy están explicados en la siguiente tabla:


Tipo de Evento
Descripción
Sintáxis
Evento de cambio
  • El evento se cumple cuando se satisface una condición.
  • Se deben usar cuando no hay otra manera más explícita de comunicación.
Cuando(expresión)
Evento de llamada
  • Recepción por un objeto de una petición explícita síncrona.
  • La clase receptora elije si se implementa como método o disparador.
op(a:T)
Evento de señal
  • Es un tipo de clasificador pensado como vehículo de comunicación entre dos objetos.
  • Recepción de una comunicación asíncrona. explícita y con nombre, entre objetos.
  • Para modelar comunicaciones bidireccionales se puede usar el mismo objeto.
  • Pueden tener relaciones de generalización y ser hijas de otras señales.
nombreS(a:T)
Evento de tiempo
Representan el paso del tiempo.
Puede especificarse de manera absoluta(ej: hora) o relativa(ej: tiempo transcurrido desde un evento dado).
tras(tiempo)

2. Estado


Los estados son las unidades de control a partir de las cuales se construyen las máquinas de estados. Se conectan entre si mediante transacciones, las cuales, son procesadas por el estado que dejan.


Ejemplo Notacion Estado
Ejemplo de notación de estado
Más adelante hablaremos de los estados compuestos que son aquellos que engloban un conjunto de transiciones y estados.

3. Transición

Una transición es el paso de un estado a través de un evento, una condición de guarda y un efecto. Esto que parece muy complejo es sencillo de entender a través del ejemplo gráfico que pondremos más adelante. Los tipos de transiciones están indicados en la siguiente tabla:



Tipo de transición
Descripción
Sintaxis
Transición de entrada
La especificación de una actividad de entrada que se ejecuta cuando se entra en el estado.
entry/actividad
entrada/actividad
Transición de salida
La especificación de una actividad de salida que se ejecuta cuando se sale del estado.
exit/actividad
salida/actividad
Transición externa
Una respuesta a un evento que causa un cambio de estado. Ejecuta las actividades de entrada y salida de los estados si existen.
e(a:t)[exp]/actividad
Transición interna
Respuesta a un evento que causa la ejecución de un efecto pero no causa el cambio de estado o la ejecución de las actividades de entrada y salida.
e(a:t)[exp]/actividad
Transición de finalización
Se dispara cuando finaliza la actividad del estado que deja. Tienen prioridad sobre estados normales


Debemos tener en cuenta también los siguientes conceptos que se usan en las transiciones:

Evento disparador: El evento que permite la ejecución de la transición. Se manejan de uno en uno así que se disparará solamente uno cada vez.

Condición de guarda: Es una expresión booleana que evalúa cuando ocurre el evento disparador. Así, si tenemos el mismo evento disparador repetido, sólo ejecutará la transición aquel que cumpla la condición de guarda; si hay un conflicto sólo se ejecuta una de ellas no estando determinado cuál. La elección puede ser aleatoria o depender de los detalles de la implementación.


Efecto: Todo efecto pertenece a una transición por lo que se ejecutará cuando esta se dispare. Puede ser una acción o una actividad.


Cambio de estado: Se produce cuando se completa la ejecución de un efecto, pasando a ser el estado activo aquel en el cual ha finalizado dicha ejecución.


Estados anidados: Son aquellos que están anidados dentro de otro estado(llamado compuesto). Lo veremos en profundidad en la siguiente entrada.


Actividades de entrada y salida: Son aquellas actividades que se realizan cuando se entra y sale del estado. Las de entrada suelen usarse para la configuración necesaria dentro del estado(por ejemplo dar valores a variables) y las de salida se usan para realizar la limpieza de dicha configuración.


Veamos esto con un ejemplo:



Ejemplo de Transiciones

¿Y esto que nos quiere decir?, expliquémoslo entonces:


  1. Aunque no hemos hablado aquí de ellos tenemos un estado inicial(Inicio) desde el cual se ejecuta todo y dos estados finales( Fin y error)en los que se finaliza todos aunque sólo se puede ejecutar uno de ellos debido al flujo de eventos disparadores.
  2. Se ejecuta Buscar persona donde hay las siguientes actividades:
    1. Se pide en su entrada el código de persona.
    2. Se obtiene en su salida el NIF de la persona.
    3. Hay una transición interna que da el valor de mensaje si esta persona no existe.
    4. Si la persona no existe se ejecuta el evento no existe, tras cual se ejecuta la acción mostrar mensaje(). Vemos que primero se ejecuta el evento y después la acción. Finalizamos en el estado Fin.
    5. Si la persona existe se ejecuta el evento existe.
      1. Se ejecuta Obtener Datos donde hay las siguientes actividades:
        1. Se pide en su entrada el NIF de la persona.
        2. Se envía en su salida los datos de esa persona.
    6. Vemos que hay dos eventos disparadores con una condición de guarda que indica que sólo se puede ejecutar uno u otro si se cumple dicha condición(si no se cumple se implementará la solución o se avisará al analista y tendrá que modificarlo):
      1. Si operación es igual a correcta se ejecuta el evento ok y se llega al estado final Fin.
      2. Si operación es igual a incorrecta se ejecuta el evento ko y se llega al estado final error.
Podemos observar cómo se ejecuta sólo un evento cada vez y cómo se llega sólo a un estado de finalización. Además sólo existe un estado de inicio ya que sólo puede haber un comienzo.

Y hasta aquí la entrada de hoy. En la siguiente finalizaremos la vista de máquina de estados y todos estos conceptos quedarán más claros. ¡Espero haberos ayudado!.

¡Gracias por leerme!.

No hay comentarios:

Publicar un comentario