状态机高阶讲解-01

 

 

 

 

 

17
00:00:49,240 --> 00:00:53,980
状态机内容,比UML那个课更详细一点

18
00:00:55,500 --> 00:00:56,862
行为建模

19
00:00:56,862 --> 00:00:58,680
幻灯片里面也有

20
00:00:59,520 --> 00:01:04,320
但是呢,可能只有大概一个多小时的时间

21
00:01:06,610 --> 00:01:09,031
那我们这个课程呢

22
00:01:09,031 --> 00:01:09,940
我们就

23
00:01:11,960 --> 00:01:14,740
讲得要更细,也更深一些

24
00:01:15,020 --> 00:01:15,228


25
00:01:15,228 --> 00:01:18,350
就相当于在之前的内容的基础上

26
00:01:19,150 --> 00:01:21,750
再进一步的细化

27
00:01:22,030 --> 00:01:23,450
和强化

28
00:01:24,940 --> 00:01:25,365
当然

29
00:01:25,365 --> 00:01:27,280
如果没有听过之前的课程

30
00:01:27,610 --> 00:01:29,210
也没关系的

31
00:01:29,550 --> 00:01:29,819


32
00:01:29,819 --> 00:01:32,240
这个课也不影响我们

33
00:01:32,560 --> 00:01:35,050
大家从这个课开始来理解

34
00:01:35,370 --> 00:01:36,480
和学习

35
00:01:41,980 --> 00:01:44,270
那状态机这个的话

36
00:01:45,440 --> 00:01:48,200
平时我们常见的,就是说

37
00:01:48,480 --> 00:01:51,170
以现在的

38
00:01:51,450 --> 00:01:52,427
观察来说

39
00:01:52,427 --> 00:01:57,560
常见的,实际上并不是我们的软件开发这个领域

40
00:01:58,110 --> 00:02:00,220
而是其他的一些领域

41
00:02:00,500 --> 00:02:00,763


42
00:02:00,763 --> 00:02:02,080
比如说

43
00:02:03,070 --> 00:02:06,170
计算机科学

44
00:02:06,450 --> 00:02:08,078
的基础理论

45
00:02:08,078 --> 00:02:10,250
像学校

46
00:02:10,860 --> 00:02:12,790
针对相关专业

47
00:02:12,790 --> 00:02:14,720
都会有一些基础课嘛

48
00:02:14,720 --> 00:02:17,080
那其中有一门形式语言

49
00:02:17,780 --> 00:02:19,270
与自动机

50
00:02:21,180 --> 00:02:22,190
那这个

51
00:02:22,470 --> 00:02:24,100
里面实际上就是

52
00:02:25,080 --> 00:02:26,390
状态的

53
00:02:26,670 --> 00:02:27,550
理论

54
00:02:29,920 --> 00:02:30,980
这个里面

55
00:02:38,040 --> 00:02:43,270
那另外一个经常出现的是电子工程

56
00:02:45,400 --> 00:02:47,860
像数字电路设计等等

57
00:02:49,460 --> 00:02:49,675


58
00:02:49,675 --> 00:02:51,400
基于有限状态机的

59
00:02:52,940 --> 00:02:54,800
包括一些那个

60
00:02:55,830 --> 00:02:58,003
工具的软件等等

61
00:02:58,003 --> 00:03:00,176
电路设计的软件等等

62
00:03:00,176 --> 00:03:04,040
都是上面有大量的状态机的功能

63
00:03:07,260 --> 00:03:10,820
那这些都是跟我们软件开发呀

64
00:03:11,870 --> 00:03:13,110
没有

65
00:03:14,220 --> 00:03:15,750
直接关系的

66
00:03:18,690 --> 00:03:21,420
那在软件上面的话

67
00:03:22,290 --> 00:03:27,400
我们往往能够观察到的,经常出现的就是嵌入式系统

68
00:03:30,740 --> 00:03:31,910
里面会

69
00:03:32,190 --> 00:03:33,870
用到状态机

70
00:03:41,580 --> 00:03:42,910
但是对于

71
00:03:45,220 --> 00:03:46,790
更多人做的系统

72
00:03:47,440 --> 00:03:52,640
像企业应用,互联网应用等等

73
00:03:53,100 --> 00:03:56,500
我们很多人做的,实际上用的并不多

74
00:03:58,270 --> 00:03:58,564


75
00:03:58,564 --> 00:03:59,742
大多数程序员

76
00:03:59,742 --> 00:04:01,510
你问他状态机

