EA&UML日拱一卒-状态图::状态机之间的同步

来源:互联网 发布:数据库逻辑模型图 编辑:程序博客网 时间:2024/05/29 12:26

今天是交通信号系统连载的最后一篇,首先还是回顾一下系统的构成。还是请出对象图。


这个系统的基本设计如下:


每个设备都拥有自己的状态机,在独立的线程中执行,这些状态机相互独立,互不干扰。


交通信号系统引擎TrafficSystemEngine也拥有状态机,也是运行在一个独立的线程中。它的职责是控制系统的到全体动作。


状态机之间的同步


在这个设计中,已经尽量减少了设备之间的耦合性,只留下TrafficSystemEngine和各个设备之间的交互。既然是多线程,那么就需要处理同步问题,具体是:


  1. 系统启动时,等所有的设备都准备好了以后,TrafficSystemEngine开始执行状态切换。

  2. 系统正常执行期间,状态机之间通过信号/事件进行交互,这一部分已经在前面的文章说明,本文省略。

  3. 系统停止时,所有设备的停止过程结束以后,整个系统停止。


说起来挺玄,画成状态图就是下面这样。



中间的的部分就是TrafficSystemEngine,不再说明。这里只说明其他两个状态:Setup状态用于等待所有设备初始化完成;Shutdown用于状态等待所有设备的Shutdown结束处理结束。


两个状态有意用了两种表达方式,在本例中表达的语义相同。


建模中的拆分和组装


对一个系统建模,一般需要经历一个拆分和组装的的过程。


拆分就是前面讲到的庖丁解牛,只不过分解的对象是交通信号系统。我们将系统拆分成各个子系统或者说模块,然后对它们分别建模。这样既可以降低建模的难度,又可以得到可复用的模块。


建模活动中的组装既是设计的一部分,也是检验设计的过程。在组装过程中可以发现各模块设计中的不足。否则的话这些问题恐怕就要等到结合测试时才能发现了。


参考资料:


14.2 Behavior StateMachines (6)--子状态机状态

14.2 Behavior StateMachines (7)--为状态

14.2 Behavior StateMachines (10) --记法


打开方法如下:

  1. 进入【面向对象思考】 公众号  

  2. 打开【UML】-【UML2.5中文译文】菜单

  3. 选择【状态图】分类

  4. 选择相关文章


写在文章的最后


既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。

本公共号的成长需要您的支持!


阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】


阅读全文
1 0