活动图与状态图概述
活动图与状态图是UML图中两个比较容易混淆的知识点。他们二者都由起始节点、终止节点以及一系列的圆角矩形组成,但从功能上讲,两种图各有侧重。
* 活动图Activity Diagram阐明了业务用例实现的工作流程,可以看作一个由Activity活动状态为基本单位的状态机,每一个用例都应当有对应的活动图,它描述了用例中动作状态的转换,以及动作与对象间的依赖关系。
*状态图Statechart Diagram则主要用于描述一个对象在其生存状态间的动态行为,由某个对象的一组状态序列组成,也可以称为对象生命周期建模。状态图的要点是事件激励,对象在事件激励中发生状态的转移。
活动图
-
活动图的基本组成要素
活动图的基本组成要素包含:开始节点Initial Node、终止节点Final Node 、活动状态与动作状态Activity & Action、对象Objects、动作流Control Flow 以及一些涉及分支与合并、分叉与汇合等的逻辑节点。开始节点与终止节点分别用一个实心黑圆以及一个实心黑圆外加一圈来表示。
顾名思义这两个节点用于表示流程的开始与结束。-
活动状态与动作状态都利用一个圆角矩形来表示。
从字面意思上看,活动与动作有点类似,它们的区别在于,Activity可以进一步分割为其他的子活动或者动作状态,也就是说活动状态可以由另一个活动图来表示,而Action则是不可分割的原子动作,是构造活动图的最小单位。 对象object由一个直角矩形表示。
我们可以将对象插入到活动图中以表示对象的创建、修改或销毁等生命周期对动作的依赖关系,对象可以作为某一个动作的输出或者某一动作的输入。流Flow 由箭头进行表示,包括动作流和对象流。
动作流表示动作之间的转换,而对象流则是将对象插入到动作流之中,表示动作与对象的相互影响。分支与合并
分支与合并的关键是决策节点Decision Node,不同的决策产生不同的分支。
我们用菱形来表示分支的产生于合并Merge。分叉与汇合
分叉与回合主要用于表示控制流之间的并行关系,用一组对应的同步条来表示。
同步条:
同步条必须成对出现。
一个完整的活动图范例(选自umlet)
其中漏斗形状的符号表示时间约束。
3. 关于泳道
泳道是活动图中的一个特殊概念,通过一列列形似泳道的矩形框,将活动图中的活动进行分组,并指定负责该分组的具体对象。它可以方便的描述企业的各种业务流程,能够直观地描述系统的各活动之间的逻辑关系,利于用户理解业务逻辑。
状态图
正如开头所描述的,状态图主要用于描述一个对象在其生存状态间的动态行为,由某个对象的一组状态序列组成,也可以称为对象生命周期建模。
1. 状态图的基本要素
与活动图类似,状态图的基本组成要素也是包括各种起止节点,状态节点,条件节点,转移等。
起止节点
终止节点,表示状态的跳出或强行终止。
流终止节点,表示一个控制流的终止。
历史状态节点,是一个虚节点,表示从某个状态恢复,不需要经过完整的流程。
与活动图类似的状态节点、条件节点
状态转移
2. 进行状态建模的主要步骤
主要分成三步
- 定义分析对象
- 定义状态
- 定义事件
状态的转移是通过事件进行触发的,状态的转移可以发生在状态之间也可以发生在状态内部。
同时,一个状态可以包含若干子状态。如安检可以包含乘客行李检查中等子状态。
3. 一个完整的状态图例子
选自http://www.tutorialspoint.com/uml/uml_statechart_diagram.htm
活动图与状态图的区别
活动图主要用于表示系统在某一用例下的具体动作,而状态图主要用于描述某个对象的状态转化。
通常,活动图涉及多个对象,而状态图主要针对单一对象进行描述。