状态图

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


关灯 内部转换由 “off”事件激发
entry/lamp.off();
exit/printf(“exiting”);
off/null;
面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
状态
延迟事件

OO
OOP
Process
OOD

仅当对象的行为规则有所不同时,才称对象处于不同状态
OOA UML
状态
状态的表示
名称分栏:
OO
OOP
Process
OOD
可以在该分栏中放置状态名。 没有名称的状态是匿名的, 但同一张图中的匿名状态是各不相同的。 在同一张状态图里不应该出现具有相同名称的状态.
内部转换分栏: 用该分栏给出对象在这个状态中所执行 的内部动作或活动的列表。 各表项的表示法的一般格式为: 动作标号’/’动作表达式
OOA UML
OO
OOP
Βιβλιοθήκη Baidu
Process
OOD
第 8周 面向对象的系统分析——状态图
北京大学软件与微电子学院
蒋严冰 jyb@ss.pku.edu.cn
OOA UML
提纲
1.引入
2.基本状态图
OO
OOP
Process
OOD
3.状态图中的高级概念
面向对象技术高级课程 The Advanced Object-Oriented Technology


当事变/事件发生时,事物可能需要采取一些动作。
面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
事物的一般生命周期形式
事物的一般生命周期形式

OO
OOP
Process
OOD
Sally Shlaer & Stephen Mellor(1988) 周期性生命周期
OOA UML
最终状态不是伪状态
一个被圆圈套起来的实心圆点表示。
OO
OOP
Process
OOD
UML还定义了另外一个与终止很相似的概念——最终状态(final state),用 最终状态表明复合状态中的一个区域的活动已经完成,如果复合状态有多个区
域,那么所有这些区域必须都执行完毕。
最终状态不是伪状态的原因是,最终状态可以在一段时间内保持在该状态下
如:飞机、微波炉

出生-死亡生命周期
人,糖
面向对象技术高级课程 The Advanced Object-Oriented Technology
状态机与对象 ——对象与线程
•被动对象: 依赖外力 (线程的执行) •主动对象: 自动 (自身的线程的执行)
OOA UML
OO
OOP
Process
OOD
EnterPassword
entry/password.reset() exit/password.test() digit/handle character Clear/password.reset() help/display help print/defer do/suppress echo
延迟事件
调用另一个对象(包括自身)的一个公共操作(调用拥有状态机的对象或其他可见的对象)
以及创建或撤消另一个对象(包括自身) 返回一个值或值集 …… 在转化中、在状态的入口、在一个对象处于一个状态的整个期间、在状态的出口、在引起状态转化的事件到来时, 或在没有引起状态转化的事件到来时。
面向对象技术高级课程 The Advanced Object-Oriented Technology
面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
状态
伪状态

OO
OOP
Process
OOD
初始状态和终止状态都是伪状态。 伪状态(pseudo state) 正如其字面意义所表明的,伪状态实际上并不是一种 状态,只是为了加强状态机图的可视化表示而引入的一些图形符号,都是结点 (顶点)型的图形成分。 《UML参考手册》中认为这些伪状态与一般状态的区别是没有内部转换分栏, 不会在该伪状态上停留一定的时间,也不能处理事件,所以不是一般意义上的状 态,但在表示法上与一般的状态很相似,故称之为伪状态。
时间间隔 日历/时钟时间
即时时刻的发生 (时间事件)


某些实体的数值上的变化 (变化事件) 尽管不同类型的事件的实现方式都不相同,但在状态机图上却具有相同的表示,体现了状态机图很强的概括和抽象机制。 在特定的即时时刻发生,没有持续时间.
《UML参考手册》:事件是系统执行中发生的值得注意的事情,可以触发状态的转换。同时强调事件是一种发生事情的类型,其实 例——即事件的发生——称为触发器。 因此在UML2.0中,事件并不显式的出现在模型中,但是事件这个术语实际上还继续保留着,并且还定义了好几种具体的事件,对于 在实践中识别事件具有启发意义。
内部活动
面向对象技术高级课程 The Advanced Object-Oriented Technology
状态转换
转换是两个状态之间的一种关系,表示当一个特定事件出现时,如果满足一定的条件,对象就从第一个状态 (源状态)进入第二个状态(目标状态),并执行一定的动作。转换本身也是原子的。

是布尔表达式,根据触发事件的参数 和拥有这个状态机的对象的属性和链来 书写这样的布尔表达式。 当事件触发器接收事件而要触发转换时,对它求值; 如果表达式取值为真,则激活转换; 如果为假,则不激活转换,而且如果没有其他 的转换被此事件所触发,则该事件丢失。
描述带有参数的事件: 事件名(由逗号分隔的参数表)
是由动作组成的动作序列, 其中包括显式地产生事件的动作,如发送信号或调用操作。 可以根据对象的属性、操作和链以及触发事件的参数, 或在其范围内的其它特征书写动作表达式。 它可以直接作用于拥有状态机的对象, 并间接作用于对该对象是可见的其它对象。
原状态
事件特征标记[监护条件]/动作表达式
目标状态
OOA UML
举例
LampOn
entry/lamp.on(); exit/printf(“exiting”);

动作发生的时机:

OOA UML
三种保留的动作标号

OO
OOP
Process
OOD
entry/进入动作

