邊 晶,杜 威
(長(zhǎng)春大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長(zhǎng)春 130022)
隨著軟件科學(xué)的不斷發(fā)展,新的應(yīng)用系統(tǒng)變得越來(lái)越復(fù)雜,這就對(duì)應(yīng)用軟件的重用提出了更高的要求,虛擬操作訓(xùn)練系統(tǒng)也存在相似的問(wèn)題。在過(guò)去的系統(tǒng)建模和電子仿真中,每個(gè)仿真系統(tǒng)或數(shù)模都是獨(dú)立的,這就使各構(gòu)件不能在開(kāi)發(fā)新仿真應(yīng)用時(shí)被重用。但是隨著國(guó)防現(xiàn)代化的迅速發(fā)展,仿真系統(tǒng)變得越來(lái)越復(fù)雜,如果每個(gè)仿真系統(tǒng)都從頭開(kāi)發(fā),效率會(huì)很低,并且要浪費(fèi)大量的資金和原材料,開(kāi)發(fā)出來(lái)的產(chǎn)品也不容易實(shí)現(xiàn)不同虛擬設(shè)備之間的聯(lián)合使用[1]。因此,有必要研究和開(kāi)發(fā)虛擬操作訓(xùn)練領(lǐng)域的構(gòu)架以統(tǒng)一系統(tǒng)的建模方法,從而實(shí)現(xiàn)軟件構(gòu)架和構(gòu)件的重用。
這里所說(shuō)的領(lǐng)域指的是一組涵蓋相似軟件需求應(yīng)用系統(tǒng)的功能領(lǐng)域。領(lǐng)域工程是建立基礎(chǔ)能力和基本原則的相似系統(tǒng)應(yīng)用工程,涵蓋了建立重用軟件構(gòu)件的所有活動(dòng)[3]。虛擬操作訓(xùn)練系統(tǒng)是一種領(lǐng)域應(yīng)用系統(tǒng),包含虛擬設(shè)備訓(xùn)練、維護(hù)訓(xùn)練等特定領(lǐng)域。針對(duì)虛擬操作訓(xùn)練系統(tǒng)的建模問(wèn)題,本文介紹了如何用領(lǐng)域建模思想和COM構(gòu)件技術(shù)設(shè)計(jì)一種虛擬操作訓(xùn)練領(lǐng)域應(yīng)用構(gòu)架,使用戶更容易快速制造出基于該構(gòu)架的實(shí)用仿真模型。本文按如下幾個(gè)部分進(jìn)行介紹:第1部分介紹基于UML的虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)構(gòu)架設(shè)計(jì);第2部分介紹仿真系統(tǒng)的靜態(tài)和動(dòng)態(tài)結(jié)構(gòu);第3部分介紹系統(tǒng)仿真引擎的設(shè)計(jì);第4部分進(jìn)行總結(jié)。
設(shè)計(jì)該系統(tǒng)構(gòu)架是為了使用構(gòu)件技術(shù)解決虛擬操作訓(xùn)練領(lǐng)域的系統(tǒng)仿真問(wèn)題,包括統(tǒng)一建模標(biāo)準(zhǔn)、建立模型與模型驅(qū)動(dòng)之間的連接等,從實(shí)際執(zhí)行的角度來(lái)講,屬于軟件體系結(jié)構(gòu)范疇。
隨著系統(tǒng)規(guī)模和復(fù)雜度的加大,總體系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)變得比所用算法和數(shù)據(jù)結(jié)構(gòu)更加重要。現(xiàn)在仍然沒(méi)有統(tǒng)一的軟件體系結(jié)構(gòu)的定義,一般來(lái)講,軟件體系結(jié)構(gòu)是整個(gè)軟件系統(tǒng)的總體結(jié)構(gòu),其關(guān)鍵要素在于哪種構(gòu)件能被用來(lái)建立系統(tǒng),以及構(gòu)件之間如何相互連接和相互作用,所有這些方面的選擇決定了軟件體系結(jié)構(gòu)的不同風(fēng)格。虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)采用面向?qū)ο蟮脑O(shè)計(jì)思想,因此可以使用面向?qū)ο蟮捏w系結(jié)構(gòu)。
虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)設(shè)計(jì)的目的在于建立一個(gè)統(tǒng)一的軟件體系結(jié)構(gòu)和相應(yīng)發(fā)展規(guī)范,以促進(jìn)不同類(lèi)型虛擬操作訓(xùn)練系統(tǒng)的發(fā)展。另外,很多操作設(shè)備構(gòu)件的形狀和可見(jiàn)行為都是相似的,因此我們可以開(kāi)發(fā)一個(gè)構(gòu)件庫(kù)來(lái)促進(jìn)軟件的重用以節(jié)省開(kāi)發(fā)時(shí)間和資源。基于以上考慮,虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)采用“構(gòu)件-構(gòu)架-對(duì)象總線”的體系結(jié)構(gòu)。
1)構(gòu)件。構(gòu)件是具有一定功能并能在軟件開(kāi)發(fā)和應(yīng)用過(guò)程中被組裝和維護(hù)的基本單元。從概念上來(lái)講,構(gòu)件也是對(duì)象,可以由一個(gè)簡(jiǎn)單對(duì)象或多個(gè)組合對(duì)象組成以實(shí)現(xiàn)一個(gè)特定對(duì)象。
2)構(gòu)架。構(gòu)件技術(shù)中的構(gòu)架是針對(duì)該問(wèn)題應(yīng)用程序的部分解決方案,可以作為一種運(yùn)行和整合各構(gòu)件的構(gòu)架。在分布式系統(tǒng)中,有很多本地和遠(yuǎn)程應(yīng)用程序,構(gòu)架僅能描述一個(gè)應(yīng)用程序的整體結(jié)構(gòu),因此,對(duì)構(gòu)架的描述只能解決一部分問(wèn)題。但作為相似問(wèn)題的統(tǒng)一解決辦法,構(gòu)架可以作為在這些應(yīng)用中提供相同控制結(jié)構(gòu)的構(gòu)件,在不同應(yīng)用中被再次使用,因此能夠?qū)崿F(xiàn)更高程度的代碼重用。
3)對(duì)象總線。它是與中心程序相關(guān)的分布式系統(tǒng)的附屬部分。對(duì)象總線實(shí)際上是分布式互聯(lián)設(shè)備的運(yùn)行支持系統(tǒng),被稱(chēng)為分布式系統(tǒng)的中間件,有時(shí)為分布式系統(tǒng)提供基礎(chǔ)支持,是一個(gè)特殊裝置。它使應(yīng)用程序中的各構(gòu)件和構(gòu)架能夠調(diào)用分布式環(huán)境中其它構(gòu)件和構(gòu)架的服務(wù)和功能,因此構(gòu)件和對(duì)象的能力可被擴(kuò)展到一個(gè)開(kāi)放網(wǎng)絡(luò)中。
總之,在“構(gòu)件-構(gòu)架-對(duì)象總線”體系結(jié)構(gòu)中,構(gòu)件提供軟件模塊,構(gòu)架負(fù)責(zé)將這些單元組合成一個(gè)有機(jī)的整體應(yīng)用,而對(duì)象總線完成不同構(gòu)架和構(gòu)件間服務(wù)的透明調(diào)用,因此可以實(shí)現(xiàn)網(wǎng)絡(luò)中各節(jié)點(diǎn)的分布式應(yīng)用?;谶@種構(gòu)件設(shè)計(jì)思想,分布式應(yīng)用系統(tǒng)具有如下特征:
1)各構(gòu)件之間通過(guò)事件服務(wù)和構(gòu)架互相調(diào)用,也就是說(shuō)構(gòu)件被構(gòu)架調(diào)用,而不是在構(gòu)件之間直接調(diào)用。
2)構(gòu)件和構(gòu)架共同組成了分布式系統(tǒng)單元的應(yīng)用。分布在不同系統(tǒng)單元中的各構(gòu)件是通過(guò)對(duì)象總線和構(gòu)架實(shí)現(xiàn)相互作用的。
3)通過(guò)構(gòu)件和構(gòu)架實(shí)現(xiàn)最大程度的代碼重用。
4)分布式系統(tǒng)軟件通過(guò)對(duì)象總線連接各對(duì)象,用構(gòu)架控制軟件結(jié)構(gòu),通過(guò)各構(gòu)件修改軟件功能。
基于上述“構(gòu)件-構(gòu)架-對(duì)象總線”體系結(jié)構(gòu),使用高級(jí)體系結(jié)構(gòu)HLA中的RTI作為總線[4,5],用COM構(gòu)件技術(shù)和面向?qū)ο蟮姆椒?,虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)的構(gòu)架設(shè)計(jì)如圖1所示。
圖1 虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)的構(gòu)架
首先,在運(yùn)行時(shí),當(dāng)虛擬設(shè)備構(gòu)件管理模塊需要一些構(gòu)件時(shí),會(huì)將構(gòu)件裝入運(yùn)行空間并識(shí)別、注冊(cè)以及管理其接口,并通過(guò)構(gòu)件及其接口之間的相互作用建立聯(lián)系圖。當(dāng)需要從節(jié)點(diǎn)的運(yùn)行空間移出一些構(gòu)件時(shí),應(yīng)卸載并更新相關(guān)管理和處置信息。接下來(lái)操作系統(tǒng)將為虛擬構(gòu)件提供信息,從而決定操作指令并將其發(fā)送到系統(tǒng)的仿真引擎,然后系統(tǒng)引擎將分析該操作指令并調(diào)用虛擬構(gòu)件接口進(jìn)行響應(yīng)。
虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)的所有應(yīng)用系統(tǒng)都能表示為靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)結(jié)構(gòu)兩個(gè)方面。本文用UML來(lái)描述系統(tǒng)的結(jié)構(gòu)和行為,其中,靜態(tài)結(jié)構(gòu)主要由類(lèi)圖表示,而動(dòng)態(tài)結(jié)構(gòu)主要用狀態(tài)圖描述。類(lèi)圖是一種用類(lèi)和類(lèi)間關(guān)系進(jìn)行系統(tǒng)描述的插圖,是從靜態(tài)方面表示的系統(tǒng)。類(lèi)圖是構(gòu)成其它示意圖的基礎(chǔ),如果沒(méi)有類(lèi)圖,就不會(huì)有狀態(tài)圖或其它示意圖。狀態(tài)圖用來(lái)描述生命周期中對(duì)象處于哪種狀態(tài)、每種狀態(tài)的行為以及哪種事件可以導(dǎo)致對(duì)象狀態(tài)的變化。
對(duì)于系統(tǒng)的設(shè)計(jì),最關(guān)鍵的問(wèn)題就是將類(lèi)定義在什么樣的粒度。如果定義的粒度太小,系統(tǒng)構(gòu)架需要管理的構(gòu)件過(guò)多,將不利于系統(tǒng)構(gòu)架的設(shè)計(jì)和促進(jìn)系統(tǒng)的執(zhí)行;另一方面,如果定義的粒度太大,軟件重用的最終目標(biāo)就不容易實(shí)現(xiàn)了。針對(duì)不同類(lèi)型的虛擬操作訓(xùn)練系統(tǒng),可以定義不同粒度的類(lèi),例如對(duì)于虛擬維護(hù)訓(xùn)練系統(tǒng),可以將類(lèi)定義在聯(lián)合體類(lèi)或模塊類(lèi)等這種大的粒度中。本文以虛擬維護(hù)訓(xùn)練系統(tǒng)為例定義構(gòu)件類(lèi)和單元類(lèi)。其中,構(gòu)件類(lèi)將每個(gè)實(shí)際設(shè)備的聯(lián)合體定義為一個(gè)類(lèi),系統(tǒng)將管理該類(lèi)并傳送相關(guān)信息;單元類(lèi)將一個(gè)實(shí)際設(shè)備單元定義為一個(gè)類(lèi),與其相關(guān)的構(gòu)件由構(gòu)件聯(lián)合體管理。從定義可以看出,我們可以用單元類(lèi)實(shí)現(xiàn)系統(tǒng)構(gòu)件的重用目的。對(duì)于虛擬維護(hù)訓(xùn)練系統(tǒng),一個(gè)典型的構(gòu)件類(lèi)類(lèi)圖如圖2所示。
圖2 一個(gè)典型類(lèi)圖
狀態(tài)圖主要用來(lái)描述對(duì)象、子系統(tǒng)和系統(tǒng)的生存周期。通過(guò)狀態(tài)圖可以知道對(duì)象能夠達(dá)到的所有狀態(tài)以及系統(tǒng)能夠響應(yīng)的所有事件。只要其狀態(tài)和復(fù)雜操作已被標(biāo)記,所有的類(lèi)都應(yīng)該有狀態(tài)圖。在虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)中,因?yàn)樵氐男袨槎际窍鄬?duì)獨(dú)立的,因此可以動(dòng)態(tài)地模擬構(gòu)件行為。在使用仿真系統(tǒng)完成各種不同訓(xùn)練任務(wù)的情況下,每種狀態(tài)中構(gòu)件的狀態(tài)轉(zhuǎn)換都是不同的,因此,如果有必要,每個(gè)訓(xùn)練環(huán)境中的構(gòu)件聯(lián)合體都應(yīng)該有一個(gè)狀態(tài)圖。一些設(shè)備及其構(gòu)件的開(kāi)/關(guān)狀態(tài)圖如圖3所示。
圖3 狀態(tài)圖插圖
虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)采用面向?qū)ο蟮脑O(shè)計(jì)方法,系統(tǒng)操作是完全建立在消息驅(qū)動(dòng)的機(jī)制之上的,因此其仿真引擎的主體功能是完成消息的傳送和仿真過(guò)程的控制。
在圖1中,我們也能看見(jiàn)該仿真系統(tǒng)仿真引擎的功能結(jié)構(gòu)。當(dāng)仿真引擎接到本地用戶的操作指令或網(wǎng)絡(luò)中的遠(yuǎn)程操作指令,它會(huì)根據(jù)系統(tǒng)的狀態(tài)圖進(jìn)行指令的分析,并生成反饋信息發(fā)送給虛擬構(gòu)件作為響應(yīng),然后,仿真引擎將調(diào)用虛擬管理構(gòu)件以便在反饋信息中獲得目標(biāo)構(gòu)件的界面。通過(guò)構(gòu)件的界面,反饋信息將被傳送到虛擬構(gòu)件并引起響應(yīng)。如果發(fā)送的是本地的操作指令,仿真引擎還需要將該指令上傳至網(wǎng)絡(luò)作為遠(yuǎn)程操作指令節(jié)點(diǎn)。
如果這種“構(gòu)件-構(gòu)架-對(duì)象總線”體系結(jié)構(gòu)用于軟件開(kāi)發(fā),一些必要的構(gòu)件設(shè)計(jì)完成后,對(duì)于組合電路中數(shù)字電路系統(tǒng)的設(shè)計(jì)來(lái)講,軟件開(kāi)發(fā)的過(guò)程實(shí)際上是一個(gè)組裝過(guò)程。第一步是根據(jù)構(gòu)架尋找可重用構(gòu)件,然后根據(jù)具體要求組裝所有構(gòu)件,最后,每一個(gè)構(gòu)件可以利用事件和消息裝置構(gòu)成綜合的應(yīng)用程序,這樣,軟件的構(gòu)件結(jié)構(gòu)就能夠?qū)崿F(xiàn)代碼重用甚至是構(gòu)件的組裝,以實(shí)現(xiàn)不同的訓(xùn)練功能,因此這種體系結(jié)構(gòu)的應(yīng)用能夠解決現(xiàn)存設(shè)備仿真器中不規(guī)則結(jié)構(gòu)和單一功能問(wèn)題。
[1] 桑大勇,王瑛.基于構(gòu)架的軟件重用技術(shù)綜述[J].空軍工程大學(xué)學(xué)報(bào)(自然科學(xué)版),2000, 1(5): 84-86.
[2] 莫世峰, 何賢江, 王秉中.一種總線型軟件體系結(jié)構(gòu)的設(shè)計(jì)與應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2004, 24(5): 98-101.
[3] 王興武, 宋雨.基于構(gòu)件/構(gòu)架復(fù)用技術(shù)的仿真系統(tǒng)軟件研究[J].華北電力大學(xué)學(xué)報(bào),2003, 30(6): 63-66.
[4] 謝衛(wèi)平, 鄧蘇, 沙基昌, 劉忠.基于構(gòu)件技術(shù)的HLA仿真[J].計(jì)算機(jī)工程與應(yīng)用, 2002,38(3): 114-116.