版主
主题
回帖0
积分10609
阅读权限200
注册时间2008-11-22
最后登录1970-1-1
在线时间 小时
|
本帖最后由 kenson 于 2014-10-23 17:22 编辑
8 C7 B6 v+ z: z
& A- X7 t: [! x先讨论下为什么要学习UML:
; K# a9 |! S0 h契机:最近想研究量子平台,良好的UML功底对研究量子平台的DATASHEET大有裨益。( ^, R& T: D4 N! ?7 d! v# c' @, L
8 K. |6 k0 K& c$ K/ Q7 M
动力:1.UML是软件交流的基础工具& [4 w4 W! P/ W" Q! f- r
* w- j2 N' q) ~3 m6 c
2.状态机是嵌入式领域一大利器' Z* |5 k B7 Q! z$ h3 R) N
7 e/ V0 P/ Z: y6 mOK,就以这本书开始啦
) n8 o# A6 a1 O; n4 m) l) T5 N4 ?: R$ Q7 Y2 _$ E
图片
+ V4 T9 a# L. ^& n2 i# b
6 Q" l, c* {& v! Y3 }1 j
$ `. w; ?) \/ p) P8 q: k. s! J6 x) c2 ~0 L% _' J0 Z% w
综述:
8 B" e3 o$ m8 D3 @" l" H' S) z+ p3 x% s* x9 G* G: s" [2 _
状态机通过为每一个对象的生命周期建模的方式解释对象的动态行为。: P. u" g$ L- g1 |: h8 w( o
; ^- Q% `! s% V2 q" e
我们把每一个对象被分割为单体,与外界通信的方式仅为检测事件,并对事件做出相应。事件代表了所有对象可以检测到的变化,形如收到明确的触发信号,或者定时器产生的中断。所有可以影响到对象属性的事物都可以被描述为事件。真实世界发生的事情被转化为传输至系统中的信号(我们最常见的就是各类电信号)。
+ U* V" U0 x7 F% d C; q- q3 E6 \6 @& a3 k7 [
一个状态就是,当对象的属性被确定时,那么他对某特定的行为响应就被确定了,换句话来说,所有有着相同状态的对象,在相同事件发生时,他们的响应也是近似的。* ]2 G' y. H# p0 F1 l
M2 B+ h: X) k* V2 o i$ { 状态机即解释了一个对象可以保持在哪些状态,对于每一个特定的状态,状态机解释了当对象接受到事件时,会产生的响应,以及接下来转移到的状态。$ V5 Y [' c4 }4 [# V" G! @
7 G& I6 ]6 K7 z" D7 }; k
- p% l) Q, P% M! u. O% y1 X: ?+ U9 j+ N M5 T9 \
状态机) [+ g5 i% b! n
# I& V5 a. o( a$ I s' \
状态机是包含状态与变化的图表,形如:
: d% S; m! i* X3 i
d H2 M6 S: k$ D0 \! D图片
* o6 [; M7 i" y8 l0 A, l: u5 L2 B6 s. C/ b* d3 x( x
通常,状态机伴随着类,并且解释了类的实例对事件的响应。
: C: T" s( p- A, |6 J5 J' G/ m8 X/ y( y% t- T y
状态机是对单个对象的建模,所有外界的影响都被概括为事件,当对象检测到时间的时候,它根据当前的状态做出响应。响应可能包括对象属性值的改变以及使对象转变到新的状态。
0 \, E W7 A' G5 ?7 c) p% o1 }
1 n Z+ D, V# V5 ~2 M 状态机是一种有局限的视图,因为它只是看单独的对象的行为。这是一种对系统的简化,不适合用于系统整体的分析,但是,对于精细分析对象的行为,这是一个好的选择。% U6 ?: S+ [' Y5 ?
& i6 t! u1 V2 w9 N2 A
) q) c2 _: k6 U0 ?* ^
4 f2 N3 N$ P1 R
事件# ~5 v5 U& K L& ?
* P/ I7 { v @* ? 事件发生在确定的时间点,它是不会持续的。如果一些事物发生后会产生影响,我们就把它们建模为事件,就像类描述符代表了所有该类实例化的对象拥有相同的结构一样,事件描述符代表了一类事件。当一个特定的事件产生时,我们称之为发生(occurrence),像对象一样,事件也是有参数的。事件可分为四类:调用事件,改变事件,信号事件,时间事件(概述如下表)
0 X' l* k4 J& B" N
7 J) ~! P; l) Z% \# k图片+ ?% M3 Y# Y1 K; w8 I; a
& G0 n5 [2 }3 h" @' P& ]4 n, M 信号:信号严格的存在于两个对象之间的信号中,接受到信号对于接受对象来说是一个事件,发送对象严格的创造且初始化信号的实例用于发送给各类对象。在大多数场合,信号是异步的,即发送对象不会等待接受对象处理结束,只会一直发送信号。3 r ?8 V7 l0 C2 [5 f
1 E7 K; d- H) A8 y! B
信号在类中可以以《signal》的方式被声明,同时,信号也是支持继承机制的。; j; f% j7 D. H# v7 @; V) V( {
3 U3 a, ]: O. ?% D+ O
图片
8 c+ K2 b4 C$ D, A' |1 s$ c# @1 T
调用事件:调用事件是指一个对象对调用的接收,与类的方法不同,被调用者会在之后与调用者并行运行。
% a! _) M4 D7 ?+ ^5 V2 B9 |8 \0 v+ ?) p% G! \1 A
改变事件:改变事件发生在特定属性值的布尔表达式满足某一特定条件时。这是一种非常直观的方式,但它有两个缺点:1.不必要的计算量,2.对于原因与影响的关系来说,它是非常模糊的。/ S8 ^8 u' n Y4 r
- k( P. t5 o5 _8 E# ^
注意分辨保护条件和改变事件的区别,改变事件是事实在测试布尔值的,而保护条件则相当于操作系统中的临界区,只在需要的时候才出现。
2 u5 J3 u7 C, v: \! d; n- n) S. Q2 `
时间事件:很好理解,到了某个时间所触发的时间。7 e# k8 o* O( g0 i4 J0 C8 p) z0 b" |
- I& L& d6 i; s, M% l+ d) z7 {8 g9 D5 o
|
|