状态图

状态图是一种UML图表,用于描述对象在其生命周期中的状态变化。它包括状态、转换、事件和动作等元素,帮助开发者理解对象如何响应事件并执行相应操作。状态图有助于避免非法事件,明确事件执行顺序,以及描述因不同条件产生的工作流分支。通过状态、转换和监护条件,状态图能够清晰展示对象状态的变迁和行为模式。

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

概念

       一个状态图表示一个状态机,主要用于表现从一个状态到另一个状态的控制流,不仅可以展现一个对象拥有的状态,还可以说明事件如何随着时间的推移来影响这些状态

     1)状态机

       1.   概念

       是一种记录给定时刻状态的设备,它可以 根据各种不同的输入对每个给定的变化而改变其状态或引发一个动作

       2.   组成

       状态

       在生命周期中的一种状况,处于某个状态的对象必然会满足某些条件,执行某些动作或者等待某些事件

       动作

       状态机中可以执行的原子操作,即一旦被执行便不能被中断

       事件

       指的是发生在时间和空间商的对状态机来讲有意义的那些事情,通常会引起状态的变迁

       活动

       状态机进行的非原子操作

       转换

       值得是两个不同状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并且在满足某个特定条件下由某个事件触发进入第二个状态

       3.  使用

       适合对局部、细节进行建模,通常并依附于一个类,描述该类的实例对接收事件的响应

2)状态图

       本质上就是一个特殊的状态机进行动态建模

       作用:

       1.  清晰描述了状态转换时所必须的触发事件、监护条件和动作,有利于开发人员避免程序中非法事件的进入

       2.  可以清晰地看出事件的执行顺序

       3.  避免程序员在开发程序时避免出现事件错序的情况

       4.  可以更好的描述工作流因不同的条件发生的分支

组成

     1)状态

        概念

        描述了一个类对象生命周期中的一个时间段,由一个带圆角的矩形表示

        组成

      (1)状态名

        用法:以外的字符串表示,第一个字母要大写,可以匿名但要唯一

      (2)入口和出口动作

        分别是进入和退出一个状态时所执行的“边界”动作,目的是封装这个状态

      (3)内部活动

        当进入状态未结束时在内部发生的活动

      (4)内部转换

        内部转换是不导致状态改变的转换,可以包含进入或者退出该状态应该执行的活动或者动作,因为只有源状态没有目标状态,所以内部转换的结果并不改变状态本身

      (5)嵌套状态

        在一个状态中嵌套的另一个状态

        分类

      (1)简单状态

        除可以有内部转换、进入、推出等动作没有其他状态的状态

      (2)组合状态

        内部嵌套有子状态的状态

        顺序组合状态

        如果一个组合状态的多个子状态之间是互斥的,不能同时存在,则称为“顺序组合状态”

        如:

          

        并发组合状态

        在一个组合状态中,可能有两个或者多个并发的子状态机,这样的称为“并发组合状态”

        如:

              

      (3)历史状态

        本身是个伪状态,用来说明组成状态曾经的子状态,能不用就不用

      2)转换

        即一个在某初始状态的对象通过执行制定的动作并符合一定的条件下进入第二种状态时的一种关系。激发之前的状态叫做源状态,激发之后的状态叫做目标状态

        1.   外部转换   2.   内部转换   3.   完成转换    4.   触发器事件

        5.   动作

        概念

        是一个简短的计算处理过程或一组可执行语句

        作用

        可以给另一个对象发送消息、调用一个操作、设置返回值、创建或销毁对象

        种类

 

动作种类

描述

语法

赋值

对一个变量赋值

Target:=expression

调用

调用对目标对象的一个操作:等待操作执行结束,并且可能有一个返回值

Opname(arg,arg)

创建

创建一个新对象

New cname(arg,arg)

销毁

销毁一个对象

Object.destory()

返回

为调用者制定返回值

Return  value

发送

创建一个信号实例并将其发送到目标对象或者一组目标对象

Sname(arg,arg)

终止

对象得而自我销毁

Terminate

不可中断

用语言说明的动作

【语言说明】

 

        6.  监护条件

        触发转换必须满足的条件,是一个布尔表达式

     3)判定

       用来表示一个事件依据不同的监护条件有不同的影响。用空心菱形表示,仅仅是为了表示的方便,不会影响装换的语义

     4)同步

       为了说明并发工作流的分支和汇合

       与判定的区别:

       判定是根据监护条件使工作流分支,监护条件的取值最终只会触发一个分支的执行。

       同步的不同分支是并发执行,并不会因为一个分支的执行造成其它分支的中断

     5)事件

       改变状态发生改变的事情

       1.  信号事件(signal event)

       信号事件指的是一个对象对发送给它的信号的接收事件,它可能会在接收对象的状态机内触发转换

       分为异步单路通信和双路通信

        2.  时间事件(time event)

        表示时间表达式被满足的事件,代表时间的流逝,仅可以用作转换的触发

        3.  改变事件(change event)

        指的是依赖于特定属性值得布尔表达式所表示的条件满足时,事件发生改变

        与监护条件的区别:

        监护条件仅在引起转换的触发器事件触发时或者事件接收者对事件进行处理时被赋值一次,如果为假,转换不激发并且事件丢失,条件也不会在赋值

         改变事件可以连续赋值直到条件为真激发转换为止

        4.  调用事件(call  event)

        指在一个过程的执行点上激发一个操作,他讲一个控制线程暂时从调用过程转换到被调用过程

      6)初始状态和终止状态

       有一个初始状态,有一个或多个终止状态

绘制








总结:

         所有的对象都会有有状态,此图是比较常用的图,如何转换,以及一些转换条件是需要不断梳理的
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值