独立的控制线程
扩展状态图也提供了获取无序的输入事件的方法。这意味着一个状态开始时,它可能位于一个或多个控制线程的交叉点。控制行为的每个独立线程都类似一个状态机,独自运行,互不干扰。因此,这些控制线程可能会同时发生状态转换。(Independence)独立/并行(也称Concurrency)是一个非常强大的设计功能。有关使用Concurrency / Independence 的完整信息和更多的示例,请参见BetterState Pro 用户指南第四章,为了阐明这个例子,我们扩展我们的冰激凌系统的模型,为它增加热狗(hot dogs)的销售。在这个例子中,除了统计冰激凌和冰激凌容器的销售数目,我们还要为那些有需要的顾客供应热狗。
你需要设计一个新的状态图,现在有两张单独的状态图。如图11 所示:
图11 这两个独立的任务在工作时都要执行。
并行为你提供了一个强大的设计工具,它可以显著地简化如图11 所示的设计。如何用并行来设计呢?先增加一个状态,然后从Create 菜单中选择Concurrency / Independence 选项。 在弹出的对话框中为新创建的“控制线程”命名,现在你可以在新的线程里设计状态图了。
图12 显示了我们的冰激凌/热狗的设计,在Work 状态中绘制独立的控制线程。
请注意,图12 是多么易于理解。在图11 中,我们有两个单独的状态图,很难说明这两个图的关系。而在图12 中,很容易看出两个子状态图是相关的。这说明,在新的一天开始工作时、工作中——无论任何时候,你都可以在卖冰激凌的同时卖热狗。因此,在下班时,你应同时停止这两个活动。分层和并行让我们能够用更小和更易于管理的状态图来处理和解决复杂的任务。