Atitit fsm有限状态机概念与最佳实践 目录 1. 概念组成与原理成分 1 1.1. 1、状态机的要素 4个要素,即现态、条件、动作、次态 2 1.2. 状态表 2 2. 性状 2 2.1.
Atitit fsm有限状态机概念与最佳实践
目录
1. 概念组成与原理成分 1
1.1. 1、状态机的要素 4个要素,即现态、条件、动作、次态 2
1.2. 状态表 2
2. 性状 2
2.1. 一般一个class即可 2
2.2. 而言有fsm模式就复杂些了 2
3. 适用场景 主治 适应症 2
3.1. 所有场景(较简单)。 2
4. Bp 最佳实践 用法 2
5. 缺点 不良反应 3
5.1. 有限的应用领域(由 于不可确定性); 3
5.2. 对于大量的 I/O 服务的应用,不容易实现; 3
5.3. 大的程序不便于调试 3
5.4. Fsm是专用自动机,不是通用自动机 3
5.5. 2、 因为其状态有限,当所要描述的系统的状态太多时,可能确定的有限状态机无能为力; 3
5.6. 有限状态机的可扩展性差(或者对比计算机而言是无可编程性) 3
5.7. 3、 有一些任务是有限状态机无法完成的 3
6. 禁忌 不适应场合 4
7. 注意事项 4
8. 相互作用与其他类库模式 5
9. 过量与滥用后果 5
10. 原理 5
11. 理解曲线 5
11.1. 学习曲线最简单的,比起pda,turing 5
12. 储藏 5
13. 包装与api接口 5
14. 执行标准 5
15. 生产组织与个人 attilax 5
16. Ref 5
1. 概念组成与原理成分
1.1. 1、状态机的要素 4个要素,即现态、条件、动作、次态
状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
①现态:是指当前所处的状态。
②条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
③动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
④次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
1.2. 状态表
我们可以用状态表了表示整个过程,如下图所示。
2. 性状
2.1. 一般一个class即可
2.2. 而言有fsm模式就复杂些了
3. 适用场景 主治 适应症
3.1. 所有场景(较简单)。
复杂场景使用pda和turing机
4. Bp 最佳实践 用法
5、处理事件输入,实现状态跳转逻辑。 双case
这里有两种写法,一种是在状态中判断事件:一种是事件中判断状态:
本人观点:一般业务场景来说,状态的数量是确定的切数目较少,不同状态下需要处理的事件也不一样。而触发的事件数量则比较多,采用上面第二种方式在事件中判断状态也有利于把里面一层的switch/case剥离出来当成单独的函数,做一些代码模块结构的优化,故推荐使用第二种方式,事件中判断状态。
5. 缺点 不良反应
5.1. 有限的应用领域(由 于不可确定性);
5.2. 对于大量的 I/O 服务的应用,不容易实现;
5.3. 大的程序不便于调试
5.4. Fsm是专用自动机,不是通用自动机
有限状态机的弱点
1、 每一种有限状态机均功能唯一,即设计好之后无法完成其他原理不同的工作;
5.5. 2、 因为其状态有限,当所要描述的系统的状态太多时,可能确定的有限状态机无能为力;
5.6. 有限状态机的可扩展性差(或者对比计算机而言是无可编程性)
5.7. 3、 有一些任务是有限状态机无法完成的
,比如它可以判断输入的0、1数列中0或1的个数是否为奇数或偶数,但是无法判断0是否比1多或者相反。
前两个问题表示有限状态机的可扩展性差(或者对比计算机而言是无可编程性),而后者是因为有限状态机状态有限而且不能记下自己需要记录的东西(或者对比图灵机理论是不能写)。
于是我们发现有限状态机不但状态有限,功能也有限(根据计算理论,这是因为它只能接受正则语言,而正则语言是最低级的语言,所以能够解决的问题是有限的)。
事实上,最初的计算“机”(其实更应该说是计算器)都是功能单一的,虽然人们不断地试图在一台机器上集成更多的功能,但是相对于下面要讲到通用计算理论,这些行为还是“盲目”的。
6. 禁忌 不适应场合
7. 注意事项
这里需要注意的两个问题:
1、避免把某个“程序动作”当作是一种“状态”来处理。那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。
2、状态划分时漏掉一些状态,导致跳转逻辑不完整。
所以维护上述一张状态表就非常必要,而且有意义了。从表中可以直观看出那些状态直接存在跳转路径,那些状态直接不存在。如果不存在,就把对应的单元格置灰。 每次写代码之前先把表格填写好,并且对置灰的部分重点review,看看是否有“漏态”,然后才是写代码。QA拿到这张表格之后,写测试用例也是手到擒来。
8. 相互作用与其他类库模式
9. 过量与滥用后果
10. 原理
11. 理解曲线
11.1. 学习曲线最简单的,比起pda,turing
12. 储藏
13. 包装与api接口
14. 执行标准
15. 生产组织与个人 attilax
16. Ref
Atiitt fsm有限状态机优缺点
Atitit fsm有限状态机概念与最佳实践 目录 1. 概念组成与原理成分 1 1.1. 1、状态机的要素 4个要素,即现态、条件、动作、次态 2 1.2. 状态表 2 2. 性状 2 2.1.相关推荐
- DB2 Workload Management 工作负载管理最佳实践
转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0912db2workloadm/index.html 概要介 ...
- 【翻译】2020年云安全综合指南(风险,最佳实践,认证)
翻译自:https://kinsta.com/blog/cloud-security/#what-is-kaspersky-security-cloud 云安全性包含技术,控件,流程和策略,这些技术, ...
- 科创人·神州数码集团CIO沈旸:最佳实践模式正在失灵,开源加速分布式创新
沈旸 神州数码集团副总裁兼CIO 国防科学技术大学工学学士学位.上海交通大学工学硕士学位.曾任SAP中国全球支持中心咨询顾问.SAP美国数字转型服务部门技术架构师.企业规划与商业智能团队负责人.神州数 ...
- 译:Kubernetes 最佳实践
本文翻译自 Jack Roper 的文章 Kubernetes Best Practice. 译者:文章中作者从应用程序开发.治理和集群配置三个方面给出了一些 Kubernetes 的最佳实践,同时翻 ...
- Kubernetes 最佳实践
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 本文翻译自 Jack Roper 的文章 Kubernetes Best Practice. 译者:文章中作者从应 ...
- 基于AWS的云服务架构最佳实践
近年来,对于打造高度可扩展的应用程序,软件架构师们挖掘了若干相关理念,并以最佳实践的方式加以实施.在今天的"信息时代",这些理念更加适用于不断增长的数据集,不可预知的流量模式,以及 ...
- 基于AWS的云服务架构最佳实践 #CSDN博文精选# #IT# #云服务实践#
大家好,小C将继续与你们见面,带来精选的CSDN博文~ 在这里,你将收获: 将系统化学习理论运用于实践,系统学习IT技术 学习内容涵盖数据库.软件测试.主流框架.领域驱动设计和第三方生态等,离全栈工程 ...
- 云效飞流Flow项目版本管理的最佳实践
简介:飞流Flow的最佳实践(使用阿里云云效)为了更好地使用飞流Flow,接下来将结合阿里云云效来讲解飞流Flow的最佳实践 目录 一.分支规约 二.版本号规约 2.1 主版本号(首位版本号) 2.2 ...
- java 异常 最佳实践_关于JAVA异常处理的20个最佳实践
在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked exceptions).非检查性异常(unche ...
- 关于JAVA异常处理的20个最佳实践
关于JAVA异常处理的20个最佳实践 在我们深入了解异常处理最佳实践的深层概念之前,让我们从一个最重要的概念开始,那就是理解在JAVA中有三种一般类型的可抛类: 检查性异常(checked excep ...
最新文章
- Flask之Cookie与Session
- ThreadPoolExecutor使用介绍
- 大一期末考试,python,测试题,含答案
- linux rsyslog 系统日志转发
- sqlserver 查找某个字段在哪张表里
- git rebase用法_Git:Clone别人的代码之后push到自己码云上失败的解决办法
- Mybatis There is no getter for property named 'XXX' in 'class java.lang.XXX
- 使用Docker和Azure Kubernetes服务将ASP.NET核心应用程序容器化
- div添加一个点击事件(绑定点击事件)
- 重新leetcode第1天——二叉树遍历算法讲解合集
- 【C++】获取二维数组的行和列
- 为什么硬件管理里面没有eplan加密狗_Eplan2.7”没有可用加密狗“问题
- oneNote笔记名不同步
- 隐私公链背景的FAIRY SWAP,让DEX更进一步
- 如何在ps中添加图片上的塑料布效果
- 在虚拟机下安装配置Linux和Oracle
- 什么是Teardrop攻击
- 2018年春计算机教学计划,2018年春季教学计划表
- 批量修改文件名字、不同的目录下
- DJ音乐培训展示类网站织梦模板
热门文章
- java反编译能拿到源码吗_大牛带你解读Spring源码,编写自定义标签,您能学会吗?
- php上拉下拉 数据库加载,jquery使用iscorll实现上拉、下拉加载刷新
- talib python文档_talib 中文文档
- 计算机考试操作步骤,计算机考试操作步骤(精).doc
- TP5实践小总结(1)
- ASP.NET MVC和jQuery系列一:入门篇
- 交换机通过port-channel互联
- 专业能力与行业价值 IBM在华的商业人工智能实践
- Java源码分析之CountDownLatch
- linux命令:mkfs、mke2fs、blkid、e2label、tune2fs、dumpe2fs、fsck、e2fsck