En la entrada de hoy finiquitaremos la vista de máquinas de estados hablando sobre el estado compuesto y los tipos de estado que engloba. Así que sin más preámbulos, ¡al meollo!.
1. Estado Compuesto
Un estado compuesto es aquel que se ha descompuesto en uno o más subestados directos, formando estos últimos, parte de su estructura interna. Los subestados realmente son estados pero los llamamos así para diferenciarlos del estado que los contiene. Los distintos tipos de subestados son:
Tipo de estado
|
Descripción
|
Notación
|
Estado simple
|
Un estado sin estructura.
| |
Estado ortogonal
|
Un estado que se divide a su vez en dos o más regiones, diferenciadas entre sí por líneas discontinuas. Sólo uno de los subestados directos se encuentra activo concurrentemente cuando el estado compuesto está activo.
Al entrar en el mismo ell número de hilos de control se incrementa, y cuando se sale del mismo, se decrementan.
| |
Estado no ortogonal
|
Un estado que se divide a su vez en dos o más subestados. Sólo uno de los subestados se encuentra activo en cada momento cuando el estado compuesto está activo y todo ellos heredan las transiciones del estado externo.
| |
Estado inicial
|
Un pseudoestado que indica el estado inicial cuando es invocado el estado que lo engloba.
| |
Estado final
|
Un estado especial que indica la finalización de la actividad del estado que lo engloba.
Representa la destrucción de todos los objetos pertenecientes a ese estado.
| |
Finalizador
|
Un estado especial cuya activación finaliza la ejecución del objeto al que pertenece la máquina de estados.
| |
Conjunción
|
Un pseudoestado que encadena segmentos de transición de una transición de ejecución hasta la finalización.
| |
Elección
|
Un pseudoestado que realiza una bifurcación dinámica dentro de una transición de ejecución hasta su finalización.
| |
Estado de historia
|
Un pseudoestado que al activarse restaura el estado que se encontraba previamente activo dentro de un estado compuesto.
| |
Estado de referencia a submáquina
|
Un estado que referencia a la definición de una máquina de estados, que conceptualmente, reemplaza la submáquina de estados.
| |
Punto de entrada
|
Un pseudoestado externo dentro de la máquina de estado que identifica un estado interno como destino.
| |
Punto de salida
|
Un pseudoestado externos dentro de la máquina de estados que identifica un estado interno como origen.
|
Veamos un par de ejemplos:
Ejemplo de una máquina de estados para representar una compra virtual |
- Se permite al usuario identificarse. Para ello se llama al estado identificar cliente cuya entrada es el usuario y la contraseña.
- Si se produce un fallo se lleva el flujo hasta el estado final para finalizar la operación. También he visto como en vez de usar la notación de finalización se dirige el flujo hacia un estado final de error. Cómo siempre, dependerá de cada cliente, pero la forma genérica aceptada es la aquí expuesta.
- Si no hay fallo se sigue el flujo y se ejecuta la transición ok.
- Se muestran los productos y se le permite al usuario seleccionarlos:
- Se ejecuta la transición interna elegir(producto), donde producto será el código del mismo.
- Si se pulsa comprar se pasa al siguiente estado.
- Se añade al carro el producto seleccionado:
- Se ejecuta la transición interna añadir(producto).
- Si se pulsa continuar se vuelve al estado confirmarProducto.
- Si se pulsa confirmar se ejecuta el siguiente estado. Me he dado cuenta que en el gráfico no he puesto esta transición y he dejado "pulsar continuar", es lo que tiene el copiar + pegar como tampoco he puesto el entry/producto ya que es necesario pasárselo como entrada para que se ejecute correctamente, pero no me apetece cambiar el dibujo, vaguetes que estamos hoy, oiga ;) .
- Se procesa la compra:
- Se ejecuta la actividad entry/producto donde se recoge el producto enviado por el estado anterior.
- Se ejecutan las siguientes transacciones internas, y por ese orden:
- vender().
- vaciarCarrito().
- Se ejecuta la transicción ok y se finaliza el estado. Una vez finalizado todos los objetos usados en el mismo son liberados de la memoria.
Para que os hagáis una idea de lo que hace la falta de sueño ^^! |
Ejemplo de máquina de estados con un estado compuesto ortogonal Fuente: El Lenguaje Unificado de Modelado, Manual de Referencia (Booch, Jacobsom y Rumbaugh) |
- La primera región hace referencia a las prácticas en laboratorio y como ha de tener las dos prácticas para concluir esta parte de forma correcta.
- La segunda región representa el proyecto que se pide en la asignatura.
- La tercera y última región representa el examen final de la asignatura que tiene dos posibles resultados: aprobar o suspender.
- Es necesario que todas las regiones del estado ortogonal lleguen a su estado final para que el flujo prosiga, ya sea habiendo aprobado el examen final o no.
- Cada región representa las pruebas de una asignatura.
- No se ejecutan a la vez y para ejecutar una hay que finalizar todo el flujo teniendo que invocar el estado compuesto nuevamente para ejecutar las demás secciones del estado ortogonal.
2. Reutilizar Máquina de Estados
Buenas noticias se acercan por el horizonte capitán, ¡aaaar! |
Aquí un ejemplo:
Fuente: El Lenguaje Unificado de Modelado, Manual de Referencia (Booch, Jacobsom y Rumbaugh) |
La figura de la izquierda es la máquina principal desde la que se invocan las submáquinas y la figura de la derecha es la submáquina invocada de ayuda.
Ahora interpretemos lo que significa:
- Máquina principal:
- El estado EsperaDeComando tiene dos transiciones: ejecución y ayuda.
- Existen dos subsistemas:
- ejecutar: Ejecutar (para ejecutar el comando indicado en el estado EsperaDeComando).
- ayuda: Ayuda (cuando se introduce ayuda en el estado EsperaDeComando).
- Ambos subsistemas devuelven el control a EsperaDeComando cuando han finalizado su ejecución de manera automática.
- Subsistema Ayuda:
- Al ejecutarse el subsistema vemos que en su entrada se ejecuta la actividad "mostrar pantalla de ayuda".
- Dicho subsistema tiene un bucle o loop en el estado interno suyo (consultar/mostrar respuesta) del cual se saldrá cuando se active la transición salir.
- Cuando se ejecute la transición salir se llega al estado final, donde se liberaran de la memoria sus objetos y devolverá el control del flujo a su transición de salida.
Hasta aquí la vista de máquina de estados. Seguiremos con más y esperemos que mejor en siguientes entradas.
¡Gracias por leerme!.
No hay comentarios:
Publicar un comentario