2.7 UML状态图
问题的引出
顺序图是对对象的动态行为进行建模,有多个对象的参与、协作
问题:
当需要考察单个实体的动态行为时, 用UML如何来建模呢?
什么是单个实体:一个软件系统?一个子系统?一个模块、一个构件?
选择单个对象
软件系统中核心的、需要进行详细分析的单个实体
从不同的视点(ViewPoint)可有不同的选择
类的对象、构件、整个系统
原则:从选定的角度,把要考察的实体看作一个整体
UML提供了建模机制
状态图, 单个对象的动态行为
状态图的概念
状态(state):
是对象的生命期中的一个条件或状况
在此期间,对象可以响应事件、执行某活动等
例如,灯,有几个状态?
例如类,color,
状态机(state machine) :
是一种行为,
说明对象在它的生命期中, 响应事件所经历的状态序列 以及它们对每个事 件的响应
状态图(state diagram, State Chart ):
状态机可以用状态图来可视化。
状态图显示了一个状态机,它强调从状态到状态的控制流
状态有以下几个部分组成:
1)名称(name)
每个单词首字母大写
2)进入/退出动作(entry/exit action)
3)内部迁移(internal transition)
Transitions that are handled without causing a change in state
4)子状态 (substate)
5)延迟事件 (deferred event)
事件 Event
是对一个在时间和空间上占有一定位置的有意义的事情的描述
在状态机的语境中,一个事件是一个激励的发生,它能够触发一个状态迁移
UML 对4种事件进行建模
参量变化 change event
布尔表达式值变化、定时器、溢出:是内部事件
信号 signal (异步)
调用 call (同步)
时间事件 time event
时间事件 是表示一段时间的推移
用关键字after 后面跟着时间表达式
用关键字at 表示某个绝对时间点上发生的时间事件
变化事件 表示状态的一个变化或某些条件得到满足的事件
用关键字 when后跟一个布尔表达式,当条件满足,则引发变化事件
迁移Transition
在状态A,发生事件并满足一定条件,转到状态B
一个迁移由5部分组成
源状态 source state
事件触发器 event trigger (触发事件名称)
触发条件 guard condition
效应(effect) (或称,迁移动作)
可执行的动作
目标状态
特殊的迁移
自身迁移 self transition
从状态A迁移到状态A
内部迁移 internal transition
在状态A内部 行为
状态图的建模元素
状态
一般状态:圆角矩形
初始状态:实心圆
结束状态:“牛眼” (bull’s eye)
事件
触发事件名[触发条件]/迁移动作
这三个部分都是可以省略的,但至少有一部分
事件依附于表示迁移的箭线
迁移
叉形箭头实线
从初始状态指向目标状态
状态图建模
建模步骤
1、选择对象及视点
简单类的实例
构件
整个系统 或子系统
用例
2、定义 对象在生命期内可能存在的状态
状态要有意义
状态持续一定的时间
3、在每种状态下可以接受的事件及将要转去的新的状态
状态图建模注意事项:
不允许孤立的状态存在
不允许只进不出的状态迁移 (“黑洞”)
不允许只出不进的状态迁移 (“奇迹”)
不允许没有事件发生的迁移
或者“迁移” 没有指明具体的事件
比较状态图与交互图、活动图
交互
对共同工作的对象群体的行为建模
动态行为
状态机
对单个对象的行为建模
有时,可以对单个“完整系统”的行为建模
说明对象在它的生命期中响应事件所 经历的状态序列以及对那些事件的响应
动态行为建模
活动图
强调从活动到活动的控制流,多个业务角色
状态图是强调 对象潜在的状态和这些状态之间的迁移
UML工具小结
建模、模型
统一建模语言 UML,Unified Modeling Language
工具包
用例模型 UseCase Model
活动图 Activity Diagram
类图 Class Diagram
顺序图 Sequence Diagram
通信图 Communication Diagram
状态图 State Diagram