Introducción a State Máquinas en IPF

El payments DSL permite a los clientes definir flujos utilizando state máquinas. Para personas que están familiarizadas con el concepto UML V2 de state máquinas, 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 state máquinas.

A finito-state máquina (FSM) o finito-state autómata (FSA, plural: autómatas), autómata finito, o simplemente un state máquina, 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 uno state a otro en respuesta a algunos entradas; el cambio de uno state a otra se le llama una transición.

Un FSM se define por una lista de sus estados, su estado inicial state, y las entradas que activan cada transición. Finito-state las máquinas son de dos tipos —https://en.wikipedia.org/wiki/Deterministic_finite_automaton[determinista finito-state máquinas] y no determinista finito-state máquinas, IPF solo admite autómatas finitos deterministas-state máquinas.

El comportamiento de state Las máquinas pueden ser observadas en muchos dispositivos de la sociedad moderna que realizan una secuencia predeterminada de acciones dependiendo de una secuencia de events con los que se presentan. Ejemplos simples son: máquinas expendedoras, que dispensan productos cuando se deposita la combinación adecuada de monedas; ascensores, cuya secuencia de paradas está determinada por los pisos solicitados por los pasajeros; semáforos, que cambian de secuencia cuando hay coches esperando; candados de combinación, que requieren la introducción de una secuencia de números en el orden correcto.

Ejemplo: Torniquete de monedas

Un ejemplo de un mecanismo simple que puede ser modelado por un state La máquina 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 persona.customer para avanzar. Después del customer pasa a través, los brazos se bloquean nuevamente hasta que se inserte otra moneda.

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

El torniquete state la máquina puede ser representada por un state-tabla de transición, que muestra para cada posible state, 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 Domain 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 Rotado

Bloqueado

None

Desbloqueado

moneda

Moneda Válida Insertada

Desbloqueado

None

empujar

Torniquete Rotado

Bloqueado

Cuando el customer ha empujado, bloquea el torniquete.

Bloquear

El torniquete state la máquina también puede ser representada por un grafo dirigido llamado un state diagrama (abajo). Cada state se representa por un nodo(círculo). Los bordes (flechas) muestran las transiciones de uno state a otro. Cada flecha está etiquetada con la entrada que desencadena esa transición. Una entrada que no provoca un cambio de state(como una entrada coin en el Unlocked*state) está representado por una flecha circular que regresa al original state. La flecha hacia el nodo *Locked desde el punto negro indica que es el inicial state.

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 un event se recibe. Por ejemplo, al utilizar un sistema de audio para escuchar la radio (el sistema está en la "radio" state), recibir un estímulo de "siguiente" resulta en moverse a la siguiente estación. Cuando el sistema está en el "CD" state, el estímulo "siguiente" resulta en pasar a la siguiente pista. Los estímulos idénticos desencadenan diferentes acciones dependiendo de la situación actual.state.

En algunos finitos-state representaciones de máquina, también es posible asociar acciones con un state:

  • una acción de entrada: realizada al ingresar el state,

  • una acción de salida: realizada al salir de la state,

  • una acción durante: realizada mientras se encuentra en el state,

  • una acción de transición: realizada al ingresar a la state por una transición particular

IPF solo admite acciones de transición y, por lo tanto, es en realidad la combinación de las anteriores.state, nuevo state y event que determina cuál es la acción que se lleva a cabo en la entrada, no se define como parte de la state. 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.