桂林長海發(fā)展有限責(zé)任公司 勞憲銀
?
基于插件式的軟件總線構(gòu)件平臺的設(shè)計
桂林長海發(fā)展有限責(zé)任公司 勞憲銀
【摘要】本文開發(fā)的基于插件式的軟件總線構(gòu)件平臺主要為電子對抗、指揮控制等軍用軟件搭建系統(tǒng)框架,滿足現(xiàn)代軍用軟件的開發(fā)周期短、可擴(kuò)展性和可維護(hù)性強(qiáng)的迫切需求?;诓寮降能浖偩€構(gòu)件平臺采用插件體系結(jié)構(gòu)和軟件總線技術(shù)設(shè)計,該平臺的復(fù)用,可大大縮短軟件的開發(fā)周期,增強(qiáng)軟件的復(fù)用性、擴(kuò)展性和維護(hù)性,同時可節(jié)省出傳統(tǒng)的軟件開發(fā)方法所開發(fā)的軟件在前期系統(tǒng)框架設(shè)計、后期軟件維護(hù)所需要投入的大量人力物力。
【關(guān)鍵詞】插件;軟件總線;復(fù)用;體系結(jié)構(gòu);Qt
傳統(tǒng)的電子對抗、指揮控制等軍用軟件通常都是單一模塊的執(zhí)行程序,開發(fā)時往往采用自頂向下逐層細(xì)分劃分為單個小模塊進(jìn)行開發(fā)。在出現(xiàn)新的需求時,由于軟件較為簡單,即使全部重新開發(fā),也相對容易。然而,隨著計算機(jī)技術(shù)和軍用軟件應(yīng)用的發(fā)展,軟件任務(wù)需求變得多樣化、復(fù)雜化,完整開發(fā)出一個軟件或系統(tǒng)需要大量的人力物力,需要很長的軟件開發(fā)周期,而且當(dāng)前軟件更新?lián)Q代的要求越來越頻繁,傳統(tǒng)的軟件開發(fā)方法在現(xiàn)代的復(fù)雜化、多樣化需求下顯得力不從心,所以我們需要尋找一種更好的軟件體系結(jié)構(gòu)和開發(fā)方法。
基于插件式的軟件總線構(gòu)件平臺是一種比較靈活、通用的軟件體系結(jié)構(gòu),它采用“平臺+插件”設(shè)計模式,將軟件通用功能和擴(kuò)展機(jī)制的程序應(yīng)用框架設(shè)計成平臺,而軟件其他功能分散到插件中來完成,插件可動態(tài)地加載到平臺上,也可被自由地卸載和替換。因此,它不但大大提高軟件開發(fā)的開發(fā)效率,降低設(shè)計開發(fā)難度,而且,縮短了軟件開發(fā)周期,增強(qiáng)了軟件的可運行性和可維護(hù)性。
2.1插件體系結(jié)構(gòu)
插件是按照預(yù)定接口實現(xiàn)的軟件功能構(gòu)件。軟件可在運行時動態(tài)加載插件并執(zhí)行其功能。插件體系結(jié)構(gòu)的軟件由一個插件管理平臺和多個完成子功能的插件組成,如圖1所示。
圖1 插件體系結(jié)構(gòu)
插件管理平臺:主要實現(xiàn)軟件中的通用功能和擴(kuò)展機(jī)制的程序應(yīng)用框架,可以插入不同的插件,接受插件提供的服務(wù)并提供給用戶,是整個系統(tǒng)的基礎(chǔ)和主干。
插件:按照程序應(yīng)用框架的規(guī)格要求實現(xiàn)軟件其他功能,并能夠動態(tài)地插入到軟件系統(tǒng)中,完善系統(tǒng)整體功能,是插件系統(tǒng)的重要組成部分。
接口:是使插件管理平臺和插件能夠互相結(jié)合工作而制定的一套標(biāo)準(zhǔn)和協(xié)議,它是一個邏輯上的接口,由插件管理平臺和插件各完成一部分,它們共同完成插件的加載、調(diào)用、卸載以及插件管理平臺與插件以及插件與插件之間的交互,是插件系統(tǒng)中的重要組成部分。
2.2軟件總線技術(shù)
軟件總線是一條虛擬的數(shù)據(jù)傳輸線,是硬件總線的映射,是軟件系統(tǒng)中各構(gòu)件的集成框架。它為系統(tǒng)內(nèi)各構(gòu)件之間的信息交換提供虛擬的公共數(shù)據(jù)通道和接口服務(wù)。只要符合其所制定的接口標(biāo)準(zhǔn)的構(gòu)件都能夠?qū)崿F(xiàn)即插即用。
對軟件總線的設(shè)計主要考慮4個基本要素:模塊間的數(shù)據(jù)通信、構(gòu)件的調(diào)度和管理策略、軟件總線的管理策略、軟總線和構(gòu)件庫的接口策略。針對軟件總線設(shè)計應(yīng)解決的基本要素,軟件總線的設(shè)計應(yīng)實現(xiàn)以下4個功能模塊:
數(shù)據(jù)通信模塊:該模塊主要用于協(xié)調(diào)各個“接插”在軟件總線上的由不同語言編寫、不同環(huán)境下運行、不同開發(fā)商提供的異夠構(gòu)件之間的信息交互。
構(gòu)件調(diào)度模塊:該模塊主要通過軟件總線實現(xiàn)對構(gòu)件的調(diào)用、安裝、卸載,完成對構(gòu)件庫的管理。
總線管理模塊:該模塊主要實現(xiàn)操作系統(tǒng)與構(gòu)件庫間通信和數(shù)據(jù)交換、數(shù)據(jù)傳遞的合理分配和控制使用。
接口控制模塊:該模塊主要用來解決軟件總線和構(gòu)件的接口問題,完成構(gòu)件同軟件總線間的信息交互,實現(xiàn)操作系統(tǒng)對構(gòu)件庫的管理和控制、構(gòu)件之間的互相通信、數(shù)據(jù)和信息的傳送。
軟件總線的總體結(jié)構(gòu)框架如圖2所示。
圖2 軟件總線框架
本文開發(fā)的基于插件式的軟件總線構(gòu)件平臺主要為電子對抗、指揮控制等軍用軟件搭建系統(tǒng)框架,提供插件管理、總線通信、界面布局管理等功能,實現(xiàn)系統(tǒng)中必需的通用功能和擴(kuò)展機(jī)制的程序應(yīng)用框架。
3.1插件管理
插件管理主要提供以下幾方面的功能:
插件的注冊和反注冊。插件在使用前需要注冊,例如ActiveX控件,必須注冊才能使用。插件只有成功注冊后,平臺才能正確找到插件的路徑,并對其初始化。平臺可以對已注冊但當(dāng)前不再的插件進(jìn)行反注冊。
插件的加載和卸載。平臺能夠根據(jù)用戶的需求,可對已注冊但暫時不需使用的插件進(jìn)行加載或卸載。
插件基本信息的顯示。平臺能顯示插件的版本、版權(quán)等信息。
3.2總線通信
實現(xiàn)插件之間的通信管理功能。為整個系統(tǒng)的運行提供全面的通信能力。
3.3界面布局管理
實現(xiàn)系統(tǒng)界面的管理功能。為整個系統(tǒng)的界面配置及控制提供管理能力。
平臺主要由插件管理子系統(tǒng)、總線通信管理子系統(tǒng)、界面布局子系統(tǒng)組成。平臺整體結(jié)構(gòu)設(shè)計如圖3所示。
圖3 平臺整體結(jié)構(gòu)
平臺總體框架設(shè)計如圖4所示,平臺基于插件形式設(shè)計,插件間的通信主要由總線通信子系統(tǒng)實現(xiàn),界面布局管理子系統(tǒng)以插件形式加載到平臺,由插件管理子系統(tǒng)對插件進(jìn)行管理。核心插件(Core Plugin)負(fù)責(zé)整個平臺界面的初始化工作,界面的布局由界面管理子系統(tǒng)負(fù)責(zé)。
圖4 平臺總體框架
5.1插件管理子系統(tǒng)設(shè)計
插件管理子系統(tǒng)的工作原理如圖5所示,插件管理器在加載插件之前首先獲取插件的描述信息,判斷插件是否正確,減少了直接加載插件發(fā)生錯誤時的系統(tǒng)開銷。在插件初始化的過程中,插件管理器需要將插件注冊對象添加到公共對象池中供其他插件使用。插件管理器接收到插件卸載信號時,會修改插件的狀態(tài)信息,并將該插件注冊的對象從公共對象池列表中刪除。插件管理子系統(tǒng)負(fù)責(zé)插件的加載、卸載及維護(hù)插件的狀態(tài)信息,插件的狀態(tài)包括Invalid, Read, Resolved,Loaded, Initialized, Running, Stopped, Deleted等八個狀態(tài),Invalid:起始點,還沒有讀取插件的元數(shù)據(jù)。Read:插件的元數(shù)據(jù)被成功讀取,且其信息可通過PluginSpec取得。Resolved:description文件給出的依賴項被成功找到,且可以通過dependencySpecs()函數(shù)獲得。Loaded:插件的庫被加載且插件實例被創(chuàng)建(通過plugin())。Initialized:插件的實例的IPlugin:initialize()函數(shù)被調(diào)用,返回成功。Running:插件的依賴項被成功initialized和extensionsInitialized,加載過程完成。Stopped:插件被關(guān)閉,例如插件的IPlugin:aboutToShutdown()函數(shù)被調(diào)用之后。Deleted:插件的實例對象被釋放。
圖5 插件管理子系統(tǒng)工作原理
5.2總線通信管理子系統(tǒng)設(shè)計
平臺以插件的形式實現(xiàn)其功能,以總線的方式實現(xiàn)功能上的擴(kuò)展。插件之間需要進(jìn)行通信才能實現(xiàn)協(xié)同合作和真正意義上的功能擴(kuò)展??偩€通信管理子系統(tǒng)主要負(fù)責(zé)插件之間的通信管理,其工作原理如圖6所示,插件之間主要通過Qt的信號和槽機(jī)制進(jìn)行通信,當(dāng)某個插件plugin1請求與另一個插件plugin2進(jìn)行通信時,plugin1將發(fā)射一個信號,如果plugin2有效則會接收到該信號并執(zhí)行相應(yīng)的操作,如果plugin2無效,那么通過插件管理子系統(tǒng)維護(hù)的插件狀態(tài)信息獲取plugin2的狀態(tài),返回失敗信息。
圖6 總線通信管理子系統(tǒng)工作原理
5.3界面布局管理子系統(tǒng)設(shè)計
界面布局管理子系統(tǒng)的工作原理如圖7所示,軟件的界面布局管理主要由核心插件(Core Plugin)負(fù)責(zé),核心插件提供ActionManager 和ModernManager兩個類,布局管理器ActionManager類負(fù)責(zé)菜單、菜單欄、鍵盤快捷鍵的注冊并記錄它們的布局;而ModeManager類負(fù)責(zé)平臺主界面上提供的FancyTabWidget工具欄上控件的添加、顯示以及控件的切換事件的處理。核心插件(Core Plugin)記錄各個插件對象及它們的布局信息,通過connect進(jìn)行連接,接收對象布局改變信號,并進(jìn)行相應(yīng)的處理,然后更新界面布局,修改布局記錄。
圖7 界面布局管理子系統(tǒng)工作原理
該平臺主要采用插件式的軟件總線設(shè)計方法進(jìn)行開發(fā),代碼使用Qt和C++進(jìn)行編寫,使用面向?qū)ο箝_發(fā)方法的思想,按照系統(tǒng)需求分析、系統(tǒng)功能設(shè)計、系統(tǒng)技術(shù)實現(xiàn)的步驟循序漸進(jìn),平臺采用“平臺+插件”的設(shè)計模式,復(fù)用性強(qiáng),易于維護(hù)和擴(kuò)展。
參考文獻(xiàn)
[1]Jasmin Blanchette,Mark Summerfield.C++ G UI Qt 4編程(第二版)[M].北京:電子工業(yè)出版社.2011:15.
[2]王光平.OO軟件總線研究[J].計算機(jī)工程與應(yīng)用,2000,36(3):39-40.
[3]劉毅,陳慧蓉,榮鋼.Plug-in結(jié)構(gòu)應(yīng)用程序設(shè)計[J].計算機(jī)應(yīng)用,2002,22(4):9-14.
[4]劉佳,王麗宏,孫克寧.插件技術(shù)在控制系統(tǒng)中的應(yīng)用[J].計算機(jī)應(yīng)用研究,2004:117-119.