UML建模(状态图)

8、状态图

状态机图是一种行为图,它通过使用有限的状态转移展示了一个系统中一个模块的一些离散的行为,在UML2.4里面有两种状态机图:行为状态机(behavioral state machine),协议状态机(protocol state machine)。

8.1 元素介绍

__ 行为状态(Behavioral State)__

  • 简单状态(Simple State) 简单状态没有子状态机和域,UML中使用带拐点的矩形标示简单状态,并且状态名字写在矩形内部。

image.png

  • 组合状态(Composite State) 组合状态被定义为用用子状态或者嵌套状态的状态行为,子状态可以是顺序发生的也可以是并发发生,组合状态里至少有一个域,如下图含有一个域

image.png

__ 起始状态(Initial Pseudostate),终止状态(Final State),(行为转移)Behavioral Transition __

image.png

如图黑色实心为起始状态,末端双环圆为终止状态,中间连接线为行为转移,其中isAuthed为一个guard说明满足该条件才会进行状态转移,然后执行函数auidt。

8.2 行为状态机(behavioral state machine)

使用有限状态转移表示一个系统中的离散行为的变换,行为被建模为通过一系列转移线连接起来的状态。 一个简单的行为状态机:

image.png

8.2 协议状态机(Protocol State Machine)

协议状态机是行为状态机的一个子类,是行为状态的扩展,用来描述一个类的生命周期和协议,他描述一个类的哪一个动作可以被哪一个状态下的规定条件下被调用。

image.png

8.3 官方例子

如下图是一个Java线程状态机图(协议状态机图)

image.png

如图 New状态是一个线程被创建但是没有执行start()方法时候状态。 在JVM看来当一个线程在Runnable时候它是在运行,但是在os看来却未必,因为线程可能没有获取到处理器。所以可以考虑把Runnable看为一个内部有两个子状态的组合状态,当一个线程状态进入Runnable时候,首先进入Ready状态(其他资源已经就绪,就差cpu),由线程调度策略决定何时把这个线程从Ready转变为running状态,函数Thread.yield() 则知识线程调度暂定当前线程执行,把线程从running状态转变为Ready状态...

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术碎碎念

OS存储器管理(二)

离散分配 分页(Paging),分段,段页式 一、分页 一个进程的物理地址可以是非连续的; 将物理内存分成固定大小的块,称为块(frame); 将逻辑内存分为同...

3418
来自专栏地方网络工作室的专栏

Python3 初学实践案例(6)终极 CLI 密码生成程序实现

Python3 初学实践案例(6)终极 CLI 密码生成程序实现 在前面一章的学习中,我已经完成了一个一定扔出 6 的生成密码算法实现。但是只能将生成的密码输出...

2048
来自专栏小詹同学

人脸识别(二)——训练分类器的补充说明

之前训练分类器时利用的是一个csv文件的读取,这里仅仅用几句话介绍一种简单易行的方法。 说到底,这类问题可以归类于读取指定文件夹...

4196
来自专栏大史住在大前端

webpack4.0各个击破(7)—— plugin篇

plugin机制是webpack中另一个核心概念,它基于事件流框架tapable,你可以参考浏览器环境中的【DOM事件模型】,【SPA模型中的生命周期钩子】或是...

1722
来自专栏Java编程技术

基于信号量的生产消费模型

上篇 https://www.jianshu.com/p/6402676abc86 文章讲解了一个定时生产消费时候消费队列里面最多有几个元素的问题。本文来探讨另...

1051
来自专栏SAP最佳业务实践

想学FM系列(22)-SAP FM模块:派生规则推导策略(5)-派生规则推导使用

4.2 派生规则推导的操作及测试 在派生规则具体维护时其操作界面通常如下: ? ① 显示\修改派生规则。 ② 选中某一条步骤,点击查看该步骤的定义。 ...

5497
来自专栏牛客网

秋招java后端一些公司面经分享

oppo: 一面: java并发包,线程池相关 安全集合类 加密 网络问题:解决多次重复请求 socket编程 知道哪些设计模式 ... 二面: 64人  八跑...

4038
来自专栏F-Stack的专栏

FreeBSD下的工具(sysctl、netstat等)如何移植到F-Stack

在之前的文章中,我们介绍了如何使用DPDK rte_ring来进行多进程的通信,tools/ipc目录就是基于rte_ring实现了一个简单的ipc框架。下面以...

7151
来自专栏linux驱动个人学习

Linux CFS调度器之队列操作--Linux进程的管理与调度(二十七)

完全公平调度器CFS中有两个函数可用来增删队列的成员:enqueue_task_fair和dequeue_task_fair分别用来向CFS就绪队列中添加或者删...

1622
来自专栏非典型程序猿

从源码透析gRPC调用原理

gRPC是如何work的,清楚的理解其调用逻辑,对于我们更好、更深入的使用gRPC很有必要。因此我们必须深度解析下gRPC的实现逻辑,在本文中,将分别从客户端和...

4.6K8

扫码关注云+社区

领取腾讯云代金券