Boost-(MSM)元状态机文档翻译-前言

元状态机(MSMV2.10)

前言:

       MSM是一个允许用户创建高性能状态机的库,出于这点考虑,通常就会有两个问题,接下来请允许我深入回答这两个问题。

1 我们什么时候需要使用状态机?

你经常遇到一个问题,没有留意定义了一个很不正式的状态机,比如在类中定义了一个布尔型变量,来表示该类的任务完成了。可是后来这个布尔型变量其实需要第三个值,于是需要把布尔型变成整型,过了几周可能需要第二个属性,过了会又需要第三个,等等,于是你的代码可能写成以下的样子:

void incoming_data(data)

{

       if (data == packet_3 && flag1 == work_done && flag2 > step3)...

}

 

如果对象本身某些进度已经被完成,这个看起来像是事件处理过程中(内部包含数据)(但是有点丑陋)

这可以看作是协议定义但也是状态机最常见的用法。另外一种使用场景就是用户接口UI,比如用户交互性过程定义,例如一旦按钮被激活,某个功能变的有效。

 

如果你对此感兴趣,会发现很多使用的场景。实际上,可执行UML,一个安全的模块驱动型开发方法(http://en.wikipedia.org/wiki/Executable_UML)利用状态机定义其所有的动态行为。在执行UML世界里,类图,状态图以及动作语言是完全需要你掌握的。

 

2 关于其他的类似库,怎么样?

正确,有很多状态机的库,如果你没有用过他们,可能你会少学这方面的一些东西。那我们为什么应该使用MSM呢?我们可以选择别的,在选择一个状态机库时,很不幸的是你经常遇到以下这些问题和障碍?

 

  • 速度:你可能经常听人抱怨,状态机速度太慢了。可能因此而放弃这些库而自己去实现不是很完善的库(我是说有些开发人员,而不是说你的库不好),MSM没有这些问题,MSM的高效让很多开发人员注意。
  • 简单易用:设计良好的参数,如果你使用别的库,也可能正常的使用,很多状态机库需要你这样定义状态:
  • state s1 = new State; // a state
  • state s2 = new State; // another state
  • event e = new Event; // event
  • s1->addTransition(e,s2); // transition s1 -> s2你的状态转换越多,代码可读性越差,很久以前,还没有Jave等语言的时候,很多电子系统采用状态机构建,该状态机采用简单的表来记录状态变换,那时你可以很容易看清整个状态机结构,能迅速发现你忘记的状态。由于OO技术的出席,这种简易的应用消失了。但是MSM却让你回到状态表的时代,最大的减少额外的复杂度。 
  • 定义方法:MSM提供了很多前向声明的方法,并且一直在努力提高状态机定义的技术,比如你可以按照eUML的形式定义状态:state1 == state2 + event [condition] / action
  • 很简单,这不是语法糖,如此格式化,易读的结构有助于和该构建软件领域的专家交流,如果他们能够理解你的结构,可以使你减少很多bug。
  • 模块驱动开发:模块驱动开发中最常见的问题是双向过程(从代码到模块和从模块到代码),道理很简单,如果你都很难理解你的建构,那么你的模块解析工具就会更难,MSM的语法有助于双向工具的解析。
  • 特性:很多开发人员花费20%多的是时间定义UML标准,不幸的是,他们可能无法节省这20%的时间,因为很多UML的标准还没有实现,而MSM有很多标准,并且很多标准还在开发中。

不要再等了,我希望你们能喜欢上MSM!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值