第 8章 状态图和活动图
1,什么是状态图
状态图( statechart diagram):
主要用于 描述 一个对象在其生存期间的 动态行为,
表现 一个对象所经历的 状态序列 ( state sequence)、引
起状态转移的 事件 ( event)以及因状态转移而伴随的
动作 ( action)。
1,什么是状态图
状态图例子:
Idle
R u n n i n g
k e y P r e s s
f i n i s h e d
s h u t D o w n
初态
终态
状态
事件
1,什么是状态图
状态图例子:
液体( 水)
固体( 冰)
汽体( 蒸汽)
[ t e p e r a t u r e > 0 ]
[ t e m p e r a t u r e < = 0 ]
[ t e m p e r a t u r e > = 1 0 0 ]
[ t e m p e r a t u r e < 1 0 0 ]
1,什么是状态图
在状态机中,动作或与状态相关,或与转移
(transition)相关。
如果一个动作是与一个状态相关,对象进入该状态
时触发该动作。
如果一个动作与一个转移相关,对象在不同的状态
之间转移时触发相应的动作。
状态 A 状态 B
所用时间近似于 0
状态能够维持一段时间 状态能够维持一段时间
1,什么是状态图
一般可以用状态机对一个对象的生命周期建模,状
态图用来显示状态机,重点在描述状态之间的控制流。
状态图所描述的对象,其中的某些属性值的变化,
使之产生“质”的变化。
状态图在具有以下两个特性的属性上建模:
1)属性拥有较少的离散取值;
2)属性在这些值之间的变化(转移)使对象有质的
变化。
2,状态图中的基本概念
状态
1)名称:字符串。
2)进入 /退出动作:进入和退出状态时执行的动作。
3)内部转换:不导致状态改变的转换。
4)子状态:状态的嵌套结构。
5)延迟事件:在发生事件的状态下不处理,推迟到
下一状态处理。
2,状态图中的基本概念
指在对象的生命期中的某个状况或条件,在此期间
对象将满足某些条件、执行某些活动或等待某些事件。 L i g h t i n g
e n t r y / t u r n O n
d o / b l i n k F i v e T i m e s
e v e n t p o w e r O f f / p o w e r S u p p l y S e l f
e x i t / t u r n O f f
e v e n t s e l f T e s t / d e f e r
2,状态图中的基本概念
组合状态 (composite state)和子状态 (substate)
嵌套在另一个状态中的状态称为 子状态 。一个含有
子状态的状态称作 组合状态 。
2,状态图中的基本概念
组合状态和子状态
A
B
W
E
F
C
D
p
r
u
s
v
t
从 W 终态来
到 W 初态去

