状态机图
♂
anwser[ in 30s ] / connet
Connecting
Talking
2013-7-25
25
9.2.3 转移
复合转移
♂
只是外部转移的一个变种
Busy Ringing
anwser [ out 30s ] / fail connect [ in 30s ] / connect
Hung Up Talking
[ students.length>=maxStudents ] In Schedule [ after this term ]
locked [ after this term ]
状态机图PK 状态机
♂
2013-7-25
31
9.3 状态机图
如何使用状态机图
♂
状态机图只是一种辅助模型,根据实际需要使用。 使用时要注意以下问题:
9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 何时使用状态机图 使用状态机图的哪些概念 如何识别对象的状态 如何认识和描述转移 如何为类图提供有用的信息
Talking
2013-7-25
23
9.2.3 转移
转移的种类
1. 2.
外部转移
♀
复合转移
内部转移 3. 完成转移
2013-7-25
24
9.2.3 转移
外部转移
Busy 外部转移是一种改变对象状态的转移,是最常见的 一种转移。 Ringing Hung Up ♂ 外部转移用从源状态到目标状态的箭头表示。
♂
2013-7-25
29
9.2 相关概念
状态机的相关概念
9.2.1 状态机 9.2.2 状态 9.2.3 转移 9.3 状态机图
监护条件
事件触发器
动作
2013-7-25 30
9.3 状态机图
状态机图
♂
显示了一个对象的状态机,它强调从状态到状态的 控制流 同一件事物的两种不同概念,状态机的图形表示即 为状态机图
对象一般没有Do动作 ♂ 表示入口动作执行完之后执行的动作 ♂ 等同于入口/出口动作
♂
Dialing
do/ receiveInput
2013-7-25 11
9.2.2 状态
状态的组成—内部转移(On Event动作)
内部转移的结果并不改变状态本身 ♂ 是对象接收到指定事件时执行On Event动作,但执 行的结果并不改变对象状态
网上选课系统的状态机图
网上选课系统的状态机图
1. 何时使用状态机图 2. 使用状态机图的哪些概念 3. 如何识别对象的状态
对象有哪些有意义的状态 不同状态下的行为规则不同 同一状态下的行为规则一致
4. 如何认识和描述转移 5. 如何为类图提供有用的信息
网上选课系统的状态机图
一个课程对象(Course类对象)的状态变化过程:
♂
2013-7-25
14
9.2.2 状态
组成状态之顺序子状态
如果一个组成状态的子状态对应的对象在其生命期 内的任何时刻都只能处于一个子状态,即多个子状 态之间是互斥的,不能同时存在,这种子状态称为 顺序子状态。 ♂ 当状态机通过转移从某种状态转入组成状态时,此 Running 转移的目的可能是这个组成状态本身,也可能是这 Forward 个组成状态的子状态。 Backword
动作
2013-7-25 19
9.2.3 转移
转移(transition)
♂
♂
转移是两个状态之间的一种关系,表示当一个特 定事件发生或者某些条件得到满足时,对象在第1 个状态(源状态)下执行了一定的动作,并进入第2 个状态(目标状态) 一个转移分为5部分
源状态 2. 事件触发器 3. 监护条件 4. 动作 5. 目标状态
♂
2013-7-25
15
9.2.2 状态
组成状态之并发子状态
有时组合状态有两个或者多个并发的子状态机,此 时称组成状态的子状态为并发子状态。 ♂ 顺序子状态与并发子状态的区别在于后者在同一层 Running 次给出两个或多个顺序子状态,对象处于同一层次 Forward Backword 中来自每个并发子状态的一个时序状态中。
6
9.2.2 状态
♂
初态和终态
初态
终态
2013-7-25
7
9.2.2 状态
状态的组成
♂ ♂
♂
♂ ♂
状态名 入口/出口动作 Do动作 内部转移(On Event动作) 子状态
2013-7-25
8
9.2.2 状态
状态的组成—状态名
状态名的首字母大些 ♂ 一个状态的名称在状态图所在的上下文中应该是唯 一的,状态允许匿名 ♂ 状态的名字通常放在状态图标的顶部
♂
2013-7-25
9
9.2.2 状态
状态的组成—入口/出口动作
入口动作和出口动作表示进入或退出这个状态所要 执行的动作 ♂ 入口动作用“entry/要执行的动作”表达,而出口 动作用“exit/要执行的动作”表达
♂
State
entry/ exit/
2013-7-25 10
9.2.2 状态
状态的组成—Do动作
dial event1
Idle Talking
exit/
2013-7-25
28
9.2.3 转移
自身转移
♂
原状态和目标状态相同的转移
自身转移和内部转移的不同
自转移是离开本状态后重新进入该状态,它会激发 状态的入口动作和出口动作的执行。 ♂ 内部转移自始至终都不离开本状态,所以没有出口 或入口事件,也就不执行入口和出口动作。
Busy
2013-7-25
22
9.2.3 转移
动作
Busy 动作表示在转移过程中需要做什么事情,在/后给 出活动名称,可以省略 Ringing Hung Up ♂ 动作可以包括计算、发送信号给另一个对象、操作 调用、创建和销毁对象等。
♂
anwser[ in 30s ] / connet
Connecting
1. 课程对象被创建,添加到数据库中 2. 管理员可以删除、修改课程信息 3. 课程被开设 4. 学生可以选择课程 5. 如果选修人数超过指定人数,就不再允许学会选这门课 6. 学期结束,课程的状态结束
网上选课系统的状态机图
creat[ good ] / creat course Created
entry/ get course info
♂
2013-7-25
5
9.2.2 状态
状态(state)
♂
UML的解释:对象生命周期的一种条件或情形, 在此期间它满足某些条件、执行某些活动或者等待 某些事件。 ♂ 面向对象语言的理解:对象在其生命周期内的属性 值。(划分等加状态)
Busy
Connecting
2013-7-25
Hanging
Connecting
1.
2013-7-25
20
9.2.3 转移
事件触发器
事件触发器是能够引起状态转移的事件 ♂ 事件可以是信号、调用、时间推移
♂
2013-7-25
21
9.2.3 转移
监护条件
♂
监护条件是触发转移必须满足的条件,它是一个布 Ringing Hung 尔表达式,放在事件触发器的后面 Up ♂ 监护条件只能在事件触发时被计算1次 ♂ 从一个状态引出的多个转移可以有同样的触发器事 anwser[ in 30s ] / connet 件,但是每个转移必须具有不同的监护条件 Talking ♂ 可以被省略 Connecting
26
Connecting
2013-7-25
9.2.3 转移
内部转移
♂
一旦处于某一个状态内,遇到在不想离开该状态下 的处理的事件,此时发生的转移叫做内部转移
Dialing
event dial/ du~du~
2013-7-25
27
9.2.3 转移
自身转移
♂
自身转移是没有标明触发器事件的转移,是由状态 中的活动的完成引起的,是自然而然地完成的转移。 完成转移也可以带一个监护条件,这个监护条件在 状态中的活动完成时被赋值,而非活动完成后被赋 值。
♂
Hight Speed Low Speed
2013-7-25
16
9.2.2 状态
组成状态之历史状态
历史状态代表上次离开组成状态时的最后一个活动 Active 子状态,它用一个包含字母“H”的小圆圈表示。 Forward Pause ♂ 每当转移到组成状态的历史状态时,对象便恢复到 Stop Play 上次离开该组成状态时的最后一个活动子状态,并 执行入口动作。 Back
2013-7-25
32
9.3.1 何时使用状态机图
一个状态机图只适合描述一类对象 不必对每一类对象都进行状态建模 把状态建模和对象建模进行结合
通过状态机图帮助发现和定义对象的操作 ♂ 通过定义对象的操作,完善状态机图
♂
2013-7-25
33
9.3.2 使用状态机图的哪些概念
充分运用状态机图的基本概念
♂
Dialing Talking
event dial/ du~du~
2013-7-25
12
9.2.2 状态
状态的2种情况
简单状态 ♂ 组成状态
♂
♀ 顺序子状态 ♀ 并发子状态 ♀ 历史状态
2013-7-态
简单状态是指不包含子状态。 ♂ 简单状态没有子结构,但它可以具有状态名、入口 /出口动作、Do动作、On Event动作、内部转移。
Deleted