版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021-7-111 第五讲第五讲 有限状态机有限状态机 2021-7-11通信软件设计通信软件设计第第2页页 1. 有限状态机的基本概念有限状态机的基本概念 2. 有限状态机编程方法有限状态机编程方法 主要内容主要内容 2021-7-11通信软件设计通信软件设计第第3页页 状态机的引入状态机的引入 n状态机理论最初的发展在数字电路设计领域。状态机理论最初的发展在数字电路设计领域。 n在数字电路方面,根据输出是否与输入信号有关,状在数字电路方面,根据输出是否与输入信号有关,状 态机可以划分为态机可以划分为Mealy型和型和Moore型状态机。型状态机。 Moore 型状态机的输出只和当前状态有
2、关,和输入无关。型状态机的输出只和当前状态有关,和输入无关。 Mealy型状态机的输入是由当前状态和输入共同决定。型状态机的输入是由当前状态和输入共同决定。 n而在软件设计领域,状态机的理论俨然已经自成一体,而在软件设计领域,状态机的理论俨然已经自成一体, 它经常用来描述一些复杂的算法,表明一些算法的内它经常用来描述一些复杂的算法,表明一些算法的内 部的结构和流程,更多的关注于程序对象的执行顺序。部的结构和流程,更多的关注于程序对象的执行顺序。 2021-7-11通信软件设计通信软件设计第第4页页 n静态顺序结构静态顺序结构 n动态结构动态结构 2021-7-11通信软件设计通信软件设计第第5
3、页页 有限状态机有限状态机 n有限自动机(有限自动机(Finite Automata Machine)是计算机科学)是计算机科学 的重要基石,它在软件开发领域内通常被称作有限状态的重要基石,它在软件开发领域内通常被称作有限状态 机(机(Finite State Machine),是一种应用非常广泛的软),是一种应用非常广泛的软 件设计模式。件设计模式。 n有限状态机的作用主要是有限状态机的作用主要是描述对象在它的生命周期内所描述对象在它的生命周期内所 经历的状态序列,以及如何响应来自外界的各种事件经历的状态序列,以及如何响应来自外界的各种事件。 n在现实中,有许多事情可以用有限个状态来表达,如
4、在现实中,有许多事情可以用有限个状态来表达,如: 红绿灯、电话机等等。红绿灯、电话机等等。 其实,在资讯领域中,很多事情其实,在资讯领域中,很多事情 都是由有限的状态所组成,再由于不同的输入而衍生出都是由有限的状态所组成,再由于不同的输入而衍生出 各个状态。各个状态。 2021-7-11通信软件设计通信软件设计第第6页页 有限状态机有限状态机 n有限状态机有限状态机FSM思想广泛思想广泛应用应用于于硬件控制硬件控制电路设计,也电路设计,也 是是软件软件上常用的一种处理方法上常用的一种处理方法(软件软件上称为上称为FMM-有限有限 消息机消息机)。它把复杂的。它把复杂的控制控制逻辑分解成逻辑分解
5、成有限个有限个稳定状态,稳定状态, 在每个状态上判断事件,变连续处理为在每个状态上判断事件,变连续处理为离散离散数字数字处理,处理, 符合计算机的工作特点。符合计算机的工作特点。 n同时,因为有限状态机具有有限个状态,所以可以在实同时,因为有限状态机具有有限个状态,所以可以在实 际的工程上实现。但这并不意味着其只能进行有限次的际的工程上实现。但这并不意味着其只能进行有限次的 处理,相反,有限状态机是闭环系统,有限无穷,可以处理,相反,有限状态机是闭环系统,有限无穷,可以 用有限的状态,处理无穷的事务。用有限的状态,处理无穷的事务。 2021-7-11通信软件设计通信软件设计第第7页页 有限状态
6、机有限状态机例例1 n红绿灯红绿灯 红绿灯运作的原理相当简单,从一开始绿灯,经过一段时间后,红绿灯运作的原理相当简单,从一开始绿灯,经过一段时间后, 将变为黄灯,将变为黄灯, 再隔一会儿,就会变成红灯,如此不断反覆。再隔一会儿,就会变成红灯,如此不断反覆。 其其 FSM如下。如下。 2021-7-11通信软件设计通信软件设计第第8页页 有限状态机有限状态机例例2 n自动贩售机自动贩售机 假设有简单的一自动贩卖机贩售两类商品,一类售价假设有简单的一自动贩卖机贩售两类商品,一类售价20元,元, 另一类售价另一类售价50元。元。 如果该贩卖机只能辨识如果该贩卖机只能辨识10元及元及50元硬币。元硬币
7、。 一一 开始机器处于开始机器处于Hello的状态,当投入的状态,当投入10元时,机器会进入余额不足元时,机器会进入余额不足 的状态,直到投入的金额大于的状态,直到投入的金额大于20元为止。元为止。 如果一次投入如果一次投入50元,则元,则 可以选择所有的产品,否则就只能选择可以选择所有的产品,否则就只能选择20元的产品。元的产品。 完成选择后,完成选择后, 将会卖出商品并且找回剩余的零钱,随后,机器又将返回初始的状将会卖出商品并且找回剩余的零钱,随后,机器又将返回初始的状 态。态。 其其FSM如下。如下。 2021-7-11通信软件设计通信软件设计第第9页页 基本概念基本概念 n在描述有限状
8、态机时,常会碰到的几个基本概念:在描述有限状态机时,常会碰到的几个基本概念: n状态(状态(State)指的是对象在其生命周期中的一种状况,处于指的是对象在其生命周期中的一种状况,处于 某个特定状态中的对象必然会满足某些条件、执行某些动作或某个特定状态中的对象必然会满足某些条件、执行某些动作或 者是等待某些事件。者是等待某些事件。 n事件(事件(Event)指的是在时间和空间上占有一定位置,并且对指的是在时间和空间上占有一定位置,并且对 状态机来讲是有意义的那些事情。事件通常会引起状态的变迁,状态机来讲是有意义的那些事情。事件通常会引起状态的变迁, 促使状态机从一种状态切换到另一种状态。促使状
9、态机从一种状态切换到另一种状态。 n转换(转换(Transition)指的是两个状态之间的一种关系,表明对指的是两个状态之间的一种关系,表明对 象将在第一个状态中执行一定的动作,并将在某个事件发生同象将在第一个状态中执行一定的动作,并将在某个事件发生同 时某个特定条件满足时进入第二个状态。时某个特定条件满足时进入第二个状态。 n动作(动作(Action)指的是状态机中可以执行的那些原子操作,指的是状态机中可以执行的那些原子操作, 所谓原子操作指的是它们在运行的过程中不能被其他消息所中所谓原子操作指的是它们在运行的过程中不能被其他消息所中 断,必须一直执行下去。断,必须一直执行下去。 2021-
10、7-11通信软件设计通信软件设计第第10页页 有限状态机模型有限状态机模型 n通信协议建模通信协议建模 n基本出发点:认为通信协议主要是由响应多个基本出发点:认为通信协议主要是由响应多个“事件事件”的相对的相对 简单的处理过程组成。简单的处理过程组成。 n状态转移图状态转移图 n优点:简单明了,比较精确。优点:简单明了,比较精确。 n缺点:对许多复杂的协议,事件数和状态数会剧增,处理困难。缺点:对许多复杂的协议,事件数和状态数会剧增,处理困难。 2021-7-11通信软件设计通信软件设计第第11页页 为什么使用有限状态机为什么使用有限状态机 n在面向对象的软件系统中,一个对象无论多么简单或者多
11、么复杂,都在面向对象的软件系统中,一个对象无论多么简单或者多么复杂,都 必然会经历一个从开始创建到最终消亡的完整过程,这通常被称为对必然会经历一个从开始创建到最终消亡的完整过程,这通常被称为对 象的象的生命周期生命周期。 n对象在其生命期内是不可能完全孤立的,它必须通过发送消息来影响对象在其生命期内是不可能完全孤立的,它必须通过发送消息来影响 其它对象,或者通过接受消息来改变自身。其它对象,或者通过接受消息来改变自身。 2021-7-11通信软件设计通信软件设计第第12页页 为什么使用有限状态机为什么使用有限状态机 n在银行客户管理系统中,客户类(在银行客户管理系统中,客户类(Customer
12、)的实例在需要的时候,)的实例在需要的时候, 可能会调用帐户(可能会调用帐户(Account)类中定义的)类中定义的getBalance()方法。在这种简方法。在这种简 单的情况下,类单的情况下,类Customer并不需要一个有限状态机来描述自己的行为,并不需要一个有限状态机来描述自己的行为, 主要原因在于它当前的行为并不依赖于过去的某个状态。主要原因在于它当前的行为并不依赖于过去的某个状态。 n并不是所有情况都会如此简单,事实上许多实用的软件系统都必须维并不是所有情况都会如此简单,事实上许多实用的软件系统都必须维 护一两个非常关键的对象,它们通常具有非常复杂的状态转换关系,护一两个非常关键的
13、对象,它们通常具有非常复杂的状态转换关系, 而且需要对来自外部的各种事件进行响应。而且需要对来自外部的各种事件进行响应。 n例如,在例如,在VoIP电话系统(找状态图)电话系统(找状态图)中,电话类(中,电话类(Telephone)的实例)的实例 必须能够响应来自对方的随机呼叫,来自用户的按键事件,以及来自必须能够响应来自对方的随机呼叫,来自用户的按键事件,以及来自 网络的信令等。在处理这些消息时,类网络的信令等。在处理这些消息时,类Telephone所要采取的行为完全所要采取的行为完全 依赖于它当前所处的状态,此时使用状态机将是一个不错的选择。依赖于它当前所处的状态,此时使用状态机将是一个不
14、错的选择。 2021-7-11通信软件设计通信软件设计第第13页页 为什么使用有限状态机为什么使用有限状态机 n游戏引擎是有限状态机最为成功的应用领域之一,由于设计良好的状游戏引擎是有限状态机最为成功的应用领域之一,由于设计良好的状 态机能够被用来取代部分的人工智能算法,因此游戏中的每个角色或态机能够被用来取代部分的人工智能算法,因此游戏中的每个角色或 者器件都有可能内嵌一个状态机。者器件都有可能内嵌一个状态机。 n考虑考虑RPG( Role-playing Game)游戏中城门这样一个简单的对象,它游戏中城门这样一个简单的对象,它 具有打开(具有打开(Opened)、关闭()、关闭(Clos
15、ed)、上锁()、上锁(Locked)、解锁)、解锁 (Unlocked)四种状态。当玩家到达一个处于状态)四种状态。当玩家到达一个处于状态Locked的门时,如的门时,如 果此时他已经找到了用来开门的钥匙,那么他就可以利用它将门的当果此时他已经找到了用来开门的钥匙,那么他就可以利用它将门的当 前状态转变为前状态转变为Unlocked,进一步还可以通过旋转门上的把手将其状态,进一步还可以通过旋转门上的把手将其状态 转变为转变为Opened,从而成功进入城内。,从而成功进入城内。 2021-7-11通信软件设计通信软件设计第第14页页 控制城门的状态机控制城门的状态机 2021-7-11通信软件
16、设计通信软件设计第第15页页 1. 有限状态机的基本概念有限状态机的基本概念 2. 有限状态机编程方法有限状态机编程方法 主要内容主要内容 2021-7-11通信软件设计通信软件设计第第16页页 确定的有限状态机确定的有限状态机 n一个一个DFA M是一个五元组,记作是一个五元组,记作 M = (S, , f, S0, Z),其中,其中 1) S = 状态状态i,S是一个有限集,其中的每一个元素称为一个状态是一个有限集,其中的每一个元素称为一个状态 2) = 输入字符输入字符i, 是一个有穷字母表,它的每一个元素称为一个是一个有穷字母表,它的每一个元素称为一个 输入字符输入字符 3) f :
17、S S,f 是转换函数,表示某状态接受某个是转换函数,表示某状态接受某个输入字符输入字符所到所到 达的状态,如:达的状态,如:f(p,a) = q,p,q S,a 4) S0 S, S0是是S中的元素,是唯一的一个初态中的元素,是唯一的一个初态 5) Z S,且,且 Z ,Z是是S的一个子集,是一个终态集,或叫结束集的一个子集,是一个终态集,或叫结束集 2021-7-11通信软件设计通信软件设计第第17页页 确定的有限状态机确定的有限状态机 左侧的状态图,在数学上称作左侧的状态图,在数学上称作DFA, 其形式化定义为:其形式化定义为: M=(S, , f, S0, Z) 其中,其中,S = 0
18、 , 1 , 2 , 3 = a , b , c , d S0 = 0 Z = 3 f: 013 a b c d d 2 2021-7-11通信软件设计通信软件设计第第18页页 手工编写状态机手工编写状态机 n与其他常用的设计模式有所不同,程序员想要在自己的软件系统与其他常用的设计模式有所不同,程序员想要在自己的软件系统 中加入状态机时,必须再额外编写一部分用于逻辑控制的代码,中加入状态机时,必须再额外编写一部分用于逻辑控制的代码, 如果系统足够复杂的话,这部分代码实现和维护起来还是相当困如果系统足够复杂的话,这部分代码实现和维护起来还是相当困 难的。难的。 n在实现有限状态机时,使用在实现有
19、限状态机时,使用switch语句语句是最简单也是最直接的一是最简单也是最直接的一 种方式,其基本思路是为状态机中的每一种状态都设置一个种方式,其基本思路是为状态机中的每一种状态都设置一个case 分支,专门用于对该状态进行控制。分支,专门用于对该状态进行控制。 n学习学习doorFSM工程,如何编程实现有限状态机。工程,如何编程实现有限状态机。 2021-7-11通信软件设计通信软件设计第第19页页 手工编写状态机手工编写状态机 n在很长一段时期内,使用在很长一段时期内,使用switch语句一直是实现有限状态机的唯一语句一直是实现有限状态机的唯一 方法,甚至像编译器这样复杂的软件系统,大部分也
20、都直接采用这方法,甚至像编译器这样复杂的软件系统,大部分也都直接采用这 种实现方式。但之后随着状态机应用的逐渐深入,构造出来的状态种实现方式。但之后随着状态机应用的逐渐深入,构造出来的状态 机越来越复杂,这种方法也开始面临各种严峻的考验。如果状态机机越来越复杂,这种方法也开始面临各种严峻的考验。如果状态机 中的状态非常多,或者状态之间的转换关系异常复杂,那么简单地中的状态非常多,或者状态之间的转换关系异常复杂,那么简单地 使用使用switch语句构造出来的状态机将是不可维护的。语句构造出来的状态机将是不可维护的。 2021-7-11通信软件设计通信软件设计第第20页页 doorFSM程序实例程
21、序实例 (1)新建一个)新建一个Win32 Console Application的简单应用程序,并利的简单应用程序,并利 用用ClassWiard建立建立doorFSM类,用类,用doorFSM实现状态机。实现状态机。 (2)编写)编写doorFSM.h头文件头文件 (3)编写)编写doorFSM.cpp源程序源程序 添加状态、事件、转化函数等添加状态、事件、转化函数等 (4)添加测试程序)添加测试程序Test.cpp 2021-7-11通信软件设计通信软件设计第第21页页 DoorFSM类类 class DoorFSM public: enum Event Lock, Unlock, Op
22、en, Close; / Events protected: void enterOpened(); void enterLocked(); void enterUnlocked(); void enterClosed(); public: enum States Closed, Unlocked, Locked, Opened; / states States doorState; public: DoorFSM() doorState = Opened; / Constructor virtual DoorFSM() / Destructor States currentState() r
23、eturn doorState; / Get current FSM state, returns current FSM state void processEvent( Event e ); / perform event static const char* eventName( Event e ); / Get symbolic name of an event static const char* stateName( States s );/ Get symbolic name of a state ; 2021-7-11通信软件设计通信软件设计第第22页页 doorFSM.cpp
24、实现文件实现文件 nvoid DoorFSM:processEvent( Event e ) n n States yOld = doorState; n bool pass = false; n switch( yOld ) n /transitions n case Closed: n if( e = Open ) n /outcome actions n doorState = Opened; n pass = true; n n else if( e = Lock ) n /outcome actions n doorState = Locked; n pass = true; n n
25、 break; case Unlocked: if( e = Lock ) /outcome actions doorState = Locked; pass = true; else if( e = Open ) /outcome actions doorState = Opened; pass = true; break; case Locked: if( e = Unlock ) /outcome actions doorState = Unlocked; pass = true; break; 2021-7-11通信软件设计通信软件设计第第23页页 自动生成状态机自动生成状态机 n为实
26、用的软件系统编写状态机并不是一件十分轻松的事情,特别是为实用的软件系统编写状态机并不是一件十分轻松的事情,特别是 当状态机本身比较复杂的时候尤其如此。人们开始尝试开发一些工当状态机本身比较复杂的时候尤其如此。人们开始尝试开发一些工 具来自动生成有限状态机的框架代码,而在具来自动生成有限状态机的框架代码,而在Linux下就有一个挺不下就有一个挺不 错的选择错的选择FSME(Finite State Machine Editor)。)。 nFSME是一个是一个基于基于Qt的有限状态机工具的有限状态机工具,它能够让用户通过图形化,它能够让用户通过图形化 的方式来对程序中所需要的状态机进行建模,并且还能够自动生成的方式来对程序中所需要的状态机进行建模,并且还能够自动生成 用用C+或者或者Python实现的状态机框架代码。实现的状态机框架代码。 2021-7-11通信软件设计通信软件设计第第24页页 可视化的可视化的FSME 2021-7-11通信软件设计通信软件设计第第25页页 状态机建模状态机建模 首先运行首先运行fsme命令命令 来启动状态机编辑器,然来启动状态机编辑器,然 后单击工具栏上后单击工具栏上 New 按钮来创建一个新的状态按钮来创建一个新的状态 机。机。FSME中用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府协议采购制度
- 采购部管理审计制度汇编
- 信息化设备采购管理制度
- 标准化集中采购制度汇编
- 村级物品采购制度
- 书馆采购员制度
- 修理厂配件采购登记制度
- 采购部门内部轮岗制度
- 采购销售管理制度范本
- 采购需求论证管理制度
- 2025年税务局信息技术专员招聘考试题库
- 北师大版七年级数学下册-第一章-名校检测题【含答案】
- 【《汽车排气系统三维建模及有限元仿真分析》17000字(论文)】
- 急危重症快速识别与急救护理
- 2026年新高考数学专题复习 103.马尔科夫链讲义
- 初中数学备课教案模板
- 浙江建设监理管理办法
- 运输公司废物管理办法
- 水库安全度汛培训课件
- 2025年上海高二学业水平合格性考试信息技术试卷(含答案详解)
- 数字媒体艺术设计毕业设计
评论
0/150
提交评论