这个标号标识由相应的动作表达式规定的动作,在进入状态时执行该动作。不能有参数或监护 条件。

exit/退出动作

这个标号标识由相应的动作表达式规定的动作,在退出状态时执行该动作。不能有参数或监护 条件。
开灯
entry/lamp.on(); exit/lamp.off();
e2
e1
面向对象技术高级课程 The Advanced Object-Oriented Technology

do/活动


这个标号标识正在进行的活动(“do 活动”),只要被建模的对象是在当 前状态中,或没有完成由动作表达式指定的计算,就执行这个活动(后者 的完成可能导致一个完成事件) 活动是在对象处于一个状态中的整个阶段执行的一个动作或动作的集合。 活动不是原子的,在执行中可以被事件打断。 动作完成 通过一个向外的转换离开了该状态
(需要等待其他正交区域的完成),不像伪状态那样进入后直接转换到其后续状态, 所以它不是伪状态。
但它也不是一般的状态,因为不允许有从它出发的事件触发转换。
面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
动作

OO
OOP
Process

《UML参考手册》: 状态是一个对象的生命期的一个阶段,在该阶段中,该对象满足一些特定的条件、从事特 定的活动或等待某个(些)事件。

识别一个对象具有多少状态不能机械地根据其属性和属性值,而取决于完整描述 对象行为的需要。

《对象技术词典》:

对象或者类的整体行为(例如响应消息)的某些规则所能适应的(对象或类的)状况、 情况、条件、形式或生存周期阶段。 认识和区别对象的状态将着眼于它对对象行为规则的不同影响
OOD
动作是在状态内或在转化时所做的操作,是原子的和即时的,就是说,它在相关状态的抽象层次上是不可间断的。 一个动作可能:

设置或修改本对象的一个属性 产生发送给分析范围之外的事件(例如,操作员、硬件设备或在另一个系统/子系统中的对象) 执行对象的一个操作 向一个对象发送信号


对象初始化
对象初始化
等待请求
等待请求
处理请求
处理请求
终止对象
终止对象
面向对象技术高级课程 The Advanced Object-Oriented Technology
To be continued…
OOA UML
2.基本状态图
2.1基本概念

OO
OOP
Process
OOD
状态 事件(触发器) 动作(活动) 转换
关灯
entry/lamp.off();
exit/printf(“exiting”);
动作标号: 标识触发相应动作表达式的事件, 动作表达式可以使用对象范围内的任何属性和链。 这三个保留的动作标号entry、exit和do
off/null;
面向对象技术高级课程 The Advanced Object-Oriented Technology

Webster的New World Dictionary(新世界字典): 在给定时间、方法和行为的情况下,与某人或某件事相关的一组环境变量或属性集。

尽管对象的状态可以表现为其属性值的变化,并不是对象的每个属性都是决定对 象状态的属性,并且对象的一个属性的各种可能的取值并不一定都成为该对象的 状态。
2.2状态图
2.3举例
面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
2.1事件

OO
OOP
Process
OOD
事件 = 对可观察的发生事情的类型,包括:

交互:

同步的对象操作调用 (调用事件)


异步的信号接收(信号事件)

面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
UML中的伪状态
条件1 条件2 初始 进入 H 浅历史
OO
OOP
Process
OOD
选择
分岔
最终状态 H* 接合 汇合 终止 退出 深历史
各种伪状态与最终状态
面向对象技术高级课程 The Advanced Object-Oriented Technology
OOA UML
状态
内部转换

OO
OOP
Process
OOD
除了预定义的三个标号外,在所有的其它情况中,动作标号标 识触发相应动作表达式的事件。这些事件触发内部转换,在语 义上它们等价于自转换,只是不退出状态和再进入状态,不会导 致状态的改变。
事件名(用逗号分隔的参数表)[监护条件]/ 动作表达式
OOA UML
1.引入
对事物所处的状态及其变迁的考虑

OO
OOP
Process
OOD
大多数事物在其生命周期中经历了不同的阶段; 事物在其生存阶段,按次序递进;
在现实世界中,存在着引起事物状态间的递进(或者表明它已经递进)的 事变;
对象在一段有限的时间内,位于某个状态中; 事物从一个阶段到另一个阶段的递进是即时的;

引发并行执行的线程直到:



如do/op1(a);op2(b);op3(c)
所做的活动
Error
entry/printf(“error!”) do/while (true) alarm.ring();
OOA UML
实例:打印服务器-输入口令
入口动作 出口动作 内部转换
OO
OOP
Process
OOD
面向对象技术高级课程 The Advanced Object-Oriented Technology

事件实例 = 事件 (类型)的一个实例



状态

《对象技术词典》1995:对象状态(object state) 对象或者类的所有属性的当前值。

对象的每一个属性值的任何一点的变化都被理解为对象处于不同的状态。对象的 状态数量将是巨大的,甚至是无穷的。在系统开发中认识和辨别对象这么多状态 既无可能亦无必要。
延迟事件是指在当 前状态下暂不处理, 但将推迟到该对象 的另一个状态下排 队处理的事件。也 就是说,在某些建 模情况下,可能想 要识别某些事件, 但延迟对它们的响 应,直到以后才执 行。
延迟事件
关灯
entry/lamp.off() off/defer off/ on/
开灯
entry/lamp.on()
相关文档
最新文档