77
00:04:01,790 --> 00:04:02,956
什么什么什么

78
00:04:02,956 --> 00:04:03,540
他可能

79
00:04:05,930 --> 00:04:06,900
并不知道

80
00:04:08,020 --> 00:04:08,251


81
00:04:08,251 --> 00:04:10,800
即使他以前是计算机专业

82
00:04:11,760 --> 00:04:12,690
出来的

83
00:04:14,310 --> 00:04:15,543
上学时候学过

84
00:04:15,543 --> 00:04:18,217
但实际上工作几年也忘记了

85
00:04:18,217 --> 00:04:19,451
因为在工作中

86
00:04:19,451 --> 00:04:22,330
如果他是做企业应用之类的

87
00:04:22,330 --> 00:04:23,153
互联网应用

88
00:04:23,153 --> 00:04:23,770
他可能

89
00:04:24,430 --> 00:04:25,650
也接触不到

90
00:04:28,460 --> 00:04:29,096
然后呢

91
00:04:29,096 --> 00:04:30,370
你问他状态机

92
00:04:30,370 --> 00:04:31,220
他可能也

93
00:04:31,630 --> 00:04:35,040
不知道或想不起来是个什么东西了

94
00:04:35,910 --> 00:04:37,050
反倒是

95
00:04:37,330 --> 00:04:38,500
电子工程师

96
00:04:39,030 --> 00:04:39,256


97
00:04:39,256 --> 00:04:41,520
在工作中会大量的使用

98
00:04:45,090 --> 00:04:47,190
所以呢,我们这个课程的话

99
00:04:48,790 --> 00:04:49,990
就是探讨

100
00:04:49,990 --> 00:04:52,870
就是说,怎样在软件开发里面

101
00:04:54,350 --> 00:04:56,630
能够把它用上

102
00:04:57,550 --> 00:04:59,214
在适当的场合

103
00:04:59,214 --> 00:04:59,690
用上

104
00:05:00,190 --> 00:05:03,480
来改善我们软件开发的一些质量

105
00:05:11,090 --> 00:05:15,570
这是我们说的,状态机的现状

106
00:05:17,340 --> 00:05:19,840
实际上在我们大多数

107
00:05:20,370 --> 00:05:22,790
软件开发人员里面用的并不多

108
00:05:23,070 --> 00:05:23,317


109
00:05:23,317 --> 00:05:27,770
除了刚才讲的,就是做一些实时嵌入系统的

110
00:05:29,150 --> 00:05:30,870
实际上也未必

111
00:05:31,490 --> 00:05:32,380
就用

112
00:05:32,380 --> 00:05:33,270
因为

113
00:05:33,550 --> 00:05:35,280
很多嵌入式系统

114
00:05:35,560 --> 00:05:37,580
也没有在用状态机

115
00:05:43,810 --> 00:05:44,800
因为

116
00:05:45,210 --> 00:05:46,488
如果是用的话

117
00:05:46,488 --> 00:05:48,193
他肯定要用工具嘛

118
00:05:48,193 --> 00:05:48,620
对吧

119
00:05:48,930 --> 00:05:50,917
用工具他就得用

120
00:05:50,917 --> 00:05:54,040
比如说,一些状态机工具

121
00:05:54,320 --> 00:05:55,890
不管你是不是在

122
00:05:56,170 --> 00:06:00,227
普遍UML工具还是专门画状态机的

123
00:06:00,227 --> 00:06:05,240
UML工具像EA、Rhapsody、MagicDraw

124
00:06:05,660 --> 00:06:06,910
如果是

125
00:06:07,540 --> 00:06:09,226
专门画状态机的

126
00:06:09,226 --> 00:06:11,333
什么Visual State

127
00:06:11,333 --> 00:06:13,020
只能画状态机

128
00:06:15,730 --> 00:06:16,404


129
00:06:16,404 --> 00:06:18,202
他如果要用状态机

130
00:06:18,202 --> 00:06:21,348
他肯定会用到这样一些工具来画

131
00:06:21,348 --> 00:06:23,820
然后帮助生成代码什么的

132
00:06:23,820 --> 00:06:24,270
但实际上

133
00:06:24,840 --> 00:06:26,520
我们去观察的话

134
00:06:26,520 --> 00:06:26,760


135
00:06:27,330 --> 00:06:29,330
即使他做嵌入式软件

136
00:06:29,330 --> 00:06:30,130
他用的

137
00:06:30,510 --> 00:06:32,320
比例也并不大

