如何用状态图进行设计09

至此,我们讨论了设计扩展状态图的基础知识。BetterState Pro的扩展状态图也支持历史状态,交互状态,和其他很多重要的设计和调试功能。请记住这些是针对BetterState Pro 和 Better State4VisualBasic的前端设计。一旦你的初始设计完成(或在设计过程中的任何时候),你都可以使用BetterState所带的代码生成器自动生成代码。有关代码生成器和BetterState特有的动画调试功能、分析功能的详细信息请参见BetterState Pro用户指南。

现在你已经是扩展状态图的设计专家了,请进入第三章,看看BetterState 是多么容易使用吧。
事件驱动编程这一章我们将通过Visual Basic 和 BetterState For Visual Basic 来设计一个简单的例子。这个例子的主要目的是在BetterState 环境下设计状态图。对于用户来说,就是建立设计的Visual Basic 前端部分。

在这个例子中我们使用VB 代码生成器,因为这种代码生成器是每个版本的BetterState Pro 都提供的。关于使用Visual Basic, Delphi, 和MFC 代码生成器的更深入的讨论,请参见用户指南中事件驱动编程部分。

考虑一个简单的例子:一个VB 窗口,包含一个标准的Visual Basic 定时器控件,命名为Timer1;和一个自定义图片控件,用来表示一个交通灯,命名为Light1。它可以是绿色或红色。假设我们希望信号灯在每次Timer事件发生时,在红绿之间变换。这种行为很容易用状态机来模拟,并可视化地表现为一张状态图,如图17 所示。

图17 简单的两个状态的交通灯控制器

状态机从Green 状态开始,每次Timer1_Timer 事件(固定时间间隔)发生,状态机在Red Green 两个状态间交替转换,因此适当地改变Light1 的Color 属性。很显然,我们可以在Timer1_Timer 事件中使用简单的VB 代码来达到同样的结果,编写子程序,使用一个变量,命名为LightState,它的值为0 或1,使用if-then-else 语句交替的改变变量的值。

If (LightState=0) Then
LightState = 1
Light1.Color = 1 ‘RED
Else
LightState = 0
Light1.Color = 0 ‘GREEN
End If

实际上,这就是BetterState 代码生成器将自动为你所作的工作;你只要画出状态图,代码生成器会自动生成代码。不过,图形化编程手段的好处不仅仅是这些,让我们考虑一个复杂一点的例子。
第一个扩展的例子如图18 所示,增加了以下修改:

两个控制按钮,分别命名为NewTruck 和NewCar;

点击NewCar 按钮3次后Light1从Red变 Green,或者在点击一次或数次NewCar后再点击NewTruck。

图18 展示了能够描述这种行为的扩展状态图。注意在图中增加了层次结构,连接OneORMore 状态和 Green状态的转换意味着如果点击一次或多次New-Car(令当前状态是OneORMore 的子状态之一)。又点击了NewTruck,状态就会变为Green。

这种层次设计功能允许任何VB 用户练习掌握现代编程的最基本概念之一,即自顶向下设计。例如,它允许你设计一个仅由Green 和 Red 状态组成的高层状态图,然后再设计Red 状态的内容,或将设计OneORMore 状态内容的任务分配给其他人。

注意扩展状态图是如何记忆输入事件序列,并通过可视的图来表现这些序列的。这是各种状态机的基本使命之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值