¿C# incluye máquinas de estados finitos?


Recientemente he leído acerca de la biblioteca boost::statechart (máquinas de estados finitos) y me encantó el concepto.

¿Tiene C# un mecanismo similar ? ¿O se puede implementar usando un patrón de diseño específico?

Author: Steve Guidi, 2009-09-10

8 answers

Sí, C# tiene bloques iteradores que son máquinas de estado generadas por el compilador.

Si desea implementar su propia máquina de estados, puede crear implementaciones personalizadas de las interfaces IEnumerable<T> y IEnumerator<T>.

Ambos enfoques destacan la implementación de.NET framework del patrón iterador .

 0
Author: Andrew Hare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-10 18:43:37

. NET 4 Update 1 ahora lo soporta en la siguiente clase: Sistema.Actividad.Instrucción.StateMachine

Aquí hay un tutorial sobre cómo usarlo. Aquí hay unhands on lab .

 18
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-30 12:11:11

Workflow Foundation (. NET 3.0) tiene un flujo de trabajo de máquina de estados. 4.0 no tiene exactamente lo mismo actualmente, pero definitivamente puede crear un flujo de trabajo de máquina de estado usando 4.0.

 8
Author: Will,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-10 19:00:26

Mantengo un proyecto de código abierto que implementa (entre otras cosas) una máquina genérica de estados finitos para .NET. Está construida sobre QuickGraph, por lo que obtiene muchos algoritmos de análisis de gráficos de forma gratuita.

Ver esta páginapara más información sobre el proyecto, y específicamente " Jolt.Automata: Finite State Machines" para obtener más información sobre la característica.

 6
Author: Steve Guidi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-09-03 05:13:44

Echa un vistazo a Stateless - > http://code.google.com/p/stateless / . Es una alternativa ligera a la más pesada WWF.

Aquí hay un par de artículos del autor de la herramienta:

Máquinas de Estado en Modelos de Dominio

Disparadores parametrizados y Estados de reentrada en Apátridas

 5
Author: J.D.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-06 04:39:26

Las cosas que se acercan a los FSM son flujos de trabajo en.NET 3.5, sin embargo, también los flujos de trabajo no son exactamente FSM.

El poder de usar FSM es que puede crearlos explícitamente en su código, teniendo menos posibilidades de crear errores. Además, por supuesto, algunos sistemas son FSM por naturaleza, por lo que es más natural codificarlos así.

 2
Author: Henri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-10 19:04:09

Windows Workflow Foundation (WF) que forma parte de la biblioteca de clases base en 3.0 y 3.5 incluye un diseño de flujo de trabajo de máquina de estado para administrar máquinas de estado para sus aplicaciones.

Han reescrito completamente el flujo de trabajo para la próxima versión 4.0, y las nuevas clases WF 4.0 no admiten máquinas de estado de forma nativa, pero todas las clases 3.0/3.5 siguen siendo totalmente compatibles con 4.0.

 1
Author: Bytemaster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-12-07 20:52:09

Escribí una biblioteca de código abierto llamada YieldMachine que aprovecha los bloques iteradores para hacer que las máquinas de estado de escritura sean más simples.

Lo expliqué con más detalle en esta respuesta.

 0
Author: skrebbel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:08