UML-状态图

Posted 一个调皮的bug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML-状态图相关的知识,希望对你有一定的参考价值。

温馨提示:

  • 对于 UML图有用无用,网上说法不一,不管怎样 也是 以稍微 学习一下的
  • 看懂本文可能需要
    • 编程思维
    • 懂中文:)
  • 您的观看与点赞是对本公众号最大力的支持和鼓励~~

目录


状态图

状态(state)是指在对象的生命期中的某个条件或状况,在此期间对象将满足某些条件、执行某些活动或等待某些事件。所有对象都具有状态,状态是对象执行了一系列活动的结果,当某个事件发生后,对象的状态发生变化。

状态图(statechart diagram),用来描述一个特定的对象所有可能的状态,以及由于各种事件的发生而引起的状态之间的转移和变化。并不是所有的类都需要画状态图,有明确意义的状态,在不同状态下行为有所不同的类才需要画状态图。如下,一个机器的状态图

UML-状态图
image

再如,CD Player的状态图

UML-状态图
image

1.状态

一个状态有以下几个部分:状态名(name)、进入/退出动作(entry/exit action)、内部转移(internal transttion)、子状态(substate)、延迟事件(dferred event)。状态可以细分为不同的类型,例如初态、终态、中间状态、组合状态、历史状态等。一个状态图只能有一个初态,但终态可以有一个或多个,也可以没有终态。中间状态包括两个区域:名字域和内部转移域,如图所示。其中内部转移域是可选的。

UML-状态图
image

横线上面是名字域,下面是转换域(可选)。

ntry/turnOn:当转入该状态时,做开灯动作。do/blinkFivetimes:当处于该状态时,灯闪烁5次。do活动是只在状态内出现的活动,不能附加到转换上。event poweroff/powerSupplySelf:当电源关闭事件发生时,用自备电源。exit/turnOff:当转出该状态时,做关灯动作。event selfTest/defer:当selfTest事件发生时,对象将延迟响应,到别的状态中再处理,用defer这个特定动作表示延迟。

2.状态图的要素

椭圆或圆角矩形:表示对象的一种状态,椭圆内部填写状态名 箭头:表示从箭头出发的状态可以转换到箭头指向的状态 事件:引起状态转换的原因。事件名可在箭头线上方标出 条件:事件名后加方括号,括号内写状态转换条件 实心圆:初始状态 内部实心的同心圆:最终状态

3.状态的类型

①按状态过程分:

UML-状态图
image

②含有子状态的状态被称为组合或嵌套状态

UML-状态图
image

组合状态可以使用“与”关系分解为并发子状态,或者通过“或”关系分解为互相排斥的顺序子状态。两种表示方法:顺序子状态,并发子状态

顺序子状态

如果一个组成状态的子状态对应的对象在其生命期内的任何时刻都只能处于一个子状态,即多个子状态之间是互斥的,不能同时存在,这种子状态称为顺序子状态。

UML-状态图
image

并发子状态

有时组合状态有两个或者多个并发的子状态机,此时称组成状态的子状态为并发子状态。

UML-状态图
image

历史状态是伪状态,其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态时,可以直接进入这个子状态,而不是再从组合状态的初态开始。

UML-状态图浅(shallow)历史状态, 只记住最外层组合状态的历史。

UML-状态图深(deep)历史状态, 可以记住任意深度的组合状态的历史。

CD Player,running状态被打断到power on状态,再转回到running状态时,希望直接进入历史状态

UML-状态图
image

4.转移(Transition)

转移是两个状态间的一种关系,表示对象将在当前状态中执行动作,并在某个特定事件发生或某个特定的条件满足时进入后继状态。每个转移只允许有一个事件触发,一个事件只允许有一个动作。

①转移的五要素(注意格式)

格式:事件(参数)[条件]/动作

  • 源状态
  • 目标状态
  • 触发事件
    • 如果箭头上不带任何事件名,表示是一个自动转换,当与源状态相关的活动完成时就会自动触发。
  • 监护条件
  • 动作
UML-状态图
image

②转换的类型

内部转移:不导致状态改变的转移,不会执行entry和exit动作

UML-状态图外部转移 自转移

UML-状态图
image

5.事件(Event)

事件是对一个时间和空间上占有一定位置的有意义的事情的规格说明。事件触发状态的转移。

四类主要事件:

  • 信号事件
  • 调用事件
  • 变化事件
  • 时间事件

①信号signer事件

对象之间通过发送信号和接收信号实现通信。信号是一种异步机制。在计算机中,鼠标和键盘的操作均属于此类事件。对于一个信号而言,对象一般都有相应的事件处理器,如onMouseClick()等。

②调用call事件

表示一个操作的调度。一个对象请求调用另一个对象的操作 信号是一个异步事件,而调用事件一般是同步的。也就是说,当对象调用另一对象的操作时,控制就从发送者传送到接收者,该事件触发转换,完成操作后,接收者转换到一个新的状态,控制返还给发送者。

UML-状态图
image

③变化change事件

用关键字When,后面跟布尔表达式 When(temperature>120)/alerm() 变化事件的意图是要频繁测试表达式,只要表达式由假变为真,事件就会发生。

image

注意: 变化事件与监护条件的区别

④时间(time)事件

时间事件是指在绝对时间或在某个时间间隔内发生的事情所引起的事件。例如到达某一时间或经过了某一时间段。用关键字When 或After表示。

image

6.状态图建模技术

建模步骤:①找出适合用模型描述其行为的类。②确定对象可能存在的状态。③确定引起状态转换的事件。④确定转换进行时对象执行的相应动作。⑤对建模的结果进行相应的精化和细化。

活动图与状态图的比较

1.活动图与状态图的相同点:

都是对系统的动态行为建模。

2.活动图与状态图的区别:

①描述对象不同

状态图:描述对象状态及状态之间的转移;活动图:描述从活动到活动的控制流。

②使用场合不同

状态图:描述对象在其生命期中的行为状态变化;活动图:描述过程的流程变化。

原文链接

https://www.cnblogs.com/jingwhale/p/4230235.html UML状态图和活动图


end

以上是关于UML-状态图的主要内容,如果未能解决你的问题,请参考以下文章

聊聊UML行为图-状态图

UML建模(六)--活动图

UML之状态图

UML-状态图

UML图学习笔记状态图

UML图学习笔记状态图