目标
2,状态图中的基本概念
组合状态和子状态
子状态之间可分为 or关系和 and关系。 or关系说明组
合状态在某一时刻仅可到达一个子状态; and关系说明
组合状态在某一时刻可同时到达多个子状态。
R u n n i n g
F o r w a r d B a c k w a r d
2,状态图中的基本概念
组合状态和子状态
子状态之间可分为 or关系和 and关系。 or关系说明组
合状态在某一时刻仅可到达一个子状态; and关系说明
组合状态在某一时刻可同时到达多个子状态。
R u n n i n g 1
A1
B1
A2
B2
2,状态图中的基本概念
历史状态 (history state)
历史状态是一个伪状态,目的是记住从组合状态中
退出时所处的子状态。当再次进入组合状态时,可直
接进入这个子状态,而不是从组合状态的初态开始。
H
H*
浅 (shallow)历史状态。记住最外层组合状
态的历史
深 (deep)历史状态。记住任何深度的组合
状态的历史
2,状态图中的基本概念
历史状态
C o m m a n d
B a c k i n g U p
C o l l e c t i n g
H
C o p y i n g
C l e a n i n g U p
Query
2,状态图中的基本概念
转移 (transition)
转移是两个状态之间的一种关系,表示对象将在第
一个状态中执行一定的动作,并在某个特定事件 发生
而且某个特定警戒条件 满足 时进入第二个状态。
转移格式,[event-signature][[guard-condition]][/ action]
事件特征标记格式,event-name(comma-separated-parameter-list)
button_click(p)[hasUpdateRight]obj.Update(p)
一般状态之间的转移是由事件触发的,因此在转移上应标出
事件,否则表示在源状态的内部活动执行完毕后自动触发转
移。
2,状态图中的基本概念
转移
转移格式,[event-signature][[guard-condition]][/ action]
事件特征标记格式,event-name(comma-separated-parameter-list)
A1
B1
C1
D1
c l i c k [ x < 0 ]
c l i c k [ x = 0 ]
c l i c k [ x > 0 ]
2,状态图中的基本概念
事件 (event)
事件是一个在时间和空间上占有一定位置的有意
义的事情的详细说明。
事件产生的原因有调用、满足条件的状态出现、
到达时间点、发送信息等。
2,状态图中的基本概念
事件
1)调用事件:对操作的调度
格式,event-name(comma-separated-parameter-list)
2)变化事件:由条件不满足到条件满足发生
格式,when(temperature>120)/alarm()
变化事件中的条件与警戒条件:变化事件的条件
在条件满足(变化事件)之前不断测试,警戒条件
在事件之后测试一次。
2,状态图中的基本概念
事件
3)时间事件:是指满足某一时间表达式的情况
出现。
格式,when(time=12:30:00)/wake()
after(60s)/run()
4)信号事件:表示的是对象接收到了信号这种
情况,信号事件往往会触发状态的转移。
信号就是 由一个对象异步地发送、由另一个对
象接收的已命名的 对象 。
在 UML中信号是由构造型为 <<signal event>>的
类表示,信号之间具有泛化关系。
2,状态图中的基本概念
动作 (action)
动作是一个可执行的原子计算。
格式:一般采用合适的程序设计语言表达。
entry/setMode(onTrack)
exit/setMode(offTrack)
3,状态图的工具支持
W a i t i n g
G e t t i n g T o k e n
G e t t i n g B o d y
p u t ( c ) [ c ! = ' < ' ] / r e t u r n f a l s e
p u t ( c ) [ c = = ' < ' ]
p u t ( c ) [ c ! = ' > ' ] / t o k e n, a p p e n d ( c ) ; r e t u r n f a l s e
p u t ( c ) [ c = = ' > ' ]
p u t ( c ) [ c ! = ' ; ' ] / b o d y, a p p e n d ( c ) ; r e t u r n f a l s e ;
p u t ( c ) [ c = = ' ; ' ] / r e t u r n t r u e
状态图工具支持
正向:根据状态机理论来生成代码(参考形式语言
与自动机资料)
逆向:困难,手工
Rose2003不支持,Posedon支持。
4,什么是活动图
活动图( activity diagram):
可以用于 描述 系统的 工作流程 和 并发行为 。
活动图可看作状态图的特殊形式。
可以把活动图中的活动看作活动状态,活动图中从
一个活动到另一个活动,相当状态图中从一个状态到
一个状态。
活动图中活动的改变不需要事件触发,源活动执行
完毕后自动触发转移,到下一活动。
5,活动图中的基本概念
活动图
活动、泳道、分支、分叉和汇合、对象流。
活动 (activity)
活动表示某流程中任务的执行。活动图中的活动也
叫活动状态。
活动图中有活动状态和动作状态,动作状态是活动
状态的特例。
5,活动图中的基本概念
泳道 (swimlane)
泳道是活动图中水平方向的区域划分,根据每个活
动的职责对所有活动进行划分,每个泳道代表一个责
任区。
泳道和类不是一一对应的关系,泳道关心的是所代
表的职责,一个泳道可由一个或多个类实现。
R e q u e s t
S e r v i c e
Pay
C o l l e c t
Order
T a k e O r d e r
D e l i v e r
Order
F i l l O r d e r
S t o c k r o o mS a l e sC u s t o m e r
5,活动图中的基本概念
分支 (branch)
在活动图中,对于同一个触发,可根据不同的触发
条件转移到不同活动,每个可能的转移就是一个分支。
N e w A c t i v i t y
N e w A c t i v i t y 2 N e w A c t i v i t y 3
N e w A c t i v i t y 4
N e w A c t i v i t y 5
N e w A c t i v i t y 6
[ c o s t < 5 0 ]
c o s t > = 5 0
[ c o s t > = 5 0 ]
[ c o s t < 5 0 ]
5,活动图中的基本概念
分叉和汇合 (fork&join)
在活动图中,分叉和汇合表示系统或对象的并发行
为。
N e w A c t i v i t y 7
N e w A c t i v i t y 8 N e w A c t i v i t y 9
N e w A c t i v i t y 1 0
5,活动图中的基本概念
对象流 (object)
在活动中可以出现对象,对象作为活动的输入 /输出。
活动图中的对象流可以表示活动和对象的关系。
如,一个活动创建对象或使用对象。
如果两个活动之间有对象流,则活动间的控制线不
需要画出。
5,活动图中的基本概念
对象流
S o f t w a r e E n g i n e e rC u s t o m e r
动 作 状 态 1
D e f e c t
动 作 状 态 2
D e f e c t
动 作 状 态 3
6,活动图的用途
活动图对表示并发行为很有用,主要应用在下面方面:
1)对系统的工作流程建模,即对系统的业务过程
建模;
2)对具体的操作建模,用于描述计算过程的细节。
6,活动图的用途
产品制造
制造者
发货
客户
6,活动图的用途
发货准备
d o / 检验产品质量
e x i t / 给出发货指令
产品打包
e n t r y / 包装产品
d o / 检查地址
空运
e n t r y / 提供发货标签
e x i t / 送到客户
w e i g h t < = 5 l b
普通运输
e n t r y / 提供发货标签
e x i t / 送到客户
[ w e i g h t > 5 l b ]
e n t r y / 检查产品
客户发货者制造者
6,活动图的用途
r e t u r n f a l s e
x = ( l, d e l t a - d e l t a ) / ( s l o p e - l, s l o p e )
y = s l o p e * x + d e l t a
r e t u r n t r u e
[ s l o p e = l, s l o p e ]
[ s l o p e ! = l, s l o p e ]
7,活动图的工具支持
活动图工具支持
正向:若表示工作流程,产生代码苦难;若表示具体
算法产生代码容易。
逆向:对类的操作是可能的,从系统得到工作流程困
难。
Rose2003不支持。
8,状态图和活动图的比较
状态图和活动图都是对系统动态行为建模,有共同点
又有区别。
1)两者描述的重点不同。状态图描述的对象的状态和
状态之间的 转移,活动图描述的是活动到活动的 控制
流 。
2)两者使用的场合不同。状态图用于显示一个对象在
其生命周期内的行为,活动图用于描述用例、涉及多
个用例的工作流程和多线程应用。
如果需要描述多个对象之间的交互,应该用交互图。