Linux网络编程:状态机
- 状态机基本概念介绍
- 状态机的特征
- 状态机的要素
- 注意!
- 为什么在网络编程中需要状态机?
状态机基本概念介绍
首先我们简单的介绍一下状态机的基本概念
有限状态机是一种用来进行对象行为建模的工具,其作用主要是描述对象在它的生命周期内所经历的状态序列,以及如何响应来自外界的各种事件。
说人话就是在一个时刻内,只会存在一种状态,但是达到触发条件,就会切换状态。
状态机的特征
- 状态总数是有限的
- 任一时刻,只处在一种状态之中
- 某种条件触发后,会从一种状态转变到另一种状态
- 事物状态变化是有规则的,A状态可以变换到B,B可以变换到C,A却不一定能变换到C
- 同一种行为,可以将事物从多种状态变成同种状态,但是不能从同种状态变成多种状态
状态机的要素
状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。详解如下:
- 现态:是指当前所处的状态。
- 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。
- 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。
- 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
注意!
- 避免把某个“程序动作”当作是一种“状态”来处理
那么如何区分“动作”和“状态”?“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。 - 状态划分时漏掉一些状态,导致跳转逻辑不完整
所以维护上述一张状态表就非常必要,而且有意义了。从表中可以直观看出那些状态直接存在跳转路径,那些状态直接不存在。如果不存在,就把对应的单元格置灰。 每次写代码之前先把表格填写好,并且对置灰的部分重点review,看看是否有“漏态”,然后才是写代码。
为什么在网络编程中需要状态机?
因为写出大量的if else使得代码无比丑且高冗余
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)