EA&UML日拱一卒-状态图::状态机之间的同步
今天是交通信号系统连载的最后一篇,首先还是回顾一下系统的构成。还是请出对象图。
这个系统的基本设计如下:
每个设备都拥有自己的状态机,在独立的线程中执行,这些状态机相互独立,互不干扰。
交通信号系统引擎TrafficSystemEngine也拥有状态机,也是运行在一个独立的线程中。它的职责是控制系统的到全体动作。
状态机之间的同步
在这个设计中,已经尽量减少了设备之间的耦合性,只留下TrafficSystemEngine和各个设备之间的交互。既然是多线程,那么就需要处理同步问题,具体是:
-
系统启动时,等所有的设备都准备好了以后,TrafficSystemEngine开始执行状态切换。
-
系统正常执行期间,状态机之间通过信号/事件进行交互,这一部分已经在前面的文章说明,本文省略。
-
系统停止时,所有设备的停止过程结束以后,整个系统停止。
说起来挺玄,画成状态图就是下面这样。
中间的的部分就是TrafficSystemEngine,不再说明。这里只说明其他两个状态:Setup状态用于等待所有设备初始化完成;Shutdown用于状态等待所有设备的Shutdown结束处理结束。
两个状态有意用了两种表达方式,在本例中表达的语义相同。
建模中的拆分和组装
对一个系统建模,一般需要经历一个拆分和组装的的过程。
拆分就是前面讲到的庖丁解牛,只不过分解的对象是交通信号系统。我们将系统拆分成各个子系统或者说模块,然后对它们分别建模。这样既可以降低建模的难度,又可以得到可复用的模块。
建模活动中的组装既是设计的一部分,也是检验设计的过程。在组装过程中可以发现各模块设计中的不足。否则的话这些问题恐怕就要等到结合测试时才能发现了。
参考资料:
14.2 Behavior StateMachines (6)--子状态机状态
14.2 Behavior StateMachines (7)--为状态
14.2 Behavior StateMachines (10) --记法
打开方法如下:
-
进入【面向对象思考】 公众号
-
打开【UML】-【UML2.5中文译文】菜单
-
选择【状态图】分类
-
选择相关文章
写在文章的最后
既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。
本公共号的成长需要您的支持!
相关推荐
- EA&UML日拱一卒-0基础学习微信小程序(3)- 创建自己的小程序账号
- EA&UML日拱一卒-0基础学习微信小程序(6)- 配置文件的形式和内容
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (7)-在画面之间共享数据
- EA&UML日拱一卒-状态图::庖丁解牛
- EA&UML日拱一卒-0基础学习微信小程序(14)-最简单的指南针
- EA&UML日拱一卒-0基础学习微信小程序(9)-C++程序员眼中的app.js
- EA&UML日拱一卒-多任务编程超入门-(9)线程同步
- EA&UML日拱一卒-多任务编程超入门-(7)关于mutex,你必须知道的
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (5)-显示所在位置的信息
- EA&UML日拱一卒-微信小程序实战:位置闹铃 (2)-在地图上显示自己的位置
- EA&UML日拱一卒-状态图::不是模式的模式
- 银行ATM系统——状态机图及文档