2009-09-10 13 views
28

Recientemente he leído sobre la biblioteca boost::statechart (máquinas de estado finito) y me encantó el concepto.¿C# incluye máquinas de estado finito?

¿El C# tiene un mecanismo similar? ¿O puede implementarse usando un patrón de diseño específico?

Respuesta

0

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

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

Ambos enfoques resaltan la implementación del .NET framework del iterator pattern.

+1

Wow que fue rápido, gracias por la respuesta – Maciek

+14

Los iteradores no son, por mucho, máquinas de estado. Algunos conceptos básicos de FSM son estados, transiciones, guardias de transición, acciones y estados jerárquicos. Estos NO son explícitos en los bloques de iteradores, por lo que no estoy de acuerdo con que esto sea una implementación de FSM. – Henri

+31

Los bloques iteradores se implementan como máquinas de estado, pero eso no significa que sean adecuados para construir una máquina de estados arbitraria. Erik Lippert hace este punto aquí: http://stackoverflow.com/questions/1194853/implementing-a-state-machine-using-the-yield-keyword/1195205#1195205 –

8

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

+1

.NET 4 Platform Update viene con soporte de máquina de estado para WF4, ahora. – Will

2

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

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

+15

FSM significa Flying Spaghetti Monster. Creo que respondiste la pregunta incorrecta. –

+6

Estoy bastante seguro de que no se estaba refiriendo al Monstruo Flying Spagetti y en su lugar se estaba refiriendo a la Máquina de estados finitos. –

6

Mantengo un proyecto de código abierto que implementa (entre otras cosas) una máquina genérica de estado finito para .NET. Se basa en QuickGraph, por lo que obtiene muchos algoritmos de análisis de gráficos de forma gratuita.

Consulte this page para obtener más información sobre el proyecto, y específicamente "Jolt.Automata : Finite State Machines" para obtener más información acerca de la función.

1

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 estado-máquina 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 son compatibles nativamente con las máquinas de estado, pero todas las clases 3.0/3.5 aún son totalmente compatibles con la versión 4.0.

0

escribí una biblioteca de código abierto llamado YieldMachine que se aprovecha de bloques de iterador para hacer la escritura máquinas de estados más simple.

Lo expliqué con más detalle en this answer.

Cuestiones relacionadas