第6章 状态机图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

14
例1:子状态之间“or”关系的例子。
例2:子状态之间“and”关系的例子。
15
History State(历史状态)


History State: A pseudostate whose activation restores the previously active state within a composite state. 使用历史状态,可以记住从组合状态中退出时 所处的子状态,当再次进入组合状态时,可直 接进入到这个子状态,而不是再次从组合状态 的初态开始。
7
状态(State)


定义:A state is a condition or situation during the life of an object during which it satisfies some condition, performs some activity, or waits for some event. 一个状态是指在对象的生命期中的一个条件或 状况,在此期间对象将满足某些条件、执行某 些活动或等待某些事件。
22


说明: 在UML中,事件分为四类: (1) Call event (调用事件) (2) Change event (变化事件) (3) Time event (时间事件) (4) Signal event (信号事件)
23
(1) Call event: The event of receiving a call for an operation that is implemented by actions on state machine transitions. Call event的语法格式如下: 事件名 ( [逗号分隔的参数列表] ) 其中参数列表中的参数格式为: 参数名:类型 例:
else body.append(c); } return false; } public StringBuffer getToken() { return token; } public StringBuffer getBody() { return body; } private final static int Waiting = 0; private final static int GettingToken = 1; private final static int GettingBody = 2; private int state = Waiting; private StringBuffer token, body; }
11
composite state(组合状态)和 substate(子状态)


A composite state is a state that consists of either concurrent substates or sequential substates. A substate is a state that is nested inside another one.
8
说明: 所有对象都具有状态,状态是对象执行了一系列 活动的结果。当某个事件发生后,对象的状态将 发生变化。 状态图中定义的状态有:初态、终态、中间状态、 组合状态、历史状态等。 一个状态图只能有一个初态,而终态可以有多个, 也可以没有终态。 从初始状态出发的转换表示创建或初始化对象时 进入的状态 终止状态代表对象在响应撤消、关掉,或其他终 止事件时到达的状态
18

Transition图例
说明: 状态的之间的转移通常是由事件触发的,此时应在转移上 标出触发转移的事件表达式。如果转移上未标明事件,则 表示在源状态的内部活动执行完毕后自动触发转移。 Transition的格式: event-signature ‘[’ guard-condition ‘]’ ‘/’ action 其中event-signature的格式为: event-name ‘(’ comma-separated-parameter-list ‘)’
9
stop
off load stop load Playing Open off load
Closed
play
off
play
play stop
初始状态和终止状态
10

一个状态有以下几个部分:




name entry/exit action internal transition substate deferred event
3
状态图的用途




主要用于设计阶段的建模,对于状态相关的设 计类,可以画状态图来增加对类的理解 为一个对象的生命周期建立模型,帮助分析、 设计和开发人员理解对象的行为 描述一个对象穿越多个用例的行为 可以对对象的行为建模,也可以对一个子系统 或整个系统的行为建模 状态图中每一个状态转移事件都与一个操作关 联
26
(4) Signal event: An event that is the receipt by an object of a signal sent to it, which may trigger a transition in its state machine. Signal event的语法格式和Call event一样。 信号事件是一个异步事件,调用事件一般是一个 同步事件。

21
Event(事件)

An event is the specification of a noteworthy occurrence that has a location in time and space. 一个事件是对一个在时间和空间上占有一定 位置的有意义的事情的规格说明。 事件产生的原因包括:调用、满足条件的状 态的出现、到达时间点或经历某一时间段、 发送信号等。
28

两种特殊的动作: entry action(进入动作)和exit action(退出动作)。

Entry动作:进入状态时执行的活动,格式如下:
‘entry’ ‘/’action-expression

Exit动作:退出状态时执行的活动,格式如下:
‘exit’ ‘/’action-expression
16

H和H*的区别:


H只记住最外层的组合状态的历史。 H*可记住任何深度的组合状态的历史。
例:历史状态的例子。
17
Transition(转移)


