Introducción a State Máquinas en IPF

The payments DSL permite a los clientes definir flujos utilizando máquinas de estado. Para las personas que están familiarizadas con el concepto de máquinas de estado de UML V2, IPF admite un subconjunto de UML: por ejemplo, solo se admiten acciones "en transición" y, aunque IPF no admite subestados paralelos (ni subestados en absoluto), sí permite múltiples acciones de transición.triggered en paralelo. Esta página está destinada a personas que trabajarán con IPF y que no entendieron la frase anterior, porque no están familiarizadas con el concepto de máquinas de estado.

Una máquina de estados finitos (FSM) o autómata de estados finitos (FSA, plural: autómatas), autómata finito, o simplemente una máquina de estados, es un modelo matemático de computación. Es un máquina abstracta que puede estar en exactamente uno de un número finito de estados en cualquier momento. El FSM puede cambiar de un estado a otro en respuesta a algún entradas; el cambio de un estado a otro se llama transición.

Una máquina de estados finitos (FSM) se define por una lista de sus estados, su estado inicial y las entradas que activan cada transición. Las máquinas de estados finitos son de dos tipos —https://en.wikipedia.org/wiki/Deterministic_finite_automaton[máquinas de estados finitos deterministas] y máquinas de estados finitos no deterministas, IPF solo admite máquinas de estados finitos deterministas.

El comportamiento de las máquinas de estado puede observarse en muchos dispositivos de la sociedad moderna que realizan una secuencia de acciones predeterminada dependiendo de una secuencia de eventos con los que se les presenta. Ejemplos simples son: las máquinas expendedoras, que dispensan productos cuando se deposita la combinación adecuada de monedas; los ascensores, cuya secuencia de paradas está determinada por los pisos solicitados por los pasajeros; los semáforos, que cambian de secuencia cuando hay coches esperando; y las cerraduras de combinación, que requieren la entrada de una secuencia de números en el orden correcto.

Ejemplo: Torniquete de monedas

Ejemplo de un mecanismo simple que puede ser modelado por una máquina de estados es un torniquete. Un torniquete, utilizado para controlar el acceso a metros y atracciones de parques de diversiones, es una puerta con tres brazos giratorios a la altura de la cintura, uno de los cuales se encuentra en la entrada. Inicialmente, los brazos están bloqueados, impidiendo el acceso y evitando que los usuarios pasen. Depositar una moneda o ficha en una ranura del torniquete desbloquea los brazos, permitiendo el paso de una sola customer para avanzar. Después del customer pasa a través, los brazos se bloquean nuevamente hasta que se inserte otra moneda.

Considerado como una máquina de estados, el torniquete tiene dos estados posibles: Bloqueado y Desbloqueado. Hay dos entradas posibles que afectan su estado: introducir una moneda en la ranura (moneda) y empujar el brazo (empujar). En el estado bloqueado, empujar el brazo no tiene efecto; no importa cuántas veces se dé la entrada empujar, permanece en el estado bloqueado. Introducir una moneda – es decir, proporcionar a la máquina una entrada moneda – cambia el estado de Bloqueado a Desbloqueado. En el estado desbloqueado, introducir monedas adicionales no tiene efecto; es decir, proporcionar entradas adicionales moneda no cambia el estado. Sin embargo, un customer Al empujar a través de los brazos, al proporcionar una entrada de push, se cambia el estado de nuevo a Locked.

La máquina de estados del torniquete puede ser representada por una tabla de transición de estados, que muestra para cada estado posible, las transiciones entre ellos (basadas en las entradas proporcionadas a la máquina) y las salidas resultantes de cada entrada. En IPF, las entradas son Domain Events y las Salidas son Acciones.

Actual State Entrada Dominio Event Siguiente State Salida Acción

Bloqueado

moneda

Moneda Válida Insertada

Desbloqueado

Desbloquea el torniquete para que el customer puede avanzar.

Desbloquear

empujar

Torniquete girado

Bloqueado

None

Desbloqueado

moneda

Moneda Válida Insertada

Desbloqueado

None

empujar

Torniquete girado

Bloqueado

Cuando el customer ha empujado, bloquea el torniquete.

Bloquear

La máquina de estados del torniquete también puede ser representada por un grafo dirigido llamado diagrama de estados (abajo). Cada estado es representado por un nodo(círculo). Los bordes (flechas) muestran las transiciones de un estado a otro. Cada flecha está etiquetada con la entrada que activa esa transición. Una entrada que no provoca un cambio de estado (como una entrada moneda en el estado Desbloqueado) se representa mediante una flecha circular que regresa al estado original. La flecha que entra en el nodo Bloqueado desde el punto negro indica que es el estado inicial.

turnstile state machine

Conceptos y Terminología

Un estado es una descripción del estado de un sistema que está esperando ejecutar una transición. Una transición es un conjunto de acciones que deben ejecutarse cuando se cumple una condición o cuando se recibe un evento. Por ejemplo, al utilizar un sistema de audio para escuchar la radio (el sistema está en el estado "radio"), recibir un estímulo de "siguiente" resulta en pasar a la siguiente estación. Cuando el sistema está en el estado "CD", el estímulo de "siguiente" resulta en pasar a la siguiente pista. Estímulos idénticos desencadenan diferentes acciones dependiendo del estado actual.

En algunas representaciones de máquinas de estados finitos, también es posible asociar acciones con un estado:

  • una acción de entrada: realizada al entrar en el estado,

  • una acción de salida: realizada al salir del estado,

  • una acción durante: realizada mientras se está en el estado,

  • una acción de transición: realizada al entrar en el estado mediante una transición particular

IPF solo admite acciones de transición y, por lo tanto, es realmente la combinación del estado anterior, el nuevo estado y el evento lo que determina cuál es la acción que se lleva a cabo al entrar; no se define como parte del estado. Para habilitar el procesamiento paralelo, se pueden realizar múltiples acciones.triggered por un domain event. Por ejemplo, en la tabla anterior, la primera fila podría, además de tener la acción "desbloquear", tener una segunda acción "reproducir sonido de bienvenida" que se llevaría a cabo en paralelo con desbloquear.