EAUML日拱一卒-状态图::面向对象的另一种理解

news/2024/7/24 3:15:27

针对车辆的数字式信号的状态机设计完成之后,按道理可以继续设计标准的车辆信号或者行人等等。但是如果你回头看看数字式车辆信号的设计,应该可以明白:它们其实都是大同小异。所以这部分就留给大家可以自己设计了。


本文说明按钮(包括系统停止按钮和行人通过请求按钮)的状态机设计。


面向对象


在考虑按钮的状态机的时候可
以有两种视角:信号系统的视角和按钮装置的视

角。


如果按照信号系统需求来建模,识别出来的状态就是道路1通行,道路1停止一类的结果。由于停止按钮和行人通过按钮关注的点不同,识别出来的状态也就不相同,无法共通。


如果考虑了系统需求之后按照按钮装置的观点来建模,识别出来的状态就是,按钮无效状态,按钮有效状态,请求有效状态等,这时停止按钮和行人按钮的处理就可以共通。


收集需求时使用利用者观点,建模时使用功能提供者观点。这也算是一种面向对象吧。虽然这种解释只是作者的一种扩大解释,但是作为大家在分析系统,对系统建模时的一种考虑问题的角度绝对是有益无害的。


按钮装置状态机


结合停止按钮和行人通过请求按钮的需求,按照面向对象(按钮装置)的观点,建模如下:



Disable状态:设备不接受用户按钮操作。接受到DeviceEnable事件之后,向Enable状态迁移;如果接受到ShutDown事件,经由Junction伪状态向ExitPoint迁移。


Enable状态:检测到用户按钮按下以后,向CmdReady状态迁移;接受DeviceDisable事件以后,向Disable状态迁移;如果接受到ShutDown事件,经由Junction伪状态向ExitPoint迁移。


CmdReady状态:接受到HandlerReady事件后,发送Command信号之后向Disable状态迁移;接受DeviceDisable事件以后,向Disable状态迁移;如果接受到ShutDown事件,经由Junction伪状态向ExitPoint迁移。


关于连接点(Junction)


连接点-这种类型的伪状态用于将状态之间的多个迁移连接成复合路径。例如,合并伪状态可以用来将多个进入迁移合并成一个离开迁移,通过这种方式表现后续路径分享。也可以用于将一个进入迁移分成多个离开迁移,这些离开迁移通过不同的监护约束选择。

--UML2.5 14.2.3.7 Pseudostate and PseudostateKind

(伪状态和伪状态种类)


参考资料:


14.2 Behavior StateMachines (7)--Juction

14.2 Behavior StateMachines (10) --记法


打开方法如下:

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

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

  3. 选择【状态图】分类

  4. 选择相关文章


写在文章的最后


既然已经读到这里了,拜托大家再用一分钟时间,将文章转发到各位的朋友圈,微信群中。希望有更多需要的人读到本公众号里的文章,这里先谢过了!

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



http://www.niftyadmin.cn/n/1029970.html

相关文章

Professional ASP.NET 2.0之应用程序文件夹-Application Folders

1.\App_Code Folder  \App_Code文件夹是存贮classes,.wsdl文件和typed datasets的地方。你的解决方案中的所有页面可以自动访问存贮在这个文件夹的任何一个项目。如果这些项目是一个class (.vb or .cs),则Visual Studio 2005会自动检测并编译它&#x…

EAUML日拱一卒-状态图::不是模式的模式

针对车辆的数字式信号的状态机设计完成之后,按道理可以继续设计标准的车辆信号或者行人信号等。但是如果你回头看看数字式车辆信号的设计,应该可以明白:它们其实都是大同小异。所以这部分就留给大家可以自己设计了。 不是模式的模式 作为对系…

浅谈对象(数组)的深克隆和浅克隆

浅谈对象(数组)的深克隆和浅克隆 浅克隆 object.assign()Array.prototype.concat()Array.prototype.slice() 深克隆 JSON.stringify 和 JSON.parseObject.assign()通过JQuery中的extend方法实现深拷贝lodash.cloneDeep()实现深拷贝递归 注意:…

EAUML日拱一卒-状态图::重画按钮状态图

按钮处理模块的状态图,在前面的文章中已经说明过了,但是当我们对信号系统引擎建模时,发现当初的设计并不能满足需求,所以需要对已经完成的模型进行修改。 这样的修改在软件开发过程中经常出现,需要做的不是抑制这种修改…

EAUML日拱一卒-状态图::状态机之间的同步

今天是交通信号系统连载的最后一篇,首先还是回顾一下系统的构成。还是请出对象图。 这个系统的基本设计如下: 每个设备都拥有自己的状态机,在独立的线程中执行,这些状态机相互独立,互不干扰。 交通信号系统引擎Traffi…

一道关于EventLoop事件循环事件队列的JS题

一道关于EventLoop事件循环事件队列的JS题 上代码 async function async1(){console.log("async1 start");await async2();console.log(async1 end);}async function async2(){console.log(async2)};console.log(script start);setTimeout(function(){console.log(…

对管理者说[转载CSDN]

在这里,我还有一些话要对IT公司的管理人员们说。只当是为程序员们说说心理话吧。请不要在招聘的时候过于夸大公司,虚假承诺。程序员们能够忍让,但是有一定的限度。试用期中我们可以发现很多的真实情况。在招聘到公司认为合适的人才之后&#…

EAUML日拱一卒-多任务编程超入门-(1) 什么是多任务

多任务可以说是编程中的一个难点,对于非计算机专业的开发者来讲,尤其如此。本系列希望可以用尽量浅显的语言对多任务编程进行说明,在满足多任务编程基本要求的同时,提供继续深入研究提供一个良好的出发点。 我们的文章首先一一个…