261
00:11:22,483 --> 00:11:25,260
或依赖于这个,在这里表达
262
00:11:26,780 --> 00:11:30,000
Moore是说什么,在这里表达
263
00:11:30,280 --> 00:11:30,523
264
00:11:30,523 --> 00:11:33,443
在状态里表达,状态的什么
265
00:11:33,443 --> 00:11:34,660
入口
266
00:11:34,940 --> 00:11:37,450
出口,这个地方表达
267
00:11:37,880 --> 00:11:40,340
这边有
268
00:11:40,620 --> 00:11:42,510
输出
269
00:11:43,360 --> 00:11:44,382
效果
270
00:11:44,382 --> 00:11:45,150
在这里
271
00:11:45,610 --> 00:11:48,270
在状态里面表达
272
00:11:50,650 --> 00:11:52,900
当然这两个你也可以把它
273
00:11:53,280 --> 00:11:54,240
互相换
274
00:11:54,240 --> 00:11:57,313
无非是把这个东西换一个地方
275
00:11:57,313 --> 00:11:57,890
对不对
276
00:12:00,110 --> 00:12:02,360
简单的基本上都能够换过来
277
00:12:06,720 --> 00:12:07,890
这是
278
00:12:08,770 --> 00:12:10,447
发展的历史
279
00:12:10,447 --> 00:12:11,790
那后来的
280
00:12:12,590 --> 00:12:14,410
下一步就是
281
00:12:18,090 --> 00:12:18,990
这个
282
00:12:19,930 --> 00:12:20,646
David
283
00:12:20,646 --> 00:12:21,720
Harel
284
00:12:21,720 --> 00:12:25,168
285
00:12:25,168 --> 00:12:25,567
这个教授,写的这个文章
286
00:12:25,567 --> 00:12:31,490
状态图,Statechart这个文章
287
00:12:35,160 --> 00:12:37,580
实际上就是把前面的
288
00:12:37,990 --> 00:12:38,850
人
289
00:12:40,750 --> 00:12:42,350
提供的各种元素
290
00:12:42,350 --> 00:12:44,180
包括刚才Moore
291
00:12:44,480 --> 00:12:45,495
Mealy
292
00:12:45,495 --> 00:12:46,510
这些
293
00:12:46,910 --> 00:12:48,375
都包含进来
294
00:12:48,375 --> 00:12:50,330
把它都放进来
295
00:12:50,820 --> 00:12:51,890
而且呢
296
00:12:52,900 --> 00:12:55,180
把状态机分了层
297
00:12:55,960 --> 00:12:56,292
298
00:12:56,292 --> 00:12:57,952
提供了分层
299
00:12:57,952 --> 00:12:59,280
还有分区
300
00:12:59,900 --> 00:13:00,205
301
00:13:00,205 --> 00:13:02,953
分成正交的若干个区
302
00:13:02,953 --> 00:13:04,480
然后呢,分层
303
00:13:04,850 --> 00:13:07,096
实际上就是区和区之间
304
00:13:07,096 --> 00:13:09,093
就相当于可以and嘛
305
00:13:09,093 --> 00:13:09,592
对吧
306
00:13:09,592 --> 00:13:11,090
这边可以
307
00:13:12,940 --> 00:13:14,437
可以同时并存的
308
00:13:14,437 --> 00:13:15,935
而这边只能是或
309
00:13:15,935 --> 00:13:16,363
对吧
310
00:13:16,363 --> 00:13:18,288
一个状态内
311
00:13:18,288 --> 00:13:20,000
这个只能是或
312
00:13:23,220 --> 00:13:25,385
同时还有入口出口活动
313
00:13:25,385 --> 00:13:27,550
这个也放进来了
314
00:13:30,110 --> 00:13:32,830
那这个就是目前我们UML
315
00:13:35,100 --> 00:13:36,630
或者SysML
316
00:13:37,300 --> 00:13:39,930
所使用的这个状态机的
317
00:13:42,570 --> 00:13:43,562
雏形
318
00:13:43,562 --> 00:13:46,210
就是在这个
319
00:13:46,490 --> 00:13:47,390
基础上
320
00:13:48,580 --> 00:13:51,940
来制定了现在UML、SysML的规范
321
00:13:59,090 --> 00:14:03,474
那UML的状态机的元模型是这样的
322
00:14:03,474 --> 00:14:04,790
这2.5.1的
323
00:14:05,870 --> 00:14:10,071
2.5.1这个状态机的元模型
324
00:14:10,071 --> 00:14:12,639
你看,状态机分了几个区
325
00:14:12,639 --> 00:14:14,040
这是区嘛
326
00:14:14,350 --> 00:14:15,504
分区嘛,对吧
327
00:14:15,504 --> 00:14:17,352
然后里面有状态
328
00:14:17,352 --> 00:14:19,200
然后这个迁移,对吧
329
00:14:21,490 --> 00:14:23,410
状态,迁移
330
00:14:23,910 --> 00:14:25,070
类似这样的
331
00:14:29,590 --> 00:14:31,945
相当于把它给形式化
332
00:14:31,945 --> 00:14:34,300
因为Harel这个
333
00:14:34,580 --> 00:14:37,220
文章里面,他只提供了图形
334
00:14:37,640 --> 00:14:41,100
他并没有提供形式化的表示法
335
00:14:42,640 --> 00:14:44,850
也没有提供元模型
336
00:14:45,970 --> 00:14:48,350
UML提供元模型
337
00:14:51,900 --> 00:14:53,610
那现在也有一些
338
00:14:57,160 --> 00:14:58,960
文本的
339
00:15:00,650 --> 00:15:03,740
用文本来表达模型的
340
00:15:04,650 --> 00:15:04,890
341
00:15:04,890 --> 00:15:06,576
一些标准
342
00:15:06,576 --> 00:15:10,190
比如说,一会会讲W3C这个
343
00:15:10,690 --> 00:15:14,171
SCXML,Statechart XML
344
00:15:14,171 --> 00:15:18,520
状态图XML,等等
345
00:15:22,110 --> 00:15:23,900
那么在UML
346
00:15:28,500 --> 00:15:30,590
这个标准里面
347
00:15:31,690 --> 00:15:33,610
它分为两种
348
00:15:33,610 --> 00:15:35,530
一个叫行为状态机
349
00:15:35,530 --> 00:15:37,450
一个叫协议状态机
350
00:15:37,450 --> 00:15:37,930
那实际上
351
00:15:38,760 --> 00:15:41,280
我们平时说的状态机就是指的
352
00:15:41,280 --> 00:15:42,720
行为状态机,行为是什么
353
00:15:42,720 --> 00:15:43,080
就是
354
00:15:43,360 --> 00:15:45,190
刚才讲这个输出嘛
355
00:15:47,510 --> 00:15:47,785
356
00:15:47,785 --> 00:15:49,160
或者效果
357
00:15:50,010 --> 00:15:51,870
那协议状态机是什么
358
00:15:51,870 --> 00:15:52,490
就是把
359
00:15:52,770 --> 00:15:55,719
那个行为部分砍掉,没有输出
360
00:15:55,719 --> 00:15:57,307
输出就是action
361
00:15:57,307 --> 00:15:57,761
对吧
362
00:15:57,761 --> 00:16:00,030
就是刚才讲的那个action
363
00:16:04,910 --> 00:16:06,808
action可能发生在哪里
364
00:16:06,808 --> 00:16:07,520
发生在
365
00:16:08,470 --> 00:16:11,690
这个地方,也可能发生在这个状态的入口
366
00:16:11,970 --> 00:16:14,075
进入,在状态里面发生
367
00:16:14,075 --> 00:16:16,648
也可能在迁移的时候发生
368
00:16:16,648 --> 00:16:16,882
369
00:16:16,882 --> 00:16:19,690
那现在这个协议状态机就把
370
00:16:20,620 --> 00:16:22,205
这个就砍掉了
371
00:16:22,205 --> 00:16:23,337
就保留协议
372
00:16:23,337 --> 00:16:24,470
就保留那个
373
00:16:24,750 --> 00:16:26,030
输入的部分
374
00:16:26,360 --> 00:16:30,570
就相当于定义了一些可以接受的输入
375
00:16:32,290 --> 00:16:33,820
但是的话我们
376
00:16:35,260 --> 00:16:36,160
这个
377
00:16:37,010 --> 00:16:38,400
协议状态机
378
00:16:39,320 --> 00:16:39,592
379
00:16:39,592 --> 00:16:43,130
我们在软件开发里面用得并不多
380
00:16:44,640 --> 00:16:47,311
我们说状态机指的就是行为状态机
381
00:16:47,311 --> 00:16:48,480
因为我们毕竟要
382
00:16:48,940 --> 00:16:50,350
把这个
383
00:16:50,870 --> 00:16:52,830
软件给运转起来嘛
384
00:16:52,830 --> 00:16:53,320
对吧
385
00:16:53,320 --> 00:16:53,565
386
00:16:53,565 --> 00:16:54,790
要有输出嘛
387
00:16:55,980 --> 00:16:58,206
所以呢,这个就不用管它了
388
00:16:58,206 --> 00:17:00,061
不用管它,UML标准
389
00:17:00,061 --> 00:17:02,473
你搜状态机,有两个状态机
390
00:17:02,473 --> 00:17:03,215
一个行为
391
00:17:03,215 --> 00:17:04,329
一个是协议
392
00:17:04,329 --> 00:17:06,370
这个协议就是行为的
393
00:17:06,740 --> 00:17:08,068
删减版
394
00:17:08,068 --> 00:17:09,840
你可以这样理解
395
00:17:10,560 --> 00:17:13,474
把输出部分给砍掉之后
396
00:17:13,474 --> 00:17:15,660
剩下的就是协议部分
397
00:17:17,810 --> 00:17:19,000
接下来呢
398
00:17:19,380 --> 00:17:21,860
我们首先来看
399
00:17:22,600 --> 00:17:25,040
学习状态机
400
00:17:25,660 --> 00:17:28,478
建模的这个技能的目的
401
00:17:28,478 --> 00:17:29,760
或者用途