UML及软件建模 主讲人:李唯 Clx7000@163.com
Page 1 UML及软件建模 主讲人 :李 唯 clx7000@163.com
第七章状态图 什么是状态图,如何使用它 如何使用事件,动作和保护条件 如何对子状态,历史状态和连接点建模
Page 2 第七章 状态图 什么是状态图,如何使用它 如何使用事件,动作和保护条件 如何对子状态,历史状态和连接点建模
概述 状态视图通过对类对象的生存周期建立模型来描述对象随时间变化的动 态行为。每一个对象都被看作是通过对事件进行探测并做出回应来与外 界其他部分通信的独立的实体。 事件表示对象可以探测到的事物的一种运动变化如接受到从一个对象 到另一个对象的调用或信号、某些值的改变或一个时间段的终结。任何 影响对象的事物都可以是事件,真实世界所发生的事物的模型通过从外 部世界到系统的信号来建造的。 状态是给定类的对象的一组属性值这组属性值对所发生的事件具有相同 性质的反应。换而言之,处于相同状态的对象对同一事件具有同样方式 的反应,所以当给定状态下的多个对象当接受到相同事件时会执行相同 的动作,然而处于不同状态下的对象会通过不同的动作对同一事件做出 不同的反应。例如,当自动答复机处于处理事务状态或空闲状态时会对 取消键做出不同的反应
Page 3 1、概述 状态视图通过对类对象的生存周期建立模型来描述对象随时间变化的动 态行为。每一个对象都被看作是通过对事件进行探测并做出回应来与外 界其他部分通信的独立的实体。 事件表示对象可以探测到的事物的一种运动变化—如接受到从一个对象 到另一个对象的调用或信号、某些值的改变或一个时间段的终结。任何 影响对象的事物都可以是事件,真实世界所发生的事物的模型通过从外 部世界到系统的信号来建造的。 状态是给定类的对象的一组属性值,这组属性值对所发生的事件具有相同 性质的反应。换而言之,处于相同状态的对象对同一事件具有同样方式 的反应,所以当给定状态下的多个对象当接受到相同事件时会执行相同 的动作,然而处于不同状态下的对象会通过不同的动作对同一事件做出 不同的反应。例如,当自动答复机处于处理事务状态或空闲状态时会对 取消键做出不同的反应
状态用于描述类的行为,但它们也描述用例、协作和方法的动态行为。对 这些对象方面而言,一个状态代表了执行中的一步。我们通常用类和对象 来描述状态,但是它也可以被其他元素所直接应用 状态描述了一个类对象生命期中的一个时间段。它可以用三种附加方式说 明:在某些方面性质相似的一组对象值;一个对象等待一些事件发生时的 段时间;对象执行持续活动时的一段时间。虽然状态通常是匿名的并仅 用处于该状态时对象进行的活动描述,但它也可以有名字 在状态机中,一组状态由转换相连接。虽然转换连接着两个状态(或多个 状态,如果图中含有分支和结合控制),但转换只由转换出发的状态处理 当对象处于某种状态时,它对触发状态转换的触发器事件很敏感。 状态用具有圆形拐角的矩形表示。如图所示 Initialization
Page 4 状态用于描述类的行为,但它们也描述用例、协作和方法的动态行为。对 这些对象方面而言,一个状态代表了执行中的一步。我们通常用类和对象 来描述状态,但是它也可以被其他元素所直接应用。 状态描述了一个类对象生命期中的一个时间段。它可以用三种附加方式说 明:在某些方面性质相似的一组对象值;一个对象等待一些事件发生时的 一段时间;对象执行持续活动时的一段时间。虽然状态通常是匿名的并仅 用处于该状态时对象进行的活动描述,但它也可以有名字。 在状态机中,一组状态由转换相连接。虽然转换连接着两个状态(或多个 状态,如果图中含有分支和结合控制),但转换只由转换出发的状态处理 。当对象处于某种状态时,它对触发状态转换的触发器事件很敏感。 状态用具有圆形拐角的矩形表示。如图所示。 Initialization
状态间带箭头的实线代表状态的迁移,箭头指向目标状态。 图中的实心圆代表状态转移的起点,带圆圈的实心圆代表终 点 Initialization Canceled
Page 5 Initialization 状态间带箭头的实线代表状态的迁移,箭头指向目标状态。 图中的实心圆代表状态转移的起点,带圆圈的实心圆代表终 点。 Canceled
2、在状态图中增加细节 ①中提供了在状态图中增加细节的选项。可以把状态图标 分成两个区域。最上面的区域保存状态名(必要),下面的区 域保存在该状态中发生的活动。如下图所示 Initialization Do/ Initialize course 常见的三个活动是: 1、入口动作( entry):进入某一状态时执行的动作 2、动作(do):系统处于该状态时要发生的动作。 3、出口动作(exit):离开某一状态时执行的动作
Page 6 2、在状态图中增加细节 UML中提供了在状态图中增加细节的选项。可以把状态图标 分成两个区域。最上面的区域保存状态名(必要),下面的区 域保存在该状态中发生的活动。如下图所示: Initialization Do/ Initialize course 常见的三个活动是: 1、入口动作(entry ) :进入某一状态时执行的动作。 2、动作(do):系统处于该状态时要发生的动作。 3、出口动作(exit ):离开某一状态时执行的动作
Faxing entry输入传真号 ext完成传送 do/传真纸进入 do/逐页传真 状态图中增加细节示例图
Page 7 状态图中增加细节示例图 Faxing entry/输入传真号 do/逐页传真 exit/完成传送 do/传真纸进入
3、触发器事件( trigger event 触发器事件是引起转换的事件。事件可以有参数,以供转换 的动作使用。 添加的事件和动作写在转移线上。 有时候一个事件会引起没有相关动作的状态转移,或者有时 个转移是由于某个状态完成了它的活动所引起(而不是由 于事件引起)。这种类型的状态转移被称为无触发器转移( trigglerless transition 初始化 打开计算机 工作关机 关机中 Do/启动
Page 8 3、触发器事件 (trigger event 触发器事件 ) 是引起转换的事件。事件可以有参数,以供转换 的动作使用。 添加的事件和动作写在转移线上。 有时候一个事件会引起没有相关动作的状态转移,或者有时 一个转移是由于某个状态完成了它的活动所引起(而不是由 于事件引起)。这种类型的状态转移被称为无触发器转移( trigglerless transition)。 初始化 关机中 Do/启动 打开计算机 工作 关机
增加转移的细节:保护条件 转换可能具有一个保护条件,保护条件是一个布尔表达式。保护条件可以引 用对象的属性值和触发事件的参数。当一个触发器事件被触发时,监护条件 被赋值。如果布尔表达式的值为“真”,那么触发事件即,使转换有效。如 果布尔表达式的值为“假”,则不会引起转换。保护条件只能在触发事件发 生时被赋值一次。如果在转换发生后保护条件由原来的“假”变为“真”, 则因为赋值太迟而不能触发转换。 从一个状态引出的多个转换可以有同样的触发器事件,但是每个转换必须具 有不同的保护条件。当其中一个保护条件满足时,触发器事件会引起相应的 转换。通常,保护条件的设置要考虑到各种可能的情况以确保一个触发器事 件的发生应该能够引起某些转换。如果有些情况没有考虑到,一个触发器事 件没有引起任何转换,那么在状态机视图中要忽略这个事件。一个事件的发 生只能同时引起一个转换(在一个控制线程中)。如果一个事件可能引起多 个转换,那么其中只有一个转换有效。如果两个相互矛盾的转换同时有效 则无法确定到底发生了哪个转换。这两个转换随机地发生一个,或者由系统 的实现细节决定究竟发生哪一个,但是对建模者来说,无法预料这种转换产 生的后果
Page 9 转换可能具有一个保护条件,保护条件是一个布尔表达式。保护条件可以引 用对象的属性值和触发事件的参数。当一个触发器事件被触发时,监护条件 被赋值。如果布尔表达式的值为“真”,那么触发事件即,使转换有效。如 果布尔表达式的值为“假”,则不会引起转换。保护条件只能在触发事件发 生时被赋值一次。如果在转换发生后保护条件由原来的“假”变为“真”, 则因为赋值太迟而不能触发转换。 从一个状态引出的多个转换可以有同样的触发器事件,但是每个转换必须具 有不同的保护条件。当其中一个保护条件满足时,触发器事件会引起相应的 转换。通常,保护条件的设置要考虑到各种可能的情况以确保一个触发器事 件的发生应该能够引起某些转换。如果有些情况没有考虑到,一个触发器事 件没有引起任何转换,那么在状态机视图中要忽略这个事件。一个事件的发 生只能同时引起一个转换(在一个控制线程中)。如果一个事件可能引起多 个转换,那么其中只有一个转换有效。如果两个相互矛盾的转换同时有效, 则无法确定到底发生了哪个转换。这两个转换随机地发生一个,或者由系统 的实现细节决定究竟发生哪一个,但是对建模者来说,无法预料这种转换产 生的后果。 4、增加转移的细节:保护条件
初始化 打开计算机 工作关机 关机中 Do启动 设定 键盘或 时间 鼠标 移动 屏幕 保护 保护条件示例图
Page 10 保护条件示例图 初始化 关机中 Do/启动 打开计算机 工作 关机 屏幕 保护 设定 时间 键盘或 鼠标 移动