第六章状态图和活动图
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(其中 action-expression 可以用到对象本身的属性 和输入事件的参数)
• 例如; entry/setMode(onTrack) exit/setMode(offTrack)
31
绘制状态图
• • • • 寻找主要的状态 确定状态之间的转换 细化状态内的活动与转换 用组合状态来展开细节
14
说明: • 组合状态中也有初始状态和终结状态。 • 从源状态可以转移到组合状态本身,也 可以直接转移到组合状态中的子状态。 • 子状态之间可分为“or”关系和“and”关 系两种。“or”关系说明在某一时刻仅可 到达一个子状态,“and”关系说明复合 状态中在某一时刻可同时到达多个子状 态。
15
32
寻找主要的状态,确定之间的转换
33
细化状态内的活动与转换
34
使用组合状态
35
课程注册系统中的状态图例子
36
类型为RegistrationController的对象的状态图:
37
订单处理系统的例子
38
使用组合状态
39
状态图的工具支持
• 正向工程:根据状态图生成代码。逆向向 工程:理论上可行,但实际上不大可能。 • 所生成的代码示例:
3
状态图的用途
• UML的状态图主要用于:
– 建立一个对象在其生存期间的动态行为 – 表现一个对象所经历的状态序列 – 引起状态转移的事件 – 以及因状态转移而伴随的动作
4
• 状态是对象的一组属性值,这组属性对所发生的 事件具有相同性质的反应。 • 状态图所描述的对象往往具有多个属性,一般状 态图应该在具有以下两个特性的基础上建模:
Signal(信号)
• 所谓信号,是指由一个对象异步地发送、并由 另外一个对象接收的一个已命名的对象。 • 信号是作为对象之间的通信的信息块的规范。 信号是一个显式命名的类元,其目标是对象之 间进行显示通讯,它有一些属性,构成它的信 息。通过一个发送动作,它被显式地从一个对 象发送到另一个对象。 • 信号事件表示对象接收到某个信号。 • 信号可以作为状态机中一个状态转换的动作而 被发送,也可作为交互中一个的消息发送。
41
状态图的应用
• 用途
– 对象生命周期建模
• 主要描述对象能够响应的事件,对这些事件的响应以及 过去对当前行为的影响
– 对反应型对象建模
• 这个对象可能处于稳定状态,从一个状态到另一个状态 之间的转换所需的触发事件,以及每个状态改变时发生 的动作
– 状态及既可以用来表示一个业务领域的知识,也 可以用来描述设计阶段对象的状态变迁
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
状态的类型
• 状态的类型分为:
– 初态• 一个状态Fra bibliotek只能有一个初态
– 终态
• 终态可以有一个或多个,也可以没有
– 中间状态 – 组合状态 – 历史状态
12
组合状态 • 子状态是嵌套在另一个状态中的状态。 • 一个含有子状态的状态被称作组合状态。
13
例:组合状态和子状态的例子。
第6章 状态图,活动图
东北大学信息科学与工程学院
E-Mail: yanglei@
杨雷
1/336
主要内容 状态图
活动图
2
状态图
• 状态机:一个极度确切的描述是它是一个 有向图形,由一组节点和一组相应的转移 函数组成。状态机是一个状态和装换的图, 它说明对象在它的生命期中响应事件所经 历的状态序列以及它对那些事件的响应。 • 状态图 :状态图实际上是一种由状态、变 迁、事件和活动组成的状态机。状态图描 述从状态到状态的控制流,常用于系统的 动态特性建模。
20
• 状态的之间的转移通常是由事件触发的,此时应在转移 上标出触发转移的事件表达式。如果转移上未标明事件, 则表示在源状态的内部活动执行完毕后自动触发转移。
• Transition的格式: event-signature ‘[’ guard-condition ‘]’ ‘/’ action 其中event-signature的格式为:
8
基本组成
9
状态(State)
• 定义:一个状态是指在对象的生命期中的一 个条件或状况,在此期间对象将满足某些条 件、执行某些活动或等待某些事件。 说明: • 对象在任何时候都会处于某种状态中,所有 对象都具有状态。 • 对象所处的状态决定它如何响应所检测的事 件或所接收的消息。 • 通常,事件使对象从一个状态转向另一个状 态。
40
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; }
27
信号事件
(4) Signal event: 表示的是对象接收到了信号这 种情况,信号事件往往会触发状态的转移。 • Signal event的语法格式和Call event一样。 • 信号事件是一个异步事件,调用事件一般是一 个同步事件。
28
• 信号用版型为 <<signal>>的类图标表 示。 • 信号之间可以具有泛化 关系,形成层次结构。 • 在UML中,例外 (exception)是信号的一 种。 • 例:信号之间泛化关系 的例子。
– 警戒条件只在所相关的事件出现后计算一次,如果值 为false,则不进行状态转移。 – 变化事件表示的是一个要不断测试的事件
25
时间事件
(3) Time event: 是指满足某一时间表 达式的情况的出现。 • 时间表达式可以表示绝对时间/相对 时间分别用关键字when/after表示。 例:
26
29
Action(动作)
• 一个动作是一个可执行的原子计算。它的执行 会导致系统状态的改变或者值的返回。 • 是基本的活动节点,是UML能够表达的最小计 算单元。 说明: • 从概念上讲,动作时瞬间的,是原子的,不可 被中断的,其执行时间可忽略不计的。 • UML并没有规定描述action的语言格式,一般 建模时采用实际的程序设计语言来描述。
(1) Call event (调用事件) (2) Change event (变化事件) (3) Time event (时间事件) (4) Signal event (信号事件)
23
调用事件
(1) 表示一个操作的调度。请求调用另一个 对象的操作。 • Call event的语法格式如下: 事件名 ( [逗号分隔的参数列表] ) 其中参数列表中的参数格式为: 参数名:类型 例:
6
• 状态机图与交互图的区别:
– 交互图不显示对象所有可能的动态行 为,只显示特定交互(一个具体的用 例)中多个对象的行为。 – 状态图适合于描述跨越多个用例的单 个对象的行为。
7
状态图中的基本概念
• • • • State (状态) Transition (转移) Event (事件) Action (动作)
– 属性拥有很少的值;
– 属性在这些值之间的转移有一定的限制。
• 例:类SellableItem有两个属性salePrice:Money 和status:枚举型。 其中salePrice的取值范围为正实数,status的取值 为received, inInspection, accepted, rejected等, 则应根据属性status建立状态图。
例1:子状态之间“or”关系的例子。
例2:子状态之间“and”关系的例子。
16
历史状态(History State)
• 一种伪状态,其目的是记住从组合状态中退 出时所处的子状态,当再次进入组合状态时, 可直接进入到这个子状态,而不是再次从组 合状态的初态开始。
17
历史状态例
• 当从状态“结账”和“显示购物车”返回子状态 “显示索引信息” 时,将进入的是离开时的历史状 态。 • 也就是说,转到购物或结账区之后,再回到“浏览 目录”的页面时,其中的内容是不变的,仍然保留 原来的信息。
event-name ‘(’ comma-separated-parameter-list ‘)’
21
• 对于一个给定的状态,最终只能产生一个转移, 因此从相同的状态出来的、事件相同的几个转移 之间的条件应该是互斥的。 例:
22
Event(事件)
• 事件是系统执行中发生的值得建模的事物。一个事件是 对一个在时间和空间上占有一定位置的有意义的事情的 规格说明。 • 在状态机中,一个事件的出现可以触发状态的转换。 • 事件产生的原因包括:调用、满足条件的状态的出现、 到达时间点或经历某一时间段、发送信号等。 • 在UML中,事件分为四类:
42
主要内容 状态图
活动图
43
活动图 (Activity Diagram)
• 活动图是任何系统活动以及活动之间数据 流或判断的可视表示。 • 活动图是一种表述过程基理、业务过程以 及工作流的技术。它可以用来对业务过程、 工作流建模,也可以对用例实现甚至是程 序实现来建模。 • 活动图(Activity Diagram)的应用非常广泛, 它既可用来描述操作(类的方法)的行为,也 可以描述用例和对象内部的工作过程,并可 用于表示并行过程。
10
状态的构成
• 一个状态有以下几个部分:
– 状态名 – 进入/退出动作(entry/exit action) – 内部转移(internal transition)
• 不导致状态改变的转移,不会执行entry和exit动作
– 子状态 (substate)
• 嵌套在另外一个状态中的状态
– 延迟事件 (deferred event)
18
• H和H*的区别:
– H只记住最外层的组合状态的历史。 – H*可记住任何深度的组合状态的历史。
19
转移(Transition)
• 一个转移是两个状态之间的一种关系,当 指定的事件发生,指定的监护条件得到满 足的时候,处于第一个状态的对象执行的 指定的效果(指转移激发时执行的动作或活 动),进入第二种状态。 • 转换表示在一个对象的生命历史中所有状 态之间可能有的路径,以及在状态变化时 执行的动作。转移说明了处于一个状态的 对象响应事件发生的方式。
24
变化事件
(2) Change event: 如果一个布尔表达式中的变量发生 变化,该布尔表达式的值相应的变化,从而满足某些 条件,则这种事件称为变化事件。变化事件隐含了对 于控制条件的不间断测试。 • Change event 用关键字when表示。
• Change event和警戒条件(guard condition)的区别:
30
• 两种特殊的动作: entry action(进入动作)和exit action(退出动作)。
– Entry动作:进入状态时执行的活动,格式如下:
‘entry’ ‘/’action-expression
– Exit动作:退出状态时执行的活动,格式如下:
‘exit’ ‘/’action-expression
5
说明: • 状态图是对系统的动态行为建模。 • 状态图描述了一个特定对象的所有可能 状态以及由于各种事件的发生而引起的 状态之间的转移。 • 状态图是显示状态机的一种方式,另一 种显示状态机的方式是活动图。 • Rose中,状态图不生成代码,但状态图 在检查,调试和描述类的动态行为时非 常有用。
• 例如; entry/setMode(onTrack) exit/setMode(offTrack)
31
绘制状态图
• • • • 寻找主要的状态 确定状态之间的转换 细化状态内的活动与转换 用组合状态来展开细节
14
说明: • 组合状态中也有初始状态和终结状态。 • 从源状态可以转移到组合状态本身,也 可以直接转移到组合状态中的子状态。 • 子状态之间可分为“or”关系和“and”关 系两种。“or”关系说明在某一时刻仅可 到达一个子状态,“and”关系说明复合 状态中在某一时刻可同时到达多个子状 态。
15
32
寻找主要的状态,确定之间的转换
33
细化状态内的活动与转换
34
使用组合状态
35
课程注册系统中的状态图例子
36
类型为RegistrationController的对象的状态图:
37
订单处理系统的例子
38
使用组合状态
39
状态图的工具支持
• 正向工程:根据状态图生成代码。逆向向 工程:理论上可行,但实际上不大可能。 • 所生成的代码示例:
3
状态图的用途
• UML的状态图主要用于:
– 建立一个对象在其生存期间的动态行为 – 表现一个对象所经历的状态序列 – 引起状态转移的事件 – 以及因状态转移而伴随的动作
4
• 状态是对象的一组属性值,这组属性对所发生的 事件具有相同性质的反应。 • 状态图所描述的对象往往具有多个属性,一般状 态图应该在具有以下两个特性的基础上建模:
Signal(信号)
• 所谓信号,是指由一个对象异步地发送、并由 另外一个对象接收的一个已命名的对象。 • 信号是作为对象之间的通信的信息块的规范。 信号是一个显式命名的类元,其目标是对象之 间进行显示通讯,它有一些属性,构成它的信 息。通过一个发送动作,它被显式地从一个对 象发送到另一个对象。 • 信号事件表示对象接收到某个信号。 • 信号可以作为状态机中一个状态转换的动作而 被发送,也可作为交互中一个的消息发送。
41
状态图的应用
• 用途
– 对象生命周期建模
• 主要描述对象能够响应的事件,对这些事件的响应以及 过去对当前行为的影响
– 对反应型对象建模
• 这个对象可能处于稳定状态,从一个状态到另一个状态 之间的转换所需的触发事件,以及每个状态改变时发生 的动作
– 状态及既可以用来表示一个业务领域的知识,也 可以用来描述设计阶段对象的状态变迁
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
状态的类型
• 状态的类型分为:
– 初态• 一个状态Fra bibliotek只能有一个初态
– 终态
• 终态可以有一个或多个,也可以没有
– 中间状态 – 组合状态 – 历史状态
12
组合状态 • 子状态是嵌套在另一个状态中的状态。 • 一个含有子状态的状态被称作组合状态。
13
例:组合状态和子状态的例子。
第6章 状态图,活动图
东北大学信息科学与工程学院
E-Mail: yanglei@
杨雷
1/336
主要内容 状态图
活动图
2
状态图
• 状态机:一个极度确切的描述是它是一个 有向图形,由一组节点和一组相应的转移 函数组成。状态机是一个状态和装换的图, 它说明对象在它的生命期中响应事件所经 历的状态序列以及它对那些事件的响应。 • 状态图 :状态图实际上是一种由状态、变 迁、事件和活动组成的状态机。状态图描 述从状态到状态的控制流,常用于系统的 动态特性建模。
20
• 状态的之间的转移通常是由事件触发的,此时应在转移 上标出触发转移的事件表达式。如果转移上未标明事件, 则表示在源状态的内部活动执行完毕后自动触发转移。
• Transition的格式: event-signature ‘[’ guard-condition ‘]’ ‘/’ action 其中event-signature的格式为:
8
基本组成
9
状态(State)
• 定义:一个状态是指在对象的生命期中的一 个条件或状况,在此期间对象将满足某些条 件、执行某些活动或等待某些事件。 说明: • 对象在任何时候都会处于某种状态中,所有 对象都具有状态。 • 对象所处的状态决定它如何响应所检测的事 件或所接收的消息。 • 通常,事件使对象从一个状态转向另一个状 态。
40
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; }
27
信号事件
(4) Signal event: 表示的是对象接收到了信号这 种情况,信号事件往往会触发状态的转移。 • Signal event的语法格式和Call event一样。 • 信号事件是一个异步事件,调用事件一般是一 个同步事件。
28
• 信号用版型为 <<signal>>的类图标表 示。 • 信号之间可以具有泛化 关系,形成层次结构。 • 在UML中,例外 (exception)是信号的一 种。 • 例:信号之间泛化关系 的例子。
– 警戒条件只在所相关的事件出现后计算一次,如果值 为false,则不进行状态转移。 – 变化事件表示的是一个要不断测试的事件
25
时间事件
(3) Time event: 是指满足某一时间表 达式的情况的出现。 • 时间表达式可以表示绝对时间/相对 时间分别用关键字when/after表示。 例:
26
29
Action(动作)
• 一个动作是一个可执行的原子计算。它的执行 会导致系统状态的改变或者值的返回。 • 是基本的活动节点,是UML能够表达的最小计 算单元。 说明: • 从概念上讲,动作时瞬间的,是原子的,不可 被中断的,其执行时间可忽略不计的。 • UML并没有规定描述action的语言格式,一般 建模时采用实际的程序设计语言来描述。
(1) Call event (调用事件) (2) Change event (变化事件) (3) Time event (时间事件) (4) Signal event (信号事件)
23
调用事件
(1) 表示一个操作的调度。请求调用另一个 对象的操作。 • Call event的语法格式如下: 事件名 ( [逗号分隔的参数列表] ) 其中参数列表中的参数格式为: 参数名:类型 例:
6
• 状态机图与交互图的区别:
– 交互图不显示对象所有可能的动态行 为,只显示特定交互(一个具体的用 例)中多个对象的行为。 – 状态图适合于描述跨越多个用例的单 个对象的行为。
7
状态图中的基本概念
• • • • State (状态) Transition (转移) Event (事件) Action (动作)
– 属性拥有很少的值;
– 属性在这些值之间的转移有一定的限制。
• 例:类SellableItem有两个属性salePrice:Money 和status:枚举型。 其中salePrice的取值范围为正实数,status的取值 为received, inInspection, accepted, rejected等, 则应根据属性status建立状态图。
例1:子状态之间“or”关系的例子。
例2:子状态之间“and”关系的例子。
16
历史状态(History State)
• 一种伪状态,其目的是记住从组合状态中退 出时所处的子状态,当再次进入组合状态时, 可直接进入到这个子状态,而不是再次从组 合状态的初态开始。
17
历史状态例
• 当从状态“结账”和“显示购物车”返回子状态 “显示索引信息” 时,将进入的是离开时的历史状 态。 • 也就是说,转到购物或结账区之后,再回到“浏览 目录”的页面时,其中的内容是不变的,仍然保留 原来的信息。
event-name ‘(’ comma-separated-parameter-list ‘)’
21
• 对于一个给定的状态,最终只能产生一个转移, 因此从相同的状态出来的、事件相同的几个转移 之间的条件应该是互斥的。 例:
22
Event(事件)
• 事件是系统执行中发生的值得建模的事物。一个事件是 对一个在时间和空间上占有一定位置的有意义的事情的 规格说明。 • 在状态机中,一个事件的出现可以触发状态的转换。 • 事件产生的原因包括:调用、满足条件的状态的出现、 到达时间点或经历某一时间段、发送信号等。 • 在UML中,事件分为四类:
42
主要内容 状态图
活动图
43
活动图 (Activity Diagram)
• 活动图是任何系统活动以及活动之间数据 流或判断的可视表示。 • 活动图是一种表述过程基理、业务过程以 及工作流的技术。它可以用来对业务过程、 工作流建模,也可以对用例实现甚至是程 序实现来建模。 • 活动图(Activity Diagram)的应用非常广泛, 它既可用来描述操作(类的方法)的行为,也 可以描述用例和对象内部的工作过程,并可 用于表示并行过程。
10
状态的构成
• 一个状态有以下几个部分:
– 状态名 – 进入/退出动作(entry/exit action) – 内部转移(internal transition)
• 不导致状态改变的转移,不会执行entry和exit动作
– 子状态 (substate)
• 嵌套在另外一个状态中的状态
– 延迟事件 (deferred event)
18
• H和H*的区别:
– H只记住最外层的组合状态的历史。 – H*可记住任何深度的组合状态的历史。
19
转移(Transition)
• 一个转移是两个状态之间的一种关系,当 指定的事件发生,指定的监护条件得到满 足的时候,处于第一个状态的对象执行的 指定的效果(指转移激发时执行的动作或活 动),进入第二种状态。 • 转换表示在一个对象的生命历史中所有状 态之间可能有的路径,以及在状态变化时 执行的动作。转移说明了处于一个状态的 对象响应事件发生的方式。
24
变化事件
(2) Change event: 如果一个布尔表达式中的变量发生 变化,该布尔表达式的值相应的变化,从而满足某些 条件,则这种事件称为变化事件。变化事件隐含了对 于控制条件的不间断测试。 • Change event 用关键字when表示。
• Change event和警戒条件(guard condition)的区别:
30
• 两种特殊的动作: entry action(进入动作)和exit action(退出动作)。
– Entry动作:进入状态时执行的活动,格式如下:
‘entry’ ‘/’action-expression
– Exit动作:退出状态时执行的活动,格式如下:
‘exit’ ‘/’action-expression
5
说明: • 状态图是对系统的动态行为建模。 • 状态图描述了一个特定对象的所有可能 状态以及由于各种事件的发生而引起的 状态之间的转移。 • 状态图是显示状态机的一种方式,另一 种显示状态机的方式是活动图。 • Rose中,状态图不生成代码,但状态图 在检查,调试和描述类的动态行为时非 常有用。