狀態(tài)機是無論科研探索還是科技應(yīng)用方面都非常重要的一種分析工具麻诀。幾乎在所有涉及到隨時間演化的問題中痕寓,都可以找到狀態(tài)機的用武之地。這里作為一個普及性的介紹文章蝇闭,我們主要針對最基礎(chǔ)形式的狀態(tài)機進(jìn)行一些深入淺出式的提要介紹呻率,以期能夠令讀者對狀態(tài)機有一定的基礎(chǔ)認(rèn)識,能夠理解狀態(tài)機分析方法的思考路線呻引,并掌握一些最基本形式的狀態(tài)機畫法礼仗。
本文將會從三個主要角度展開介紹,分別為:
- 簡要介紹一下狀態(tài)機的各個應(yīng)用場景
- 闡明狀態(tài)的含義
- 介紹狀態(tài)機模型的基本概念和圖示畫法
- 大體瀏覽一下最基本最常見的幾種狀態(tài)機畫法
其中我們會用較大的篇幅進(jìn)行狀態(tài)以及狀態(tài)機的概念辨析逻悠。因為在實際應(yīng)用中元践,由于狀態(tài)及狀態(tài)機概念的錯誤理解而造成的繪圖錯誤占了各種錯誤原因的極大比例,也是初學(xué)者最難逾越的最大難關(guān)童谒。因此請讀者無比潛心靜氣仔細(xì)理解這部分所展開的辨析单旁,以便以后的使用中能夠輕松應(yīng)對。
一饥伊、現(xiàn)實中的狀態(tài)機實例
在現(xiàn)實應(yīng)用中象浑,狀態(tài)機的身影遍布科技應(yīng)用的方方面面蔫饰。從物理學(xué)中的物質(zhì)三態(tài)轉(zhuǎn)換關(guān)系
到環(huán)境科學(xué)中的碳循環(huán)
從數(shù)字電路中的JK觸發(fā)器
圖書館藏書的生命周期分析
乃至保障我們天天上網(wǎng)所不可獲取TCP網(wǎng)絡(luò)通訊協(xié)議的實現(xiàn)狀態(tài)圖
僅由上述寥寥數(shù)例,便可窺見狀態(tài)機的廣泛應(yīng)用愉豺。
二篓吁、什么是狀態(tài)、什么是狀態(tài)機
日常語言中蚪拦,狀態(tài)一詞的概念往往是人們通過反復(fù)大量的接觸而建立的經(jīng)驗性歸納概念杖剪。一旦談及狀態(tài),想要通過其內(nèi)涵為它建立一個較為清晰的定義對普通人而言往往是似乎乎之欲出確有無法準(zhǔn)確遣辭達(dá)意的一件事情外盯。
在數(shù)學(xué)、物理學(xué)以及應(yīng)用科學(xué)領(lǐng)域翼雀,各種不同的狀態(tài)模型內(nèi)都有自己關(guān)于對“狀態(tài)”的看法饱苟,比較經(jīng)典的例如
- 經(jīng)典力學(xué)中的坐標(biāo)、動量狀態(tài)描述狼渊,參見哈密頓力學(xué)箱熬。
- 量子力學(xué)中的量子態(tài)。
- 熱力學(xué)中的態(tài)函數(shù)狈邑。
- 基礎(chǔ)計算理論中的圖靈機中所定義的狀態(tài)城须。
- 數(shù)理語言學(xué)中的度量語料特征的字頻統(tǒng)計中的處理機狀態(tài)。
- ……
1. 一般化的狀態(tài)定義及引申理解
然而米苹,進(jìn)一步厘清以獲得一個更加一般化的關(guān)于狀態(tài)的認(rèn)識糕伐,對于我們準(zhǔn)確理解狀態(tài)機概念是十分必要的。在此蘸嘶,本文嘗試就我們下面所要討論的范圍內(nèi)的問題良瞧,提出一個相對抽象度更高的一個狀態(tài)的概念,以便于后續(xù)的討論训唱。
下面請同作者一道褥蚯,花一些時間糾結(jié)于“是”與“非”這類的問題上。請相信况增,概念的厘清將會為我們準(zhǔn)確理解并運用狀態(tài)機方法帶來決定性的支撐赞庶。
__ 一個討論對象的某些方面的特征在某些時刻,會具有同其它時刻之間相異的一些區(qū)別澳骤∑缜浚刻畫這種同一對象在不同時刻該方面特征間區(qū)別的工具即為狀態(tài),稱之為該對象在的該方面特征的狀態(tài)为肮。 __
這個定義誊锭,其核心結(jié)構(gòu)為
刻畫……區(qū)別……的工具即為狀態(tài)
同時通過三個限定結(jié)構(gòu)
- 同一對象
- 不同時刻
- 該方面特征
指出了狀態(tài)概念的幾個必備要件。
為了進(jìn)一步幫助理解上述定義弥锄,可以考慮一下通過幾個從此引申的辨析丧靡。
(1) 狀態(tài)從屬于一個特定的對象
不同對象的狀態(tài)可能在取值上相等蟆沫,但一定不是同一狀態(tài),因為它們的從屬對象不同温治。
所謂同一狀態(tài)饭庞,外在的表現(xiàn)必然是無論何時所取得值都是相等的。
例如
燈的顏色狀態(tài)可能在某時是“紅色”熬荆,蘋果的顏色狀態(tài)也可能在某時是“紅色”舟山,這種情況下兩者的值是相等的。但顯然紅燈的顏色狀態(tài)和紅蘋果的顏色狀態(tài)不是同一個狀態(tài)卤恳。它們的取值不會永遠(yuǎn)相等累盗。
由此進(jìn)一步引申的一個思考技巧是
討論狀態(tài)時必須明確無誤的指明狀態(tài)所從屬的對象,且大多的語境下不應(yīng)輕易變換這個從屬對象
這里所謂的目標(biāo)對象突琳,可以是實際存在的物若债,也可能是某種事件、某種過程拆融,而且在實際運用中后者居多蠢琳。
例如
- 討論蘋果的顏色變化問題時,目標(biāo)對象是蘋果镜豹。
- 討論一場戰(zhàn)役的進(jìn)展時傲须,目標(biāo)對象是戰(zhàn)役這個事件本身,它的可能取值包含:策劃中趟脂、部署中泰讽、交戰(zhàn)中、已結(jié)束等昔期。
- 討論一個審批業(yè)務(wù)的進(jìn)程時菇绵,則目標(biāo)對象是此業(yè)務(wù)進(jìn)程本身,可能是:申請材料準(zhǔn)備中镇眷,申請已提交正在審核咬最,審核已通過,審核被拒絕等欠动。
(2) 一個對象的狀態(tài)可能隨時間變化
一個對象的狀態(tài)在不同時刻可能取不同的值永乌,也可能取相同的值。但只要所討論的對象沒有變化具伍、所討論的方面沒有變化翅雏,那么這個不同時刻的狀態(tài)就沒有在同一性上發(fā)生變化,而僅僅是取值可能發(fā)生了變化人芽。
例如
電燈的工作狀態(tài)在通電時是“亮”望几,在不通電時是“滅”。
** 狀態(tài)隨時間變化這個事實是整個狀態(tài)機方法的中心要點萤厅,也正是因為這個橄抹,討論狀態(tài)才具有了它的必要性靴迫。**
狀態(tài)取值隨時間的變化,稱為狀態(tài)的流轉(zhuǎn)楼誓。變化前的狀態(tài)值稱為流出狀態(tài)玉锌,變化后的狀態(tài)值稱為流入狀態(tài)。
大多數(shù)的情況下疟羹,狀態(tài)的流轉(zhuǎn)并不是自發(fā)的主守,而是在滿足某些條件的情況下觸發(fā)的,這種觸發(fā)條件稱為事件榄融。在沒有發(fā)生指明的事件時参淫,狀態(tài)將會保持原有的值,直到觸發(fā)事件發(fā)生愧杯。
例如
- 電燈的“亮”與“暗”之間的轉(zhuǎn)換涎才,是“通電”和“停電”事件所觸發(fā)的。
- 一個申請表單的狀態(tài)從“申請中”變換到“審核中”的狀態(tài)流轉(zhuǎn)是“申請人提交申請”這個事件所觸發(fā)的民效。
若一個狀態(tài)取值在不同的條件下可能流轉(zhuǎn)到不同的流入狀態(tài)憔维,那么這個狀態(tài)的流轉(zhuǎn)便是選擇性的涛救。
例如
考慮臺式電話機的工作狀態(tài)畏邢。若觀察“話筒已提起”這個狀態(tài)值,若發(fā)生“用戶掛回話筒”事件检吆,則話機的狀態(tài)將轉(zhuǎn)換為“已掛機”舒萎。但若發(fā)生“用戶撥號”事件,那么話機狀態(tài)則將進(jìn)入“電話接通中”蹭沛。
當(dāng)然也存在無序任何觸發(fā)條件而發(fā)生的自發(fā)性流轉(zhuǎn)臂寝。這種情況下,流出狀態(tài)將會是瞬時的摊灭,經(jīng)歷一個瞬間后便會轉(zhuǎn)換為自發(fā)流轉(zhuǎn)的流入狀態(tài)咆贬。這種具有自發(fā)流轉(zhuǎn)的流出狀態(tài),稱為瞬態(tài)帚呼。
實際上掏缎,這里的瞬間所指并不見得一定便是人類所能夠體驗的所謂足夠短的時間。而是指對于所考察的問題煤杀,此種流轉(zhuǎn)的條件是不被關(guān)心的眷蜈。因此這個瞬間可能確實非常短,也可能實際上很長久沈自。
例如
- 閃電放電過程酌儒,若不關(guān)心放電的電量因素,那么“放電中”轉(zhuǎn)換為“放電后”這個流轉(zhuǎn)的條件“電量釋放完畢”便是不被關(guān)心的枯途,便可將這個流轉(zhuǎn)視為自發(fā)流轉(zhuǎn)忌怎,把“放電中”視為“瞬態(tài)”籍滴。
- 公文收發(fā)管理,若關(guān)注的中心在公文的收與發(fā)的過程呆躲,而不關(guān)心中間的機要通訊過程异逐,那么一個公文從“已發(fā)出”到“辦理接收手續(xù)中”的流轉(zhuǎn)條件“公文送達(dá)接受處”便是不被關(guān)心的觸發(fā)條件,那么即可視“已發(fā)出”為瞬態(tài)插掂。這種情況下灰瞻,也許公文的傳遞過程實際上是幾天乃至幾周都可以。
瞬態(tài)沿自發(fā)性流轉(zhuǎn)變化是一個必然的過程辅甥。因此不存在統(tǒng)一個瞬態(tài)具有多條不同目的地的自發(fā)流轉(zhuǎn)的情況酝润。同樣,瞬態(tài)上也不存在其它條件性流轉(zhuǎn)的可能璃弄。瞬態(tài)只能具有一個唯一的自發(fā)性流轉(zhuǎn)要销。
在大多數(shù)情況中,除非具有相當(dāng)強烈的需求需要討論瞬態(tài)本身同其對應(yīng)的流入態(tài)之間的區(qū)別夏块,否則單獨設(shè)置一個瞬態(tài)是沒有必要的疏咐,往往可以和之后的流入態(tài)進(jìn)行合并處理。這是自發(fā)性流轉(zhuǎn)和瞬態(tài)并不常見的原因脐供。
(3) 一個對象的狀態(tài)可以是連續(xù)變化的浑塞,也可能是跳躍取值離散變化的
例如
- 燈絲老化問題中,燈絲的老化狀態(tài)從全新到最終的完全報廢政己,若以老化程度0%到100%衡量酌壕,老化過程中某一個時刻,老化程度可能取 [0%歇由,100%] 之間的任何一個實數(shù)卵牍。
- 門禁系統(tǒng)的工作狀態(tài),簡單的可以分為“閉鎖”沦泌、“開啟”兩個分立的狀態(tài)糊昙。
依照所考察的對象的狀態(tài)的這種連續(xù)和離散取值的區(qū)別,可以比較簡單的將狀態(tài)機分為連續(xù)狀態(tài)機谢谦、離散狀態(tài)機释牺。而離散狀態(tài)機中,又可根據(jù)可能出現(xiàn)的狀態(tài)的總數(shù)量分為有限狀態(tài)機和無限離散狀態(tài)機他宛。
例如
- 前述經(jīng)典物理中的哈密頓理學(xué)系統(tǒng)船侧,采用坐標(biāo)、動量共軛坐標(biāo)系統(tǒng)厅各,整體上所描述的便是一個連續(xù)狀態(tài)機的問題镜撩。
- 理想的全加器,具有無窮位的示數(shù)能力,可能的狀態(tài)遍布整個自然數(shù)范圍袁梗,是一個無限離散狀態(tài)機宜鸯。
- 非理想全加器,只能夠提供有限位的示數(shù)能力遮怜,所能夠表達(dá)的自然數(shù)加法僅僅限制在其有效示數(shù)范圍淋袖,總體的狀態(tài)數(shù)量是有限的,因此是一個有限狀態(tài)機锯梁。
各種狀態(tài)機的應(yīng)用場景各不相同即碗,在面對工作過程建模這類問題時,有限狀態(tài)機是較為常用的陌凳。同時有限狀態(tài)機也是使用狀態(tài)圖進(jìn)行建模的過程方法論中最為基礎(chǔ)的剥懒。作為入門性介紹文章,本文的介紹范圍也限定于此合敦。
(4) 狀態(tài)機問題的討論是基于考察時間范圍初橘、考察問題范圍進(jìn)行的
哲學(xué)上,對于任何一個對象充岛,其能夠用以表征不同時刻差異的特征是無窮多的保檐。如果不考慮范圍貪大求全,那么所考慮的狀態(tài)集將會無窮大崔梗,將會超越人類的思維理解能力夜只。因此,建模過程中炒俱,應(yīng)當(dāng)首先明確所考慮的問題范圍盐肃,限定邊界爪膊,以將復(fù)雜的問題化簡权悟、將不可能的問題轉(zhuǎn)為可能。
同樣推盛,在時間上峦阁,對象的狀態(tài)的可能值范圍也是隨時間變化的。若試圖建立一個模型囊括對象所有時間上的情形耘成,那么仍將會掉入無窮的陷阱榔昔。對于狀態(tài)的建模,仍應(yīng)采取宏觀小+微觀大的方案瘪菌。選取合適的時間范圍撒会,即能夠保證狀態(tài)取值范圍的穩(wěn)定,又能夠保證狀態(tài)取值范圍內(nèi)所有值都具備取值的可能性(即狀態(tài)取值范圍內(nèi)的遍歷性)师妙。
例如
- 討論路口交通燈的控制問題,最簡的考察范圍為“燈具的有效工作期內(nèi)”,將燈具的老化帮非、損毀問題排除在外。
- 而討論交通系統(tǒng)設(shè)備保養(yǎng)維護(hù)問題時褪秀,則考察范圍應(yīng)當(dāng)正好相反,將燈具的老化薛训、損毀納入考量媒吗,而此時具體這個燈何時亮起何時熄滅則不是考察范圍。
未經(jīng)專業(yè)訓(xùn)練的建模者在這個問題上是最易犯錯的乙埃,往往擔(dān)心考慮不足闸英,不能夠適度控制考察范圍,而陷入了“吾生也有涯介袜,而知也無涯 自阱。以有涯隨無涯,殆已米酬。”的困境沛豌。數(shù)學(xué)本身的方法論中心思想是化簡,人類的思維能力相對于茫茫知識的海洋赃额,僅僅是一葉扁舟加派。面臨超越自身能力范圍的問題時,通過可靠的方法將其轉(zhuǎn)化為若干較為簡化而能夠被處理的問題跳芳,這樣才能最終解決問題芍锦。一步到位的做法永遠(yuǎn)僅僅只能起到望梅止渴的而已。切記飞盆!切記娄琉!
2. 狀態(tài)機的概念、畫法
如前文所述吓歇,狀態(tài)機是指面對一個對象孽水,針對所考察的狀態(tài),其所有可能狀態(tài)取值以及這些狀態(tài)取值之間的流轉(zhuǎn)關(guān)系的整體描述城看。
狀態(tài)機圖則是進(jìn)行上述描述的一種有效工具女气。當(dāng)然,還存在其它描述方法测柠,例如列表法炼鞠、公式法等,不過本文仍將重點放在狀態(tài)機圖的使用上轰胁。
畫法
- 以方框或圓框表示一個狀態(tài)可取值谒主,簡稱為狀態(tài),在狀態(tài)內(nèi)部或旁邊標(biāo)注所取之值赃阀。
- 在狀態(tài)之間使用有向箭頭表示狀態(tài)之間的流轉(zhuǎn)霎肯,從流出狀態(tài)指向流入狀態(tài),流轉(zhuǎn)線條上標(biāo)注流轉(zhuǎn)條件,若為自發(fā)流轉(zhuǎn)姿现,則不標(biāo)注肠仪。
- 實際的運用中可能會為狀態(tài)和流轉(zhuǎn)作更多標(biāo)注、樣式备典,但不應(yīng)當(dāng)變更狀態(tài)作為圖形結(jié)點异旧、流轉(zhuǎn)作為有向箭頭的基本約定。
例圖
這里特別需要將前述概括中的若干重點進(jìn)行加強提佣,以下分別說明吮蛹。
(1) 一幅圖之內(nèi)應(yīng)當(dāng)僅討論一個對象的狀態(tài)
如前文所述,一個狀態(tài)機表征的是唯一的對象拌屏,一幅狀態(tài)機圖應(yīng)當(dāng)僅繪制一個對象的狀態(tài)流轉(zhuǎn)潮针。任何多余一個以上的對象的狀態(tài)若出現(xiàn)在同一幅圖中,均是概念混淆的錯誤倚喂。當(dāng)對象狀態(tài)結(jié)構(gòu)較復(fù)雜時每篷,可以用多幅圖聯(lián)合描述一個對象,但任何一個圖中均應(yīng)僅談?wù)撨@個對象端圈。
例圖
(2) 目標(biāo)對象的狀態(tài)取值應(yīng)當(dāng)是有限的矗晃,一套圖內(nèi)應(yīng)當(dāng)畫出所有狀態(tài)取值
如前文所述,應(yīng)當(dāng)在限定的時間范圍宴倍、限定的討論范圍內(nèi)選擇狀態(tài)取值范圍张症,而且針對我們所討論的有限狀態(tài)機,可取狀態(tài)值的數(shù)量應(yīng)當(dāng)是有限的鸵贬。因此在一套狀態(tài)機圖中俗他,應(yīng)當(dāng)畫出所有的狀態(tài)取值。
不應(yīng)當(dāng)采取走一步看一步的畫法恭理,而應(yīng)當(dāng)在制圖前首先考慮狀態(tài)可能取值的數(shù)量拯辙,確定后再進(jìn)行繪圖郭变。繪圖完成后應(yīng)當(dāng)進(jìn)行數(shù)量上的校驗颜价。
當(dāng)然,不排除前期思考存在疏漏的可能诉濒,也不排除冗余的可能周伦,可以在繪圖過程中進(jìn)行修訂調(diào)整,但是思考的路線應(yīng)當(dāng)秉持正確的順序未荒。
(3) 應(yīng)當(dāng)有唯一的初始狀態(tài)专挪,可以有終止?fàn)顟B(tài)也可以沒有
討論對象的狀態(tài),主要的目的是討論對象當(dāng)前在哪個狀態(tài)值上,發(fā)生什么事寨腔,之后轉(zhuǎn)移到哪個狀態(tài)值上速侈。如果由此追溯,那么上一個所取得狀態(tài)值是什么迫卢、在上一個是什么這樣一路溯源倚搬,那么考慮到前文所述的有限時間的要求,在最初的時刻的狀態(tài)值是什么是必須要進(jìn)行回答的乾蛤。這種情況下每界,必須指定一個初始的狀態(tài)取值才能夠開展下面的工作。因此家卖,繪制狀態(tài)圖時必須指定一個初始狀態(tài)眨层。
此外一個對象的被考察的狀態(tài)在同一時刻不能夠同時具有兩個不同的值,狀態(tài)取值之間應(yīng)當(dāng)是相互排斥的上荡。因此一個對象的初始狀態(tài)必須是唯一的趴樱。
考慮到有限時間的問題,那么對象狀態(tài)必然也會在最終時刻達(dá)到一個最終的值酪捡。這個所謂的最終時刻并非人為指定的某個時間點伊佃,而是對象的狀態(tài)進(jìn)入到一個值,此后就不再發(fā)生變化了沛善。這種情形即可認(rèn)為達(dá)到了最終狀態(tài)航揉。一個對象可能在不同的情況下達(dá)到不同的最終狀態(tài),因此最終狀態(tài)可能存在多個金刁。
如果稍微做一點點推廣帅涂,考慮這樣的對象,它的狀態(tài)不會到達(dá)某個永遠(yuǎn)不再變化的最終狀態(tài)尤蛮,而是在狀態(tài)圖中永遠(yuǎn)不停的變化著媳友。這種情況也是可以進(jìn)行描述的。此時狀態(tài)機將不存在終態(tài)产捞,這種情況下狀態(tài)機將永遠(yuǎn)不停機的運轉(zhuǎn)下去醇锚。
當(dāng)然,對于實際中顯然會結(jié)束的過程坯临,最終狀態(tài)是必須的焊唬。永不停機的過程在日常生活中實際上是不存在的,因此更多的過程中終態(tài)是必不可少的看靠。
畫法
- 初始狀態(tài)使用實心圓點表示赶促。
- 終止?fàn)顟B(tài)使用實心圓點外加圓環(huán)表示。
- 還有有其他畫法挟炬,注意一套圖內(nèi)使用同一畫法即可鸥滨。
例圖
(4) 孤立的狀態(tài)不應(yīng)當(dāng)存在,所有狀態(tài)應(yīng)可以到達(dá)婿滓、可以停機
有了初始狀態(tài)和最終狀態(tài)老速,那么對于狀態(tài)機中的每一個狀態(tài)取值就有了進(jìn)一步的要求。
一個狀態(tài)機具備可遍歷性凸主,是指一個狀態(tài)機中的每個狀態(tài)取值烁峭,都存在一條從初始狀態(tài)轉(zhuǎn)移過來的流轉(zhuǎn)通路。即每一個狀態(tài)值都應(yīng)當(dāng)在某種情況下自初始狀態(tài)變化過來秕铛。如果某個狀態(tài)值不滿足這個要求约郁,那么目標(biāo)對象將永遠(yuǎn)不可能處于這個狀態(tài)。這種情況下要么是不必要的狀態(tài)但两,要么是圖畫錯了鬓梅。
一個狀態(tài)機具備可停機性,是指一個狀態(tài)機中的每個狀態(tài)取值谨湘,都存在一條道路能夠流轉(zhuǎn)到最終狀態(tài)去绽快。否則一旦對象處于了這個不能流轉(zhuǎn)到最終狀態(tài)的狀態(tài)取值上之后,便再也不能夠到達(dá)最終狀態(tài)了紧阔。對于明顯可停機的過程坊罢,這是錯誤的。
注意
- 可停機狀態(tài)機:所有狀態(tài)可達(dá)擅耽、可止活孩。
- 不停機狀態(tài)機:所有狀態(tài)可達(dá)。
錯誤例圖
(5) 應(yīng)當(dāng)區(qū)別于流程圖,討論要點是對象的狀態(tài)如何變化乃沙,而非如何執(zhí)行某種程序
流程圖著重點在于描述一個持續(xù)進(jìn)行的過程自始至終是如何進(jìn)行的起趾。而狀態(tài)圖描述一個目標(biāo)對象的狀態(tài)之間是如何相互轉(zhuǎn)化的。在一些過程的描述方面警儒,流程圖和狀態(tài)圖具有相近的描述能力训裆,可以換用。但是應(yīng)當(dāng)注意狀態(tài)圖和流程的不同之處蜀铲,在實際的運用中正確選用边琉。
兩者區(qū)別的最大之處在于描述問題的切入點間的差異:
狀態(tài)圖討論對象狀態(tài)的演變,流程圖討論程序過程的推進(jìn)蝙茶。
基于這樣的切入點之間的差異艺骂,兩者之間最為顯著的特征就是節(jié)點上的標(biāo)注名稱的區(qū)別。對于流程圖隆夯,節(jié)點一般采用動詞標(biāo)注钳恕,用以表示程序設(shè)定的動作。而狀態(tài)圖中的節(jié)點表達(dá)的是對象的狀態(tài)取值蹄衷,應(yīng)當(dāng)采用名詞忧额、形容詞、副詞進(jìn)行命名愧口。
在實際的建模中睦番,有一類場景會比較特殊。這類場景所描述的是一個業(yè)務(wù)過程的開展耍属。業(yè)務(wù)過程是一個活動性的事物托嚣,其本身便是使用動詞進(jìn)行命名的。此類過程的各個環(huán)節(jié)是整體活動的一部分厚骗,往往也需要使用動詞進(jìn)行命名示启。針對這類活動性的事物,采用狀態(tài)機進(jìn)行建模時领舰,似乎會打破前述的命名約定夫嗓,需要仔細(xì)處理。
操作中冲秽,為了突出狀態(tài)機是針對這種活動過程本身進(jìn)行建模舍咖,首先應(yīng)將這個過程整體作為一個名詞所描繪的事物來處理。一般的策略是將這類過程命名為事務(wù)锉桑。例如公文審批過程排霉,可以稱為公文審批事務(wù)。
這樣中心詞從動詞審批民轴,轉(zhuǎn)換為名詞事務(wù)郑诺。在本質(zhì)上實現(xiàn)了名詞化。之后杉武,對于事務(wù)中的各個環(huán)節(jié)辙诞,不得不采用動詞描述的,應(yīng)當(dāng)添加“前”轻抱、“中”飞涂、“后”、“未”祈搜、“已~”等前后詞綴较店,進(jìn)行副詞化。這樣便可進(jìn)行狀態(tài)圖建模了容燕。
例圖
在實際的運用中官卡,也有直接使用動詞本身作為狀態(tài)節(jié)點標(biāo)注的蝗茁,這時應(yīng)視為“~中”形式的簡化。但這種方式是不規(guī)范的寻咒,應(yīng)當(dāng)避免哮翘。
模型校驗法
在本節(jié)的最后,簡要的概括一下狀態(tài)機建模完成后的校驗方法毛秘。
一個狀態(tài)機模型饭寺,首先應(yīng)當(dāng)進(jìn)行的校驗是基本的拓?fù)浣Y(jié)構(gòu)校驗,即前文提到:
拓?fù)浣Y(jié)構(gòu)校驗
- 是否有唯一的起始節(jié)點
- 可停機狀態(tài)機是否有結(jié)束節(jié)點
- 每個節(jié)點是否都可到達(dá)
- 可停機狀態(tài)機的所有節(jié)點是否都可終止
- 瞬態(tài)是否具有唯一的叫挟、自發(fā)的流轉(zhuǎn)
其次應(yīng)進(jìn)行語義校驗艰匙,主要檢查
語義校驗
- 所有節(jié)點是否描述同一對象
- 所有節(jié)點是否有使用名詞、形容詞抹恳、副詞進(jìn)行描述
最后進(jìn)行模型完備性校驗
完備性校驗
- 預(yù)先列出的所有狀態(tài)是否均已在圖中得到體現(xiàn)
模型的完備性校驗并非機械性校驗员凝,因建模過程中可能存在縮并、拆分适秩、廢棄绊序、增加等調(diào)整,只能在一定程度上對模型的正確新提供引導(dǎo)秽荞。
上述拓?fù)浣Y(jié)構(gòu)校驗和語義校驗是檢驗狀態(tài)機建模的必要環(huán)節(jié)骤公,若校驗不通過則模型中必然存在錯誤,但校驗通過并不代表模型一定不存在錯誤扬跋。正確的建模技能更多的是建立與長期不懈的學(xué)習(xí)與訓(xùn)練的基礎(chǔ)上的阶捆。
三、常見結(jié)構(gòu)提要
狀態(tài)機作圖中钦听,常見的幾種基本結(jié)構(gòu)是有必要掌握的洒试。
1. 條件結(jié)構(gòu)
狀態(tài)機建模本身通過條件性流轉(zhuǎn)提供了條件選擇結(jié)構(gòu),這是一種自然的內(nèi)嵌結(jié)構(gòu)朴上。例如前文公文審批例圖中的“審批中”分“通過”垒棋、“否決”而流向不同的流入態(tài)。
實際上痪宰,狀態(tài)機本身的條件流轉(zhuǎn)特征在數(shù)學(xué)上是完備的叼架,任何一種需要的非并發(fā)過程均可由具有條件流轉(zhuǎn)的狀態(tài)機進(jìn)行模擬。
2. 循環(huán)結(jié)構(gòu)
將條件結(jié)構(gòu)適當(dāng)調(diào)整一下衣撬,使其中一條流轉(zhuǎn)流向當(dāng)前狀態(tài)節(jié)點的前級狀態(tài)節(jié)點乖订,形成一個環(huán)路,既可構(gòu)造循環(huán)結(jié)構(gòu)具练。前文公文審批例圖中的“決案”狀態(tài)的“重新修訂”流轉(zhuǎn)便是這樣的情況乍构。更一般的形式如下圖例。
例圖
3. 伺服結(jié)構(gòu)
在實際應(yīng)用中岂丘,有一類特殊的情況相對比較常見。對象相對較長久的出于一個特定中心狀態(tài)昔善,僅當(dāng)某些觸發(fā)性條件發(fā)生時元潘,會較為迅速的在某個狀態(tài)鏈條中進(jìn)行躍變畔乙,之后又會回到前述特定狀態(tài)君仆。若具有多個不同快速躍變的狀態(tài)鏈條,這樣就形成了伺服結(jié)構(gòu)牲距,這個特定的中心狀態(tài)稱為伺服態(tài)返咱。
例如收發(fā)室老大爺?shù)墓ぷ鳡顟B(tài)在一定簡化程度上既可視為具有伺服結(jié)構(gòu)。
例圖
此類伺服結(jié)構(gòu)在窗口服務(wù)類以及引申的服務(wù)情境下是非常常見的牍鞠。
四咖摹、結(jié)語
至此,狀態(tài)機建模方法與狀態(tài)機建模過程基本技法的介紹即告一段落难述。讀者能夠準(zhǔn)確的運用狀態(tài)機在各種工作場景中開展高效萤晴、準(zhǔn)確的建模,單單依靠本篇文章的介紹是遠(yuǎn)遠(yuǎn)不夠的胁后。而且本篇文章立足于基礎(chǔ)店读,對于狀態(tài)機模型中的并發(fā)性問題、信號傳遞問題攀芯、協(xié)同問題都沒有進(jìn)行涉足屯断,若希望有進(jìn)一步了解,可以參閱UML2.0以及其他相關(guān)的擴展閱讀內(nèi)容侣诺。
業(yè)精于勤荒于嬉殖演,在學(xué)習(xí)狀態(tài)機建模技術(shù),作者對此是深有體會的年鸳,不經(jīng)期年累月的學(xué)習(xí)趴久,在概念理解若不得到徹底的提升,是難于掌握這個技術(shù)方法的搔确。也望眾多讀者加油彼棍、共勉。
擴展閱讀
wikipedia 總是不錯的入口