8、状态图
状态机图是一种行为图,它通过使用有限的状态转移展示了一个系统中一个模块的一些离散的行为,在UML2.4里面有两种状态机图:行为状态机(behavioral state machine),协议状态机(protocol state machine)。
8.1 元素介绍
__ 行为状态(Behavioral State)__
- 简单状态(Simple State)
- 简单状态没有子状态机和域,UML中使用带拐点的矩形标示简单状态,并且状态名字写在矩形内部。
![b67318b66b396f483294aa5e700c9159.png](https://img-blog.csdnimg.cn/img_convert/b67318b66b396f483294aa5e700c9159.png)
image.png
- 组合状态(Composite State)
- 组合状态被定义为用用子状态或者嵌套状态的状态行为,子状态可以是顺序发生的也可以是并发发生,组合状态里至少有一个域,如下图含有一个域
![1bc6dcf6c8f6060bb82998aa4a983b2a.png](https://img-blog.csdnimg.cn/img_convert/1bc6dcf6c8f6060bb82998aa4a983b2a.png)
image.png
__ 起始状态(Initial Pseudostate),终止状态(Final State),(行为转移)Behavioral Transition
__
![7cefd70ab60b5ded8e66dc0b7e067086.png](https://img-blog.csdnimg.cn/img_convert/7cefd70ab60b5ded8e66dc0b7e067086.png)
image.png
如图黑色实心为起始状态,末端双环圆为终止状态,中间连接线为行为转移,其中isAuthed为一个guard说明满足该条件才会进行状态转移,然后执行函数auidt。
8.2 行为状态机(behavioral state machine)
使用有限状态转移表示一个系统中的离散行为的变换,行为被建模为通过一系列转移线连接起来的状态。
一个简单的行为状态机:
![e6235198cf4d5280cf37d9ef649f52ff.png](https://img-blog.csdnimg.cn/img_convert/e6235198cf4d5280cf37d9ef649f52ff.png)
image.png
8.2 协议状态机(Protocol State Machine)
协议状态机是行为状态机的一个子类,是行为状态的扩展,用来描述一个类的生命周期和协议,他描述一个类的哪一个动作可以被哪一个状态下的规定条件下被调用。
![21b7a1ffa2cc9daae4301a103169995c.png](https://img-blog.csdnimg.cn/img_convert/21b7a1ffa2cc9daae4301a103169995c.png)
image.png
8.3 官方例子
如下图是一个Java线程状态机图(协议状态机图)
![75b46a9e9fd4e7406d3eb3c6497b76f3.png](https://img-blog.csdnimg.cn/img_convert/75b46a9e9fd4e7406d3eb3c6497b76f3.png)
image.png
如图 New状态是一个线程被创建但是没有执行start()方法时候状态。
在JVM看来当一个线程在Runnable时候它是在运行,但是在os看来却未必,因为线程可能没有获取到处理器。所以可以考虑把Runnable看为一个内部有两个子状态的组合状态,当一个线程状态进入Runnable时候,首先进入Ready状态(其他资源已经就绪,就差cpu),由线程调度策略决定何时把这个线程从Ready转变为running状态,函数Thread.yield() 则知识线程调度暂定当前线程执行,把线程从running状态转变为Ready状态...
欢迎关注微信公众号:技术原始积累 获取更多技术干货