邊 晶,杜 威
(長春大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長春 130022)
隨著軟件科學(xué)的不斷發(fā)展,新的應(yīng)用系統(tǒng)變得越來越復(fù)雜,這就對應(yīng)用軟件的重用提出了更高的要求,虛擬操作訓(xùn)練系統(tǒng)也存在相似的問題。在過去的系統(tǒng)建模和電子仿真中,每個(gè)仿真系統(tǒng)或數(shù)模都是獨(dú)立的,這就使各構(gòu)件不能在開發(fā)新仿真應(yīng)用時(shí)被重用。但是隨著國防現(xiàn)代化的迅速發(fā)展,仿真系統(tǒng)變得越來越復(fù)雜,如果每個(gè)仿真系統(tǒng)都從頭開發(fā),效率會(huì)很低,并且要浪費(fèi)大量的資金和原材料,開發(fā)出來的產(chǎn)品也不容易實(shí)現(xiàn)不同虛擬設(shè)備之間的聯(lián)合使用[1]。因此,有必要研究和開發(fā)虛擬操作訓(xùn)練領(lǐng)域的構(gòu)架以統(tǒng)一系統(tǒng)的建模方法,從而實(shí)現(xiàn)軟件構(gòu)架和構(gòu)件的重用。
這里所說的領(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)域。針對虛擬操作訓(xùn)練系統(tǒng)的建模問題,本文介紹了如何用領(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)仿真問題,包括統(tǒng)一建模標(biāo)準(zhǔn)、建立模型與模型驅(qū)動(dòng)之間的連接等,從實(shí)際執(zhí)行的角度來講,屬于軟件體系結(jié)構(gòu)范疇。
隨著系統(tǒng)規(guī)模和復(fù)雜度的加大,總體系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)變得比所用算法和數(shù)據(jù)結(jié)構(gòu)更加重要?,F(xiàn)在仍然沒有統(tǒng)一的軟件體系結(jié)構(gòu)的定義,一般來講,軟件體系結(jié)構(gòu)是整個(gè)軟件系統(tǒng)的總體結(jié)構(gòu),其關(guān)鍵要素在于哪種構(gòu)件能被用來建立系統(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)不同類型虛擬操作訓(xùn)練系統(tǒng)的發(fā)展。另外,很多操作設(shè)備構(gòu)件的形狀和可見行為都是相似的,因此我們可以開發(fā)一個(gè)構(gòu)件庫來促進(jìn)軟件的重用以節(jié)省開發(fā)時(shí)間和資源?;谝陨峡紤],虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)采用“構(gòu)件-構(gòu)架-對象總線”的體系結(jié)構(gòu)。
1)構(gòu)件。構(gòu)件是具有一定功能并能在軟件開發(fā)和應(yīng)用過程中被組裝和維護(hù)的基本單元。從概念上來講,構(gòu)件也是對象,可以由一個(gè)簡單對象或多個(gè)組合對象組成以實(shí)現(xiàn)一個(gè)特定對象。
2)構(gòu)架。構(gòu)件技術(shù)中的構(gòu)架是針對該問題應(yīng)用程序的部分解決方案,可以作為一種運(yùn)行和整合各構(gòu)件的構(gòu)架。在分布式系統(tǒng)中,有很多本地和遠(yuǎn)程應(yīng)用程序,構(gòu)架僅能描述一個(gè)應(yīng)用程序的整體結(jié)構(gòu),因此,對構(gòu)架的描述只能解決一部分問題。但作為相似問題的統(tǒng)一解決辦法,構(gòu)架可以作為在這些應(yīng)用中提供相同控制結(jié)構(gòu)的構(gòu)件,在不同應(yīng)用中被再次使用,因此能夠?qū)崿F(xiàn)更高程度的代碼重用。
3)對象總線。它是與中心程序相關(guān)的分布式系統(tǒng)的附屬部分。對象總線實(shí)際上是分布式互聯(lián)設(shè)備的運(yùn)行支持系統(tǒ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)件和對象的能力可被擴(kuò)展到一個(gè)開放網(wǎng)絡(luò)中。
總之,在“構(gòu)件-構(gòu)架-對象總線”體系結(jié)構(gòu)中,構(gòu)件提供軟件模塊,構(gòu)架負(fù)責(zé)將這些單元組合成一個(gè)有機(jī)的整體應(yīng)用,而對象總線完成不同構(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)件之間通過事件服務(wù)和構(gòu)架互相調(diào)用,也就是說構(gòu)件被構(gòu)架調(diào)用,而不是在構(gòu)件之間直接調(diào)用。
2)構(gòu)件和構(gòu)架共同組成了分布式系統(tǒng)單元的應(yīng)用。分布在不同系統(tǒng)單元中的各構(gòu)件是通過對象總線和構(gòu)架實(shí)現(xiàn)相互作用的。
3)通過構(gòu)件和構(gòu)架實(shí)現(xiàn)最大程度的代碼重用。
4)分布式系統(tǒng)軟件通過對象總線連接各對象,用構(gòu)架控制軟件結(jié)構(gòu),通過各構(gòu)件修改軟件功能。
基于上述“構(gòu)件-構(gòu)架-對象總線”體系結(jié)構(gòu),使用高級體系結(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)行空間并識別、注冊以及管理其接口,并通過構(gòu)件及其接口之間的相互作用建立聯(lián)系圖。當(dāng)需要從節(jié)點(diǎn)的運(yùn)行空間移出一些構(gòu)件時(shí),應(yīng)卸載并更新相關(guān)管理和處置信息。接下來操作系統(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來描述系統(tǒng)的結(jié)構(gòu)和行為,其中,靜態(tài)結(jié)構(gòu)主要由類圖表示,而動(dòng)態(tài)結(jié)構(gòu)主要用狀態(tài)圖描述。類圖是一種用類和類間關(guān)系進(jìn)行系統(tǒng)描述的插圖,是從靜態(tài)方面表示的系統(tǒng)。類圖是構(gòu)成其它示意圖的基礎(chǔ),如果沒有類圖,就不會(huì)有狀態(tài)圖或其它示意圖。狀態(tài)圖用來描述生命周期中對象處于哪種狀態(tài)、每種狀態(tài)的行為以及哪種事件可以導(dǎo)致對象狀態(tài)的變化。
對于系統(tǒng)的設(shè)計(jì),最關(guān)鍵的問題就是將類定義在什么樣的粒度。如果定義的粒度太小,系統(tǒng)構(gòu)架需要管理的構(gòu)件過多,將不利于系統(tǒng)構(gòu)架的設(shè)計(jì)和促進(jìn)系統(tǒng)的執(zhí)行;另一方面,如果定義的粒度太大,軟件重用的最終目標(biāo)就不容易實(shí)現(xiàn)了。針對不同類型的虛擬操作訓(xùn)練系統(tǒng),可以定義不同粒度的類,例如對于虛擬維護(hù)訓(xùn)練系統(tǒng),可以將類定義在聯(lián)合體類或模塊類等這種大的粒度中。本文以虛擬維護(hù)訓(xùn)練系統(tǒng)為例定義構(gòu)件類和單元類。其中,構(gòu)件類將每個(gè)實(shí)際設(shè)備的聯(lián)合體定義為一個(gè)類,系統(tǒng)將管理該類并傳送相關(guān)信息;單元類將一個(gè)實(shí)際設(shè)備單元定義為一個(gè)類,與其相關(guān)的構(gòu)件由構(gòu)件聯(lián)合體管理。從定義可以看出,我們可以用單元類實(shí)現(xiàn)系統(tǒng)構(gòu)件的重用目的。對于虛擬維護(hù)訓(xùn)練系統(tǒng),一個(gè)典型的構(gòu)件類類圖如圖2所示。
圖2 一個(gè)典型類圖
狀態(tài)圖主要用來描述對象、子系統(tǒng)和系統(tǒng)的生存周期。通過狀態(tài)圖可以知道對象能夠達(dá)到的所有狀態(tài)以及系統(tǒng)能夠響應(yīng)的所有事件。只要其狀態(tài)和復(fù)雜操作已被標(biāo)記,所有的類都應(yīng)該有狀態(tài)圖。在虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)中,因?yàn)樵氐男袨槎际窍鄬Κ?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)件的開/關(guān)狀態(tài)圖如圖3所示。
圖3 狀態(tài)圖插圖
虛擬操作訓(xùn)練領(lǐng)域仿真系統(tǒng)采用面向?qū)ο蟮脑O(shè)計(jì)方法,系統(tǒng)操作是完全建立在消息驅(qū)動(dòng)的機(jī)制之上的,因此其仿真引擎的主體功能是完成消息的傳送和仿真過程的控制。
在圖1中,我們也能看見該仿真系統(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)件的界面。通過構(gòu)件的界面,反饋信息將被傳送到虛擬構(gòu)件并引起響應(yīng)。如果發(fā)送的是本地的操作指令,仿真引擎還需要將該指令上傳至網(wǎng)絡(luò)作為遠(yuǎn)程操作指令節(jié)點(diǎn)。
如果這種“構(gòu)件-構(gòu)架-對象總線”體系結(jié)構(gòu)用于軟件開發(fā),一些必要的構(gòu)件設(shè)計(jì)完成后,對于組合電路中數(shù)字電路系統(tǒng)的設(shè)計(jì)來講,軟件開發(fā)的過程實(shí)際上是一個(gè)組裝過程。第一步是根據(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)和單一功能問題。
[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.