提交 6d761ffb 编写于 作者: W wizardforcel

ex30

上级 701d44a1
......@@ -16,11 +16,11 @@ FSM 只是一种方法,在执行中不同位置发生不同事件时,使用
让我们将其拆解:
你拥有状态,这是 FSM 当前所在位置的存储指示器。状态可以是“开始”,“按下某键”,“中止”或类似的方式,描述执行的可能位置中的 FSM 的位置。每个状态都意味着正在等待某事发生,在决定下一步做什么之前。
你拥有事件,可以将 FSM 从一个状态移动到另一个状态。事件可以是“按下某键”,“套接字连接失败”,“文件保存”,并表示 FSM 接收到一些外部刺激,因此必须决定要做什么,以及下一个状态是什么。一个事件甚至可以回到同一个状态,这是你循环的方式。
根据发生的事件,FSM 从一个状态转换到另一个状态,并且仅仅由于为状态提供的确切事件(尽管其中一个事件可以定义为“任何事件”)。他们不会“意外”转移状态,你可以通过查看收到的事件和访问的状态,精确地跟踪他们从一个状态转移到另一个状态。这使得它们非常容易调试。
在状态转换之前,之后和期间,你可以在每个事件上运行代码。这意味着你可以在收到事件时运行一些代码,然后决定在该状态下基于该事件做什么,然后在离开该状态之前再次运行代码。这种执行代码的功能使得 FSM 非常强大。
有时候“没有”也是一个事件。这很好很强大,因为这意味着即使没有发生任何事情,你也可以将 FSM 转换到新的状态。然而,实际上,“没有”往往是隐含的事件“再来一次”或“醒来”。在其他情况下,这个状态的意思是,“不确定,也许下一个事件会告诉我是什么状态。”
+ 你拥有状态,这是 FSM 当前所在位置的存储指示器。状态可以是“开始”,“按下某键”,“中止”或类似的方式,描述执行的可能位置中的 FSM 的位置。每个状态都意味着正在等待某事发生,在决定下一步做什么之前。
+ 你拥有事件,可以将 FSM 从一个状态移动到另一个状态。事件可以是“按下某键”,“套接字连接失败”,“文件保存”,并表示 FSM 接收到一些外部刺激,因此必须决定要做什么,以及下一个状态是什么。一个事件甚至可以回到同一个状态,这是你循环的方式。
+ 根据发生的事件,FSM 从一个状态转换到另一个状态,并且仅仅由于为状态提供的确切事件(尽管其中一个事件可以定义为“任何事件”)。他们不会“意外”转移状态,你可以通过查看收到的事件和访问的状态,精确地跟踪他们从一个状态转移到另一个状态。这使得它们非常容易调试。
+ 在状态转换之前,之后和期间,你可以在每个事件上运行代码。这意味着你可以在收到事件时运行一些代码,然后决定在该状态下基于该事件做什么,然后在离开该状态之前再次运行代码。这种执行代码的功能使得 FSM 非常强大。
+ 有时候“没有”也是一个事件。这很好很强大,因为这意味着即使没有发生任何事情,你也可以将 FSM 转换到新的状态。然而,实际上,“没有”往往是隐含的事件“再来一次”或“醒来”。在其他情况下,这个状态的意思是,“不确定,也许下一个事件会告诉我是什么状态。”
FSM 的力量是能够明确地说明每个事件,事件只是正在接收的数据。这使得它们非常容易进行调试,测试和正确实现,因为你确切地知道每个状态的可能性,以及在每个状态中,对于每个事件可能发生的情况。在本练习中,你将要研究 FSM 库和使用它的 FSM 实现,来了解它们如何工作。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册