关于状态机的定义:
写道
关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于 “当前” 节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态, 状态机停止。
包含一组状态集(states)、一个起始状态(start state)、一组输入符号集(alphabet)、一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态 机有很多与动作(actions)转换(Mealy机 )或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有 限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等。
传统应用程序的控制流程基本是顺序的:遵循事先设定的逻辑,从头到尾地执行。很少有事件能改变标准执行流程;而且这些事件主要涉及异常情况。“命令行实用程序”是这种传统应用程序的典型例子。
另一类应用程序由外部发生的事件来驱动——换言之,事件在应用程序之外生成,无法由应用程序或 程序员来控制。具体需要执行的代码取决于接收到的事件,或者它 相对于其他事件的抵达时间。所以,控制流程既不能是顺序的,也不能是事先设定好的,因为它要依赖于外部事件。事件驱动的GUI应用程序是这种应用程序的典 型例子,它们由命令和选择(也就是用户造成的事件)来驱动。
Web应用程序由提交的表单和用户请求的网页来驱动,它们也可划归到上述类 别。但是,GUI应用程序对于接收到的事件仍有一定程度的控制,因为这些事件要依赖于向用户显示的窗口和控件,而窗口和控件是由程序员控制的。Web应用 程序则不然,因为一旦用户采取不在预料之中的操作(比如使用浏览器的历史记录、手工输入链接以及模拟一次表单提交等等),就很容易打乱设计好的应用程序逻 辑。
显然,必须采取不同的技术来处理这些情况。它能处理任何顺序的事件,并能提供有意义的响应——即使这些事件发生的顺序和预计的不同。有限状态机正是为了满足这方面的要求而设计的。
有限状态机是一种概念性机器,它能采取某种操作来响应一个外部事件。具体采取的操作不仅能取决 于接收到的事件,还能取决于各个事件的相对发生顺序。之所以能 做到这一点,是因为机器能跟踪一个内部状态,它会在收到事件后进行更新。为一个事件而响应的行动不仅取决于事件本身,还取决于机器的内部状态。另外,采取 的行动还会决定并更新机器的状态。这样一来,任何逻辑都可建模成一系列事件/状态组合。
[1] 状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
①现态:是指当前所处的状态。
②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
部分参考资料:
强大的有限状态机 >>
有限状态机自动机 >>
JR - 精品文章 - OSWorkFlow分析(转载)>>
推荐:揭秘jbpm流程引擎内核设计思想及构架 作者:银狐999 >>
推荐:微内核工作流引擎体系架构与部分解决方案参考 >>
推荐:微内核过程引擎的设计思路和构架(刊登在第七期银弹杂志) >>
动态预告:
最近,将会放出 简易的基于jQuery WEB流程图编辑控件 正式版1.0 以及与之配套的工作流的核心代码(包括状态机部分)
基于WEB的在线文档编辑器beta(完全脱离HTML,会包含相应的HTML渲染器,doc渲染器,pdf渲染器) 也会紧跟其后放出 ,导出为doc,xls,pdf,xps功能会逐步完善,并放出相关的后台的代码
敬请期待...
分享到:
相关推荐
状态机工作流OSWorkflow 包括中文手册、开发指南等
状态机工作流源码-一个简单的工作流,好容易找到的噢
很好的状态机工作流案例,系统的讲解了工作流的实质,尤其适用于初学者,供研究参考
SharePoint 2010 April CU 2014中,当用户使用“New Document”方式创建一个文档的时候,触发状态机工作流运行出错。
基于分层有限状态机的工作流引擎设计与实现,方芳,李仁发,工作流引擎是工作流管理系统的核心部分,同时也是驱动流程流动的主要部件。本文深入讨论了怎样运用Java设计模式和分层有限状态机��
sharepoint 状态机工作流Demo
状态机工作流的设计及其部署,与MOSS2007的结合
asp.net工作流状态机实例 提供了一个.net的状态转换实例,是很好的 工作流的学习实例
有限状态机应用文档资料FPGA设计项目应用学习文档资料(18个): 基于抽象状态机的网格系统设计和分析.pdf 基于有限状态机实现全双工可编程UART.pdf 基于有限状态机的UART设计.pdf 基于有限状态机的工控系统软件设计...
有限状态机C语言编程有限状态机C语言编程有限状态机C语言编程
主要是描述微软.net3.0工作流状态机工作流的使用的例子,个人感觉很适合任何人学习
源码实例,状态机工作流实例报销审批流程,ASP.NET
利用 VHDL 设计的许多实用逻辑系统中 有许多是可以利用有限状态机的设计方案来 描述和实现的 无论与基于 VHDL 的其它设计方案相比 还是与可完成相似功能的 CPU 相比 状态机都有其难以逾越的优越性 它主要表现在以下...
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。在计算机科学中,有限状态机被广泛用于建模应用行为、硬件电路系统设计、...
有限状态机.ppt 本目录所有文件夹树状列表.txt 本目录所有文件树状列表.txt 构造一个51单片机的实时操作系统.docx 状态机c语言实现.doc 状态机原理及用法.pdf 状态机思路在单片机程序设计中的应用.doc 状态...
状态机是计算机网络通信的重要内容,想要对tcp-ip协议栈加深了解的朋友尤其需要重点掌握,状态机的使用,统计字符串中单词的个数
C++实现的分层有限状态机v0.1 使用帮助:http://blog.csdn.net/vvsxr/article/details/40302677
有限状态机实例(DFA、NFA)PPT中有三个实例,过程详细。
用java语言实现有限状态机,这个简单地实例能全面地诠释状态机的思想
有限状态机,简单易懂。自带Demo,进入状态有 进入 更新 退出 三个生命周期