请问什么是状态机?

2015-04-24 09:10:52 +08:00
 83f420984
昨天在某个群里讨论时,突然提出了这个概念,网上搜索了一圈,没找到理想的答案,想请大家为我解惑
5092 次点击
所在节点    程序员
16 条回复
clker
2015-04-24 09:19:44 +08:00
RIcter
2015-04-24 10:03:13 +08:00
QWQ
看過維基感覺看不懂呀⋯
Cee
2015-04-24 10:08:58 +08:00
理解一下 狀態 初始狀態 終結狀態 狀態轉移的一些條件 狀態轉移表/函數
xudshen
2015-04-24 10:09:43 +08:00
lz你这是没上过学呀
zhicheng
2015-04-24 10:12:11 +08:00
“所有的程序都是状态机,那些不会状态机的,发明了面向对象。”
JamesRuan
2015-04-24 10:31:54 +08:00
不是叫有限状态自动机吗?啥时候可以简称状态机了
yangff
2015-04-24 10:44:30 +08:00
@JamesRuan 这不是简称
geew
2015-04-24 10:47:57 +08:00
wiki上不是说得很明白了么
"表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型"
Phoinikas
2015-04-24 11:00:16 +08:00
http://www.wisdom.weizmann.ac.il/~dharel/SCANNED.PAPERS/Statecharts.pdf

不过我觉得还是看看wiki的介绍就够了
JamesRuan
2015-04-24 11:08:05 +08:00
@yangff 好吧,我一直记得的是Automata,所以以为Machine是简称。
arkilis
2015-04-24 11:43:26 +08:00
SVM
vChrysanthemum
2015-04-24 12:00:00 +08:00
用状态机编程,酥爽酥爽的

来个简单粗暴点的解释,既展示一个简单的状态机。

应用场景: 客户端 向 服务端 报告自己还活着
伪代码:

```
void ReceiveClientRequest( client ) {
if ( CONNECTING == client.requestState ) {
//首次连接,做些初始化动作,
}

if ( I_AM_ALIVE == client.requestState ) {
//client来报告还活着, do something...
}

if ( EXCEPTION == client.requestState ) {
//client 异常断开了,做些清理工作
}
}
```

以上是个简单的状态机,更经典的例子应该是正则解析。

另: redis的主从复制流程也是简单的一个状态机


大概理一下,一个程序运行过程中,可分为好几种状态,理清楚状态之间的转移,针对每种状态编写业务逻辑,如此,程序逻辑会清晰很多。
ryd994
2015-04-24 12:21:48 +08:00
其实是一种思考方式
把运行中所有可能出现的情况分到有限个状态里去
然后理清各个状态之间的相互关系,特别是状态之间如何相互转换
这样做好,程序的大框架就有了,不会写乱
phx13ye
2015-04-24 12:51:57 +08:00
state pattern
0ver1oad
2015-04-24 23:23:01 +08:00
没啥意思,如果往计算机科学方向讲就是自动机理论那一块. 如果有兴趣可以上coursera上找斯坦福的课程学习. 现实开发中, 定义一个变量记录下当前程序的运行状态, 在switch循环中执行相应代码也可称为状态机.
Rothschild
2015-04-25 01:47:33 +08:00
这就是非科班出身啊,大二大三自动机理论, 编译原理就讲的东西

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185894

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX