樊波,袁國銘,周萍,成天華
軟件工程是研究和應用如何以系統(tǒng)性的、規(guī)范化的、可定量的過程化方法去開發(fā)和維護軟件,以及如何把經(jīng)過時間考驗而證明正確的管理技術和當前能夠得到的最好的技術方法結(jié)合起來的一種軟件開發(fā)系統(tǒng)性工程。UML(Unified Modeling Language,統(tǒng)一建模語言)作為軟件工程最為重要的描述手段和工具,在整個軟件系統(tǒng)構(gòu)建工程中起到了關鍵作用。它們的關系如圖1所示:
圖1 UML設計在軟件周期中的應用
其中的用例圖、活動圖、類圖、對象圖、狀態(tài)圖、活動圖、順序圖、協(xié)作圖、構(gòu)件圖、部署圖以及數(shù)據(jù)包圖等等都是屬于UML中的設計方法圖[1-5]。
狀態(tài)圖是系統(tǒng)分析的一種重要工具,它通過建立類對象的生存周期模型來描述對象隨時間變化的動態(tài)行為。系統(tǒng)分析員在對系統(tǒng)建模時,最先考慮的不是基于活動之間的控制流,而是基于狀態(tài)之間的控制流,因為系統(tǒng)中對象的狀態(tài)變化最容易發(fā)現(xiàn)和理解。它常用到的圖符如表1所示:
表1 UML狀態(tài)圖圖符
狀態(tài)圖和活動圖都是用來描述對象的動態(tài)行為。狀態(tài)圖側(cè)重于從行為的結(jié)果來描述,也就是一個一個的狀態(tài);活動圖側(cè)重于從行為的動作來描述,也就是一個一個的活動。對于同一個行為,可以使用狀態(tài)圖和活動圖從不同的角度來描述。例如,如圖2所示:
圖2 進程的狀態(tài)圖和活動圖
圖 2中分別用活動圖和狀態(tài)圖描述了一個進程的工作過程和狀態(tài)變化,該進程完成一個典型的計算過程,即:輸入數(shù)據(jù)、計算、輸出結(jié)果。其中圖2的(b)圖的活動圖比較好理解,進程從起點開始分別執(zhí)行“輸入數(shù)據(jù)”、“計算”和“輸出結(jié)果”這3個活動,然后結(jié)束該進程。活動圖雖然比較好理解,但是它只側(cè)重動作的描述,并不能反映實際系統(tǒng)的變化。圖 2(a)是該進程的狀態(tài)圖,首先進程得到處理器后,變成“運行”狀態(tài);當需要輸入數(shù)據(jù)時,進程提出輸入要求,進入“阻塞”狀態(tài);輸入數(shù)據(jù)完成后,進程進入“就緒”狀態(tài);等到進程再次被調(diào)度占有處理器時進程的狀態(tài)變?yōu)椤斑\行”,進程進行相應的計算處理;得到計算結(jié)果后,進程提出輸出請求,進入“阻塞”狀態(tài);輸出結(jié)果完成后,進程進入“就緒”狀態(tài);等到進程又一次被調(diào)動占有處理器,這時進程的狀態(tài)變?yōu)椤斑\行”,進程運行結(jié)束。狀態(tài)圖主要反映了動作對于系統(tǒng)產(chǎn)生的影響,反映了系統(tǒng)中類和對象屬性的實際變化,對于設計和實現(xiàn)人員理解系統(tǒng)的內(nèi)部狀態(tài)有很大的作用。
行為圖主要用于描述系統(tǒng)的動態(tài)模型和組成對象間的交互關系,包括狀態(tài)圖和活動圖。其中狀態(tài)圖描述類的對象所有可能的狀態(tài)以及事件發(fā)生時狀態(tài)的轉(zhuǎn)移條件。通常,狀態(tài)圖是對類圖的補充。在實際中并不需要為所有的類畫狀態(tài)圖,僅需為那些有多個狀態(tài)其行為受外界環(huán)境的影響并且發(fā)生改變的類畫狀態(tài)圖。而活動圖描述滿足用例要求所要進行的活動以及活動間的約束關系,有利于識別并行活動[6-10]。
狀態(tài)圖一般用于對系統(tǒng)中的某些對象,比如類、用例和系統(tǒng)的行為建模。建模的時候要找出對象所處的狀態(tài)、觸發(fā)狀態(tài)改變的動作,以及對象狀態(tài)改變時應該執(zhí)行的動作。具體的建模步驟如下:
(1)找出適合用模型描述其行為的類;
(2)確定對象可能存在的狀態(tài);
(3)確定引起狀態(tài)轉(zhuǎn)換的事件;
(4)確定轉(zhuǎn)換進行時對象執(zhí)行的相應動作;
(5)對建模的結(jié)果進行相應的精化和細化。
(1)找出證券交易系統(tǒng)涉及類
根據(jù)狀態(tài)圖建模設計的步驟要求,分析證券交易系統(tǒng),發(fā)現(xiàn)本系統(tǒng)一共涉及以下幾個類(對象):股票,股民,證券系統(tǒng),上市公司,證監(jiān)會,銀行和證券營業(yè)所。
下面主要就股民和股票兩個類進行狀態(tài)圖的繪制。
(1)股民的狀態(tài)分析
股民一般指從事股票交易的個人投資者,一般公民一旦進入證券交易所開戶就成為股民。股民一般包括兩種狀態(tài):不含有股票和持有股票狀態(tài),在此為了方便區(qū)分,把持有股票狀態(tài)的股民稱為“股東”,開戶而未買入股票狀態(tài)的稱為股民。
(2)狀態(tài)圖的描述
通過對股票在證券交易系統(tǒng)中可能的狀態(tài)分析,我們繪制狀態(tài)圖如圖3所示:
圖3 股民狀態(tài)圖及交易子圖
(a)圖為股民整體的狀態(tài)圖,(b)圖為股民一天交易子狀態(tài)的狀態(tài)圖。
判斷兩個不同狀態(tài)之間的轉(zhuǎn)換的觸發(fā)事件(動作):買入股票,由股民變成了股東;賣出全部股票,又由股東變成了股民。如果是復合狀態(tài),就應該觀察其子狀態(tài)圖,子狀態(tài)圖是復合狀態(tài)圖的展開,如圖 3(b)所示:注釋告訴我們這是股民一天的交易狀態(tài)圖,圖中有一個“ ”圖符,表明股東交易是從上一個交易日結(jié)束算起,再進行“買入股票”或者“賣出部分股票”動作,進入今天交易狀態(tài)?!?”表明股東可以進行多次交易。
從開始到結(jié)束將狀態(tài)圖按箭頭指向梳理一遍:通過“開戶”動作“進入股市”,成為“股民”,再通過“買入股票”成為某個上市公司的“股東”,“買入/賣出”交易可以循環(huán)進行。直到股民到證券所要求“退戶”,辦理了相關手續(xù)后“退出股市”。
(1)股票的狀態(tài)分析
股票是國家正大力提倡的一種金融投資工具,下面分析一般股票的幾個狀態(tài):
配送階段:公司在準備上市過程中,會根據(jù)證券法規(guī)的要求,分配一些原始股票給相關人員,我們把這階段的股票叫做“原始股票”,通常它的價格比較低。
股票自由交易:當公司獲準上市時,他會選擇某個交易時間正式“上市股票發(fā)行”,進而股票進入“自由交易”狀態(tài)。通常,由于中國特殊的國情,股票在定發(fā)行價時會有一個 10%~20%范圍的讓利(與他們根據(jù)財務報表算出來的價格比較)。這在中國叫做“打新股”,通常90%的新上市股票都會在上市第一天價格上漲超過10%的漲停幅度(新股第一天,沒有漲跌幅的限制)。進入自由交易狀態(tài)后,有如下幾種狀態(tài):
1)交易時間狀態(tài)
這是指股票正常交易時間段,股票處于自由交易狀態(tài)(或買或賣),在中國交易時間為周一到周五:上午9:30~11:30;下午13:00~15:00;當然,此時的股票交易是受到監(jiān)查的,如果異動太大,會實施緊急停牌。比如說:連續(xù)多個交易時漲停或是跌停;首個交易日漲跌太大。
2)非交易時間狀態(tài)
其它的時間,股票不交易,但股民可隨時登錄證券系統(tǒng)查看股票已披露信息。在這段時間,上市公司通常完成對股票的分紅,送股,增股,擴股(如果有的話),證券系統(tǒng)也會進行一些系統(tǒng)的維護工作:比如統(tǒng)計數(shù)據(jù),更新或維修系統(tǒng)。
3)交易停止:
當股票交易出現(xiàn)異動被證監(jiān)會下令實施“停牌”接受調(diào)查;上市公司召開股東大會;股票進入股改程序,股票在正常交易時間同樣不能交易。通常直到證監(jiān)會發(fā)出復牌指令之后,股票才進入交易狀態(tài)。
4)ST股票狀態(tài):
當上市公司連續(xù)兩年公布的財務報表都虧損時,證監(jiān)會按相關法規(guī),對對應股票進行“ST”警告處理。它的交易規(guī)則發(fā)生變化,比如:價格的漲跌幅為+5%或-5%(正常股票在中國為+10%和-10%),它的交易方式不變化,同時,它會受到證監(jiān)會的更為嚴厲的監(jiān)查。
5)股票退出二級市場
通常,在股票退出二級市場之前,還有一個一年的機會期,在此期間如果公司情況好轉(zhuǎn),年終的財務報表不虧損,按規(guī)定將重新返回交易時間狀態(tài)或非交易時間狀態(tài)等,但虧損嚴重,按規(guī)定就退出二級股票市場。股民為此應該額外小心!但中國目前退市情況極為罕見。
股票市場上,股票的可能狀態(tài)全都在此展現(xiàn),它們彼此轉(zhuǎn)換的活動也都表示了出來,本例的分析到此為止。
(2)狀態(tài)圖描述
通過對股票在證券交易系統(tǒng)中可能的狀態(tài)分析,我們繪制狀態(tài)圖如圖4所示:
圖4 股票自由交易狀態(tài)圖
圖4(a)圖為股票整體的狀態(tài)圖,圖4(b)圖為股票交易子狀態(tài)的狀態(tài)圖。需要注意圖中沒有繪出ST股票,但有正常股票的“交易停止”狀態(tài),因為它們的觸發(fā)機制一致,故而沒有重新繪出。
從圖4中可以看出一個股票的狀態(tài)變化過程:公司在上市準備階段,進行原始股票的配置,一旦上市發(fā)行,就進入股票自由交易狀態(tài),在交易過程中,出現(xiàn)非法交易,由證券系統(tǒng)按規(guī)定實施停牌,直到調(diào)查完畢。連續(xù)兩年虧損的上市公司,將被證券系統(tǒng)加上“ST”符號,表示“警告退市”。如果一年以后的財務報表依然沒有改變,將實施退市。
在實際的項目中,同一個對象不同的人在分析過程中,得到的狀態(tài)和事件可能不相同,這是正常的。對象狀態(tài)的個數(shù)與分析的詳細程度有關,另外還和用戶的要求有關。不過,只要能夠滿足用戶要求就可以了。
軟件工程設計是一項系統(tǒng)工程,其中包括了用例圖、活動圖、狀態(tài)圖、類圖等在內(nèi)的多種軟件設計和開發(fā)模型,為了提高軟件開發(fā)者的程序開發(fā)效率,通過UML的多種不同工具共同完成了軟件開發(fā)的系統(tǒng)工程,其中如用例圖、活動圖等工具的使用,為軟件設計后續(xù)的詳細設計以及程序開發(fā)明確了前行的具體方向,提高了效率。
狀態(tài)圖是用來建模對象是如何改變其狀態(tài)的一種有用建模圖形。狀態(tài)定義為對象行為在某一時刻的快照(Snapshot)或者轉(zhuǎn)折點(Milestone),對于單個對象行為改變,狀態(tài)圖相對于活動圖有其天然優(yōu)勢。尤其在如下系統(tǒng)中,比如:針對病人的醫(yī)療系統(tǒng),針對醫(yī)院管理的醫(yī)院績效管理系統(tǒng)的開發(fā)和設計。狀態(tài)圖與活動圖的組合使用在可以預見的將來還將一直持續(xù)下去[11-17]。
[1] Fowler,M. UML精粹: 標準對象建模語言簡明指南(第3版)[M]. 北京:電子工業(yè)出版社,2012.
[2] 宋國順.軟件工程中UML建模的技術與分析[J].軟件導刊,2010,8:50-54.
[3] Larman,C. UML和模式應用(第 3版)[M].北京:機械工業(yè)出版社,2006.
[4] 袁國銘,李洪奇,樊波.關于知識工程的發(fā)展綜述[J].計算技術與自動化,2011,30(1):138-143.
[5] 袁國銘,劉瑞,樊波,等.UML用例圖在軟件工程中的步驟設計研究[J].微型電腦應用,2014,30(1):46-48.
[6] 樊波,袁國銘,成天華. UML活動圖在軟件工程設計中的應用研究[J].網(wǎng)絡新媒體技術,2015,4(6):41-46.
[7] 鄭山海.用意“美好”實現(xiàn)難[J].中國衛(wèi)生, 2015,9:52-53.
[8] 王明曉.醫(yī)院院長必備十大技能[J].中國衛(wèi)生,2015,4:64-66.
[9] 鄭山海.重慶事件與醫(yī)保盲區(qū)[J].中國衛(wèi)生,2015,5:50-52.
[10] 樊波,袁國銘.中國中央衛(wèi)生行政機構(gòu)發(fā)展簡史[J].中華醫(yī)學圖書情報雜志,2014,3:31-33.
[11] 王明曉.以“霍桑試驗”和“鲇魚效應”激活醫(yī)院人力資源管理[J].醫(yī)院院長論壇-首都醫(yī)科大學學報(社會科學版),2014,2:40-42.
[12] 王明曉.建立股份制醫(yī)院的理論探討[J].中華醫(yī)院管理雜志,1988,12(06):338-340.
[13] 王明曉,高艷. 戰(zhàn)略管理與醫(yī)院員工培訓[J].中華醫(yī)院管理雜志,2007,12(06):427-428.
[14] 單文衛(wèi).新醫(yī)改背景下公立醫(yī)院績效管理模式的研究[J].醫(yī)學與社會,2012,25(01):58-60.
[15] 王明曉.實事求是科學決策[J].中國衛(wèi)生產(chǎn)業(yè),2009,12:23-25.
[16] 王明曉.新醫(yī)改方案也要在實踐中不斷完善[J].中國醫(yī)院,2007,9:28-30.
[17] 王明曉.公立醫(yī)院在堅持公益性中艱難前行[J].醫(yī)院院長論壇,2009,3:5-7.