138
00:06:35,610 --> 00:06:37,700
那为什么是这样

139
00:06:38,370 --> 00:06:38,636


140
00:06:38,636 --> 00:06:39,700
这个的话

141
00:06:40,980 --> 00:06:41,960


142
00:06:42,450 --> 00:06:44,488
不只是状态机

143
00:06:44,488 --> 00:06:47,800
像别的UML相关的一些

144
00:06:48,410 --> 00:06:50,980
建模的元素,用得实际上

145
00:06:51,260 --> 00:06:53,420
也并不多,也并不是很好

146
00:06:53,420 --> 00:06:54,140
这是一个

147
00:06:54,640 --> 00:06:56,030
普遍的现象

148
00:06:56,310 --> 00:06:58,412
我们之前也说过很多遍了

149
00:06:58,412 --> 00:06:59,560
它是有门槛的

150
00:07:00,020 --> 00:07:01,590
很多人实际上

151
00:07:02,290 --> 00:07:04,315
这个门槛并没有跨过去

152
00:07:04,315 --> 00:07:06,340
并没有咬咬牙去掌握它

153
00:07:08,480 --> 00:07:09,620
第二个

154
00:07:09,900 --> 00:07:10,272


155
00:07:10,272 --> 00:07:11,390
可能

156
00:07:11,930 --> 00:07:13,069
很多情况下

157
00:07:13,069 --> 00:07:15,119
我们并没有这种压力

158
00:07:15,119 --> 00:07:17,170
要把质量做到这么好

159
00:07:17,860 --> 00:07:22,834
并没有把质量作为一个非常非常重要的指标

160
00:07:22,834 --> 00:07:23,700
得过且过

161
00:07:26,590 --> 00:07:27,980
所以我们

162
00:07:28,260 --> 00:07:29,640
不只针对状态机的

163
00:07:29,640 --> 00:07:31,538
所有的建模都是一样的

164
00:07:31,538 --> 00:07:33,954
就是说怎样才能把建模做得好

165
00:07:33,954 --> 00:07:35,334
我们说过很多遍了

166
00:07:35,334 --> 00:07:36,714
要有冠军的心

167
00:07:36,714 --> 00:07:37,060
对吧

168
00:07:40,100 --> 00:07:44,250
冠军的心,没有这个的话,很可能讲完了就

169
00:07:45,850 --> 00:07:47,510
像水洗过一样

170
00:07:48,340 --> 00:07:49,558
什么都没剩下

171
00:07:49,558 --> 00:07:52,603
因为你又没有这个主动性去追求

172
00:07:52,603 --> 00:07:55,649
客观上也没有这个环境压迫你

173
00:07:55,649 --> 00:07:57,680
鼓励你去这样做

174
00:07:58,510 --> 00:07:59,799
那既然没有主动

175
00:07:59,799 --> 00:08:01,088
也没有客观

176
00:08:01,088 --> 00:08:01,825
没有主观

177
00:08:01,825 --> 00:08:02,562
也没有客观

178
00:08:02,562 --> 00:08:04,219
我干嘛要去改进呢

179
00:08:04,219 --> 00:08:06,061
干嘛要去学这个东西呢

180
00:08:06,061 --> 00:08:06,430
对吧

181
00:08:08,950 --> 00:08:09,225

182
00:08:09,225 --> 00:08:11,430
这是我们说的现状

183
00:08:12,620 --> 00:08:14,900
我们来先看一下

184
00:08:16,110 --> 00:08:17,350
状态机

185
00:08:17,630 --> 00:08:22,540
以及相关的这些理论或概念的发展的历史

186
00:08:25,300 --> 00:08:26,830
状态机的话

187
00:08:27,320 --> 00:08:30,414
它的起源并不是软件开发

188
00:08:30,414 --> 00:08:30,930
因为

189
00:08:31,210 --> 00:08:32,607
你看这个年代

190
00:08:32,607 --> 00:08:34,237
一九五几年,对吧

191
00:08:34,237 --> 00:08:34,470


192
00:08:34,470 --> 00:08:37,731
软件当时都还没有

193
00:08:37,731 --> 00:08:40,060
概念都还没有出来呢

194
00:08:40,060 --> 00:08:40,526
对吧

195
00:08:40,526 --> 00:08:40,759


196
00:08:40,759 --> 00:08:42,855
当时叫程序而已

197
00:08:42,855 --> 00:08:44,020
计算机程序

198
00:08:44,300 --> 00:08:44,535