A transition is a relationship between two states indicating that an object in the first state will perform specified actions and enter the second state when a specified event occurs and specified guard conditions are satisfied. 一个转移是两个状态之间的一种关系,表示对象 将在第一个状态中执行一定的动作,并在某个特 定事件发生而且某个特定的警戒条件满足时进入 第二个状态。
31
class MessageParser { public boolean put(char c) { switch (state) { case Waiting: if (c == '<') { state = GettingToken; token = new StringBuffer(); body = new StringBuffer(); } break; case GettingToken : if (c == '>') state = GettingBody; else token.append(c); break; case GettingBody : if (c == ';') { state = Waiting; return true; }
6





状态图显示一个对象可能的状态,它能够检测到的事 件,以及它对这些事件的响应。 例如,CD播放机示例,标识了打开、关闭和正在播 放状态 检测到的事件就是发送给它的消息 例如,CD播放机示例,包括至少三个事件“装入 (load)”、“播放(play)”和“停止(stop)” 检测到一个事件可能导致对象从一个状态移动到另一 个状态,这样的移动称为转换 例如,如果CD播放机处于打开状态,按下装入按钮 将引起抽屉关闭,并且CD播放机移动到关闭状态。
19
play[no CD]
stop
play[no CD]
Closed play[CD present] stop load Playing play[CD present] play Open load load
stop
使用监护条件区分转换
20
一个转移包括五部分:source state, event trigger, guard condition, action, target state. 对于一个给定的状态,最终只能产生一个转移, 因此从相同的状态出来的、事件相同的几个转移 之间的条件应该是互斥的。 例:
4
状态图中的基本概念


State (状态) Transition (转移) Event (事件) Action (动作)
5
stop
Closed play stop load Playing Open load load
play
play stop
CD播放机的一个简单状态机

系统的状态以圆角矩形表示,其中写着状态的名字 状态转换用连接两个状态的箭头表示,每个这样的箭头必须标 注一个事件的名字
第六章 状态图,活动图
主要内容
状态图
活动图
2
Statechart Diagram(状态图)



定义:状态图说明了对象对它在生存期期间 可能检测到的事件的响应 说明:在两个时间一个对象的属性很可能不 同,可是却处在相同的行为状态。 例如,CD播放机的“关闭”状态可以提供一 个示例:抽屉中有或者没有CD可以被认为是 CD播放机不同的属性值,但是在任一情况下 都可以认为播放机处于关闭状态。
24
(2) Change event: The event of a Boolean expression becoming satisfine or more of the values it references. Change event用关键字when表示。例
(其中 action-expression 可以用到对象本身的属性和输入事 件的参数)
29
• Rose中状态的
Action Specification 对话框。 –On Entry –On Exit –Do –On Event
30
状态图的工具支持

正向工程:根据状态图生成代码。例:

所生成的代码示例:

Change event和警戒条件(guard condition)的区 别: 警戒条件只在所相关的事件出现后计算一次, 如果值为false,则不进行状态转移。
25
(3) Time event: An event that denotes the satisfaction of a time expression, such as the occurrence of an absolute time or the passage of a given amount of time after an object enters a state. Time event用关键字after或when表示。 例:
27
Action(动作)


An action(动作) is an executable atomic computation. 一个动作是一个可执行的原子计算。
说明: 动作是原子的,不可被中断的,其执行时间可忽 略不计的。 UML并没有规定描述action的语言格式,一般建模 时采用实际的程序设计语言来描述。


子状态是嵌套在另一个状态中的状态。 一个含有子状态的状态被称作组合状态。
12
例:组合状态和子状态的例子。
13
说明: 组合状态中也有初始状态和终结状态。 从源状态可以转移到组合状态本身,也可以 直接转移到组合状态中的子状态。 子状态之间可分为“or”关系和“and”关系 两种。“or”关系说明在某一时刻仅可到达 一个子状态,“and”关系说明复合状态中在 某一时刻可同时到达多个子状态。
相关文档
最新文档