【UML】状态图和活动图
状态图是系统分析的一种常用工具,他通过建立类对象的生存周期模型来描述对象随时间变化的动态行为。
活动图是UML用于对系统的动态行为建模的另一种常用工具,他描述活动的顺序,展现从一个活动到另一个活动的控制流。活动图在本质上是一种流程图。
状态图
一个状态图就是一个状态机(展示状态与状态转换的图),主要用于表现从一个状态到另一个状态的控制流。
包括什么?
状态机由状态、转换、时间、活动和动作5部分组成。
状态
状态描述了状态机所在对象动态行为的执行所产生的结果。
一个完整的状态有5个组成部分。
名字 | 字符串构成,状态可以没有名字 |
入口/出口动作 | 表示进入/退出这个状态所执行的动作,动作可以是原子动作、动作序列 |
内部转换 | 不引起状态的改变,此转换不会导致状态的入口/出口动作被执行,比如:更改文件的文件名 |
延迟事件 | 事件的一个列表,此列表内的事件当前状态下不会处理,在系统进入其他状态时在处理 |
子状态 | 包含在某状态内部的状态,即嵌套结构 |
转换
包括事件和动作。动作是原子性的,通常表示一个简短的计算处理过程。
转换由5个部分组成,分别是:源状态、目标状态、触发事件、监护条件和动作。
源状态 | 转换被激发之前,对象所处的状态就是转换的源状态,是被转换影响的状态 |
目标状态 | 目标转换完成后活动的状态 |
触发事件 | 引起转变的事件,具有事件驱动的动态行为 |
监护条件 | 一个方括号括起来的布尔表达式,放在触发事件的后面,可以引用对象的属性值和触发事件的参数,当一个触发事件被出发时,布尔表达式被赋值 |
动作 | 一个可执行的原子计算,也可以是一个动作序列,但是不会被同时发生的其他动作所影响 |
状态图的用途
- 相应外部事件,即来自对象语境外的事件
- 具有清晰的生命期,可以被建模为状态、迁徙和事件的演化
- 当前行为和过去行为存在着依赖关系
- 在对某事件作出反应后,它又会变回空闲状态,等待下一个事件
实例(以机房收费系统上下机为例)
活动图
活动图是某件事情正在进行的状态,既可以是现实生活中正在进行的某一项工作,也可以是软件系统中某个对象的一个操作。
组成元素
动作状态 | 执行指定动作,在此动作完成后通过完成变迁转向另一个状态 |
活动状态 | 可以理解为一个组合,它的控制流由其他活动状态或动作状态组成,用平滑的圆角矩形表示 |
动作流 | 一系列动作的组合 |
分支与合并 | 描述了软件在不同的判断结果下所执行的不同动作,用空心小菱形表示 |
分叉和汇合 | 将多个运行的并发流分开和合并,一条粗的水平线来表示 |
泳道 | 将活动图的活动状态分组,每一组表示负责那些活动的业务组织 |
活动图实例(以机房收费系统为例)
活动图和流程图的区别
- 流程图着重描述处理过程,它的主要控制结构是顺序、分支和循环,各个处理过程之间有严格的顺序和时间关系;而活动图描述的是对象活动的顺序关系所遵循的规则,它着重表现的是系统的行为,而非系统的处理过程。
- 活动图能够表示并发活动的情形,而流程图不能。
- 活动图是面向对象的,而流程图是面向过程的。