状态图

状态图用于描述对象在其生命周期中的状态变化,由状态、事件、动作和转换构成。事件包括交互、即时时刻和数值变化,如同步操作调用、信号接收、时间事件等。状态图中的动作是原子且即时的,如进入和退出状态的动作。转换在特定事件发生且满足条件时发生,动作可以与转换关联。伪状态不是真正状态,但用于增强可视化表示,如初始和终止状态。复杂状态图涉及并发状态、历史状态和组合状态,实现状态图需要实现动作、管理状态和事件处理程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所谓状态图就是要描述一个对象的生命周期的整个过程中或某些阶段的状态的变化的过程,以及随着状态的变化产生的动作过动作序列。

简单化的状态图可以只由状态、事件(触发器)、动作(活动)和转换组成。

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

(1)交互:

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

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

(2)即时时刻的发生(时间事件):

 时间间隔

 日历/时钟时间

(3)某些实体的数值上的变化(变化事件)

 尽管不同类型的事件的实现方式都不相同,但在状态机图上却具有相同的表示,体现了状态机图很强的概括和抽象机制。

 

 

状态的表示、内部转换、延迟事件、伪状态与最终状态

内部转换在语义上它们等价于自转换,只是不退出状态和再进入状态,不会导致状态的改变。

内部转换在比较复杂的情况下还可以带一个坚守条件,就是说来了一个事件,要求这个人干什么事情这是个事件,然后呢这个人必须得满足内部的某一个条件,称之为监护条件,然后才能够做,如果他不满足这个监护条件呢,他就不会做。

 

延迟事件是指在当前状态下暂不处理,但将推迟到该对象的另一个状态下排队处理的事件。延迟事件和主动对象和被动对象没有关系,这种机制是跟主动对象和被动对象的状态图没有任何关系

 

伪状态实际上并不是一种状态,只是为了加强状态机图的可视化表示而引入的一些图形符号,都是结点(顶点)型的图形成分。初始状态和终止状态都是伪状态。

伪状态和一般状态的区别就是没有内部转换。

在伪状态上不做任何的一分一秒的这种间隔时间停留。也不处理事件,也不停留时间,因此不是一般意义上的状态的定义。

状态是生命周期的一个阶段,实际是要有一定的时间间隔。另外状态又是一个规则,它描述了一个将一些事件影射为动作的一个规则的一个集合体,因此呢,它既然不处理事件它也没有这个集合,所以它不称为真正意义上的状态,但是它又在uml中它又与状态的表示法很相似,所以称之为伪状态。

伪状态第一个条件是没有内部转换集合,第二个条件就是不持续一定的时间,也就说在进入这个伪状态一刹那就退出。final状态只满足第一个条件,不满足第二个条件。

 

 

状态图中的动作、活动与转换

动作是在状态内或在转化时所做的操作,是原子的和即时的,就是说,它在相关状态的抽象层次上是不可间断的。

动作实际上就是一种行为,最直接体现这个行为的主要就是动作以及动作序列,实际上动作是状态内和在转换的时候做的操作,这个对象所做的操作。

它具有这个原子性和计时性.

动作发生的时机:

 在转化中、在状态的入口、在一个对象处于一个状态的整个期间、在状态的出口、在引起状态转化的事件到来时,或在没有引起状态转化的事件到来时。

entry/进入动作

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

 exit/退出动作

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

do/活动

这个标号标识正在进行的活动(“do 活动”),只要被建模的对象是在当前状态中,或没有完成由动作表达式指定的计算,就执行这个活动(后者的完成可能导致一个完成事件)

活动是在对象处于一个状态中的整个阶段执行的一个动作或动作的集合。活动不是原子的,在执行中可以被事件或动作打断。

在状态图上没有一个关键词来标注这是主动对象还是被动对象状态的时候,只要一旦标注了do活动,那就意味着它肯定是主动对象。

do活动表示一个专门甩出的线程,或者说呢,对单线程的一个对象封装。至少要有封装一个线程才能够实现do活动。

状态转换是两个状态之间的一种关系,表示当一个特定事件出现时,如果满足一定的条件,对象就从第一个状态(源状态)进入第二个状态(目标状态),并执行一定的动作。转换本身也是原子的。(内部转换不涉及到状态的跳变)

所谓事件驱动就是由事件会激发我们一定的输出,这个输出对外表现为一个对象的一些动作序列。

 

 

结合点与选择点

交汇点( junction)——静态条件分支

 用于将多种转换连接在一起,用于构造状态之间复杂的转换路径。

选择(Choice)——动态条件分支

 守卫条件在到达决策点的瞬时被求值

选择和接合比较 

尽管选择和接合作用相似,但也有些细微的区别。

  当一条转换路径中包含选择伪状态结点时,在进入选择结点前会激发响应动作会进行计算,在退出选择结点后根据守卫条件确定转换到的具体的状态,但建模者必须确保在任何情况下进入选择结点后必须有一条退出该选择结点的路径。

  而接合结点就不存在这样的风险,因为所有的条件在转换激发前都被事先计算。

 

 

 

简单状态图的建模实例

状态图 

一个状态图描述一个对象在其生命期内响应事件所经历的状态序列,以及对这些事件所做出的反应。

 通常用状态图描述类的行为,也可以用它描述其它模型实体(如用况、参与者、子系统、操作或方法)的行为。

 在大多数情况下,仅对这样的对象的建立状态图:它具有清晰的生命期,对其语境外部的事件能作出反应,且它的当前行为受它的过去行为的影响。

 用适当的状态和伪状态符号表示状态机图中的状态和各种其它类型的顶点,而一般用连接顶点的有向弧表示转换。

 

 

状态图的实现

实现简单状态图由5个活动组成:

 1、实现由对象执行的动作。

 2、为了捕获状态,引入枚举数据类型。

 3、给类添加状态变量。

 4、引入助手函数,以管理状态的进入和退出动作。

 5、实现事件处理程序(方法函数),以响应事件。

 

 

复杂的状态图、历史状态

组合状态

组合状态是含有子状态的状态,是由两个或多个子状态构成的状态。

 状态的嵌套结构包括不相交(或,顺序活动)或并发(与,并发活动)

子状态。任何组合状态的子状态也可以是这两种类型的组合状态。

 新创建的对象,从最外层的初始伪状态开始,执行其最外层的缺省转

换。若对象转换到了最外层的终结状态,则对象的生命期终止。

 一个状态内的各区域可以有初始伪状态和终止状态。到封闭状态的转

换表示到其初始伪状态的转换。到最终状态的转换表示封闭区域中的活动

的完成。在所有并发区域中的活动的完成,表示经由封闭状态的活动的完

成,并触发封闭状态上的完成事件。

完成转换 

由完成事件激发,当组合状态机终止时自动产生

激发规则(否则二义性)

 两个或更多的转换可以具有相同的事件激发,最内面的转换优先,不管事件激发转换与否,都将被丢弃

历史状态

 返回到以前访问的等级状态

 浅历史状态:保存并重新激货活与历史状态处于同一个嵌套层次上的状态.(H)

 深历史状态:保存复合状态中更深的嵌套层次的状态. (H*)

 

 

 

并发状态与正交区

并发状态 

对相同实体的多种同时的视角

任何一个对象可以同时具有不同正交区的一个状态

 

 

 

复杂状态图的建模实例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值