如果你是一个程序员,对状态机应该有一定的了解,甚至会经常使用。
使用状态机的时候,一般都是自己设计程序去实现状态机,但,当要维护代码时,就会显得不方便,特别是比较复杂的时候。
我幻想着有一个软件,能在图形界面上设计状态图,然后自动生成C\C++代码。生成的代码实现了状态机本身,和状态转换的逻辑关系,程序员与生成的代码之间的接口就是:定义动作、向状态机提交事件。很简单。没错,低耦合高内聚就是代码努力的方向。我们都不想全局变量满天飞。。。
经过我一段时间的努力,终于把这个软件做出来了,取名为“HEART-BLUE”。以下就是界面:
这是一个很简单的三个状态之间的转换。输入事件evGo,驱动状态机发生跳转,于是会执行相应的动作AcEntryA,AcEntryB,AcEntryC。程序输出:
还有复杂一点的状态机。一个电子小时钟,用2个按键,实现调节日期,时间和计时的功能。
用VC2005实现:
时钟VC2005工程资源地址:
http://download.csdn.net/detail/my_jeff/6412633
HEART-BLUE资源地址:
http://download.csdn.net/detail/my_jeff/6408985 ……
/
//VERSION: 1.0.0.1
//AUTHOR: JEFF
//TIME: 2013-10-15 22:12:57
//DESCRIPTION: Generate if not exist.
/
#ifndef _SIMPLEABC_C_DEF_H_
#define _SIMPLEABC_C_DEF_H_
//DEFINITION
#define SS_VOID void
#define SS_BOOL unsigned char
#define SS_TRUE 1
#define SS_FALSE 0
#define SS_BYTE unsigned char
#define SS_WORD unsigned short
#define SS_LONG unsigned long
//
//User
#define SS_ARR_EVENT_INNER_AUTO //
#define SS_STATE_CLASS CMyState
#ifdef SS_ARR_EVENT_INNER_AUTO //Inner queue size ...
#else
#define SS_ARR_EVENT_INNER_SIZE 20
#endif
#define DO_SOMETHING_WHEN_INNER_QUEUE_OVER_FLOW \
ss_var_01 = ss_var_02; //Make queue empty.
/
#endif //#ifndef _SIMPLEABC_C_DEF_H_
/
//VERSION: 1.0.0.1