199
00:08:44,535 --> 00:08:46,894
要形成软件那个概念

200
00:08:46,894 --> 00:08:48,310
到后面了

201
00:08:48,590 --> 00:08:50,066
更不用说软件工程

202
00:08:50,066 --> 00:08:53,020
1968年才有软件工程

203
00:08:53,360 --> 00:08:54,510


204
00:08:55,070 --> 00:08:56,990
这样一个提法

205
00:08:59,200 --> 00:09:01,340
那一开始解决的是

206
00:09:02,780 --> 00:09:03,864
电路的问题

207
00:09:03,864 --> 00:09:05,310
数字电路的问题

208
00:09:05,590 --> 00:09:07,130
组合逻辑电路

209
00:09:07,860 --> 00:09:08,740
输入

210
00:09:09,020 --> 00:09:09,870
然后呢

211
00:09:10,150 --> 00:09:10,702
进来

212
00:09:10,702 --> 00:09:13,740
然后这边就会有各种输出

213
00:09:14,890 --> 00:09:19,320
输入进来,这边输出,这个逻辑

214
00:09:20,530 --> 00:09:21,860
是怎么决定的

215
00:09:23,840 --> 00:09:24,700
那么

216
00:09:24,980 --> 00:09:29,120
或者说,里面的逻辑怎么把它表达和整理

217
00:09:30,760 --> 00:09:31,550


218
00:09:31,830 --> 00:09:32,560


219
00:09:32,980 --> 00:09:34,755
这些人就写了论文了

220
00:09:34,755 --> 00:09:35,150
对吧

221
00:09:36,060 --> 00:09:38,080
最早的是这个

222
00:09:38,430 --> 00:09:44,950
跟现在的状态机相关的是Huffman,哈夫曼

223
00:09:48,960 --> 00:09:50,438
就是那个哈夫曼算法

224
00:09:50,438 --> 00:09:51,260
那个哈夫曼

225
00:09:51,260 --> 00:09:53,561
但是这个文章不是说那个算法的

226
00:09:53,561 --> 00:09:54,054
说算法

227
00:09:54,054 --> 00:09:55,040
另外的文章

228
00:09:57,260 --> 00:09:59,140
他写了个文章

229
00:09:59,420 --> 00:10:00,870
时序

230
00:10:02,390 --> 00:10:03,420
开关

231
00:10:03,700 --> 00:10:05,750
电路的综合

232
00:10:08,820 --> 00:10:10,040
这样一个文章

233
00:10:10,480 --> 00:10:14,460
那后来其他人又在这个基础上

234
00:10:14,740 --> 00:10:15,024


235
00:10:15,024 --> 00:10:17,299
又发了其他文章

236
00:10:17,299 --> 00:10:19,290
几个典型嘛

237
00:10:19,290 --> 00:10:21,850
一个是Mealy这个

238
00:10:25,510 --> 00:10:28,130
这个文章,还有Moore这个文章

239
00:10:28,660 --> 00:10:28,906


240
00:10:28,906 --> 00:10:29,890
所以后面

241
00:10:30,890 --> 00:10:32,210
就把

242
00:10:32,490 --> 00:10:34,460
这些文章里面提到的

243
00:10:35,660 --> 00:10:39,050
对状态机的看法或者观点

244
00:10:39,740 --> 00:10:42,930
就叫做Mealy机或Moore机

245
00:10:43,290 --> 00:10:44,870
那Mealy机

246
00:10:49,560 --> 00:10:51,270
就是说

247
00:10:51,600 --> 00:10:52,221
输出

248
00:10:52,221 --> 00:10:55,740
也就是我们现在UML说的那个效果

249
00:10:56,430 --> 00:10:56,856


250
00:10:56,856 --> 00:10:57,710
输出

251
00:10:59,450 --> 00:11:02,370
或者现在UML的效果

252
00:11:02,370 --> 00:11:03,830
它是由迁移决定

253
00:11:04,110 --> 00:11:05,510
这个是

254
00:11:06,610 --> 00:11:08,132
比较容易理解的

255
00:11:08,132 --> 00:11:12,320
迁移过程中,相当于一会我们要讲的

256
00:11:12,870 --> 00:11:15,031
这个action 

257
00:11:15,031 --> 00:11:16,760
斜杠右边action,就是输出嘛

258
00:11:16,760 --> 00:11:18,057
这边是事件嘛

259
00:11:18,057 --> 00:11:18,490
对吧

260
00:11:18,950 --> 00:11:22,483
由迁移来在这里表达
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值