继续之前博文,本篇讨论状态图
一、状态图介绍:
1、先了解状态机和状态图的概念:
1)状态机:状态机是一种记录下给定时刻状态的设备,它可以根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作,如计算机、各种客户端软件、Web上的各种交互页面都是状态机。
其构造:
① 状态:指对象在其生命周期中的一种状态
② 动作:指状态机中可以执行的原子操作
③ 事件:发生在时间和控件上对状态机有意义的那些事情
④ 活动:指状态机中进行的非原子操作
⑤ 转换:指的是两个不同状态之间的一种关系
2)状态图:一个状态图本质上就是一个状态机,或者是状态机的特殊情况,它基本上是一个状态机中的元素的投影,这也就意味着状态图包括状态机的所以特征。
其作用:
① 状态图清晰地描述了状态转换时所必须触发的事件、监护条件和动作等影响转换的因素,有利于程序员避免程序中非法事件的进入。
② 状态图清晰地描述了状态之间的转换顺序,通过状态的转换顺序可以清晰看出事件的执行顺序。
③ 清晰的事件顺序有利于程序员在卡法程序时避免出现事件错序的情况。
④ 状态图通过判定可以更好地描述工作流因为不同的条件发生的分支。
2、状态图的组成要素:
1)状态:状态时状态图的重要组成部分,它描述了一个类对象生命周期中的一个时间段。其包含:状态名、入口和出口动作、内部活动、内部转换、嵌套状态。
2)转换:转换用于标识一个状态机的两个状态之间的一种关系。其类型有:外部转换、内部转换、完成转换、触发器事件、动作、监护条件
3)判定:判定用来标识一个事件依据不同的监护条件有不同的影响。在实际建模的过程中,如果遇到需要使用判定的情况,通常用监护条件来覆盖每种可能,使得一个事件的发生能保证触发一个转换。
4)同步: 同步时为了说明并发工作流的分支与汇合。状态图和活动图种都可能用到同步。
5)事件:一个事件的出现可能触发状态改变。事件可分为:信号事件、时间事件、改变事件、调用事件。
6)初始和终止状态:初始状态和终止状态是状态图种的两个特殊状态。初始状态代表着状态图的起点,终止状态代表着状态图的终点。
7)历史:用于退出后,再次进入时的状态,分为深历史和浅历史。深历史表示记忆所有层次的子状态;浅历史只记忆最上层的子状态。
其余元素网络上并没有总结,在startUML中却是有的,具体见下方UML创建。
3、状态图的建模:
1)创建一个状态图的步骤如下:
① 标识出建模实体。
② 标识出实体的各种状态
③ 创建相关事件并创建状态图
2)创建状态图的原则:
一般来说,不需要给所有的类都创建状态图,只有具有虫咬动态行为的类才需要。
二、startUML创建
1、创建Model:在startUML右上方可以找到Explorer,在Untitled右键,add,选择model,创建一个自己的Model,修改名称MyModel。
2、创建状态图:在MyModel上右键,Add Diagram,选择Statechart Diagram。
3、UML左侧各元素介绍:
1)SimpleState 普通状态
2)InitialState 初始化起点
3)Choice 判定框
4)Join 同步时使用,用于汇合
5)Fork 同步时使用,用于分支。其实与Join的形状相同,两者创建的图标一模一样
6)Final State 结束标识
7)Transition 外部转换
8)Self Transition 内部转换
9)Composite State 组合状态,可内置状态,相当于状态图的区域,与用例图的用例范围类似
10)Submachine State 子状态,嵌套再另一个状态种的状态
11)Orthogonal State // TODO 暂不了解
12)Junction 交叉点
13)Shallow Hisory 浅历史图标
14)Deep History 深历史图标,
15)Entry Point 用于表示状态图在特殊情况下进入的节点。
16)Exit Point 状态图的退出节点,与Entry Point相对
17)Terminate 应该是用于表示强制退出的,暂时也不是很确定,待后续更新
18)Connection Point 连接点,选中该选项,再选中状态或者组合状态,拖动到连接处,用于描述连接点的信息
参考文章:
https://max.book118.com/html/2016/1206/69029749.shtm