桂林長海發展有限責任公司 勞憲銀
?
基于插件式的軟件總線構件平臺的設計
桂林長海發展有限責任公司 勞憲銀
【摘要】本文開發的基于插件式的軟件總線構件平臺主要為電子對抗、指揮控制等軍用軟件搭建系統框架,滿足現代軍用軟件的開發周期短、可擴展性和可維護性強的迫切需求?;诓寮降能浖偩€構件平臺采用插件體系結構和軟件總線技術設計,該平臺的復用,可大大縮短軟件的開發周期,增強軟件的復用性、擴展性和維護性,同時可節省出傳統的軟件開發方法所開發的軟件在前期系統框架設計、后期軟件維護所需要投入的大量人力物力。
【關鍵詞】插件;軟件總線;復用;體系結構;Qt
傳統的電子對抗、指揮控制等軍用軟件通常都是單一模塊的執行程序,開發時往往采用自頂向下逐層細分劃分為單個小模塊進行開發。在出現新的需求時,由于軟件較為簡單,即使全部重新開發,也相對容易。然而,隨著計算機技術和軍用軟件應用的發展,軟件任務需求變得多樣化、復雜化,完整開發出一個軟件或系統需要大量的人力物力,需要很長的軟件開發周期,而且當前軟件更新換代的要求越來越頻繁,傳統的軟件開發方法在現代的復雜化、多樣化需求下顯得力不從心,所以我們需要尋找一種更好的軟件體系結構和開發方法。
基于插件式的軟件總線構件平臺是一種比較靈活、通用的軟件體系結構,它采用“平臺+插件”設計模式,將軟件通用功能和擴展機制的程序應用框架設計成平臺,而軟件其他功能分散到插件中來完成,插件可動態地加載到平臺上,也可被自由地卸載和替換。因此,它不但大大提高軟件開發的開發效率,降低設計開發難度,而且,縮短了軟件開發周期,增強了軟件的可運行性和可維護性。
2.1插件體系結構
插件是按照預定接口實現的軟件功能構件。軟件可在運行時動態加載插件并執行其功能。插件體系結構的軟件由一個插件管理平臺和多個完成子功能的插件組成,如圖1所示。

圖1 插件體系結構
插件管理平臺:主要實現軟件中的通用功能和擴展機制的程序應用框架,可以插入不同的插件,接受插件提供的服務并提供給用戶,是整個系統的基礎和主干。
插件:按照程序應用框架的規格要求實現軟件其他功能,并能夠動態地插入到軟件系統中,完善系統整體功能,是插件系統的重要組成部分。
接口:是使插件管理平臺和插件能夠互相結合工作而制定的一套標準和協議,它是一個邏輯上的接口,由插件管理平臺和插件各完成一部分,它們共同完成插件的加載、調用、卸載以及插件管理平臺與插件以及插件與插件之間的交互,是插件系統中的重要組成部分。
2.2軟件總線技術
軟件總線是一條虛擬的數據傳輸線,是硬件總線的映射,是軟件系統中各構件的集成框架。它為系統內各構件之間的信息交換提供虛擬的公共數據通道和接口服務。只要符合其所制定的接口標準的構件都能夠實現即插即用。
對軟件總線的設計主要考慮4個基本要素:模塊間的數據通信、構件的調度和管理策略、軟件總線的管理策略、軟總線和構件庫的接口策略。針對軟件總線設計應解決的基本要素,軟件總線的設計應實現以下4個功能模塊:
數據通信模塊:該模塊主要用于協調各個“接插”在軟件總線上的由不同語言編寫、不同環境下運行、不同開發商提供的異夠構件之間的信息交互。
構件調度模塊:該模塊主要通過軟件總線實現對構件的調用、安裝、卸載,完成對構件庫的管理。
總線管理模塊:該模塊主要實現操作系統與構件庫間通信和數據交換、數據傳遞的合理分配和控制使用。
接口控制模塊:該模塊主要用來解決軟件總線和構件的接口問題,完成構件同軟件總線間的信息交互,實現操作系統對構件庫的管理和控制、構件之間的互相通信、數據和信息的傳送。
軟件總線的總體結構框架如圖2所示。

圖2 軟件總線框架
本文開發的基于插件式的軟件總線構件平臺主要為電子對抗、指揮控制等軍用軟件搭建系統框架,提供插件管理、總線通信、界面布局管理等功能,實現系統中必需的通用功能和擴展機制的程序應用框架。
3.1插件管理
插件管理主要提供以下幾方面的功能:
插件的注冊和反注冊。插件在使用前需要注冊,例如ActiveX控件,必須注冊才能使用。插件只有成功注冊后,平臺才能正確找到插件的路徑,并對其初始化。平臺可以對已注冊但當前不再的插件進行反注冊。
插件的加載和卸載。平臺能夠根據用戶的需求,可對已注冊但暫時不需使用的插件進行加載或卸載。
插件基本信息的顯示。平臺能顯示插件的版本、版權等信息。
3.2總線通信
實現插件之間的通信管理功能。為整個系統的運行提供全面的通信能力。
3.3界面布局管理
實現系統界面的管理功能。為整個系統的界面配置及控制提供管理能力。
平臺主要由插件管理子系統、總線通信管理子系統、界面布局子系統組成。平臺整體結構設計如圖3所示。

圖3 平臺整體結構
平臺總體框架設計如圖4所示,平臺基于插件形式設計,插件間的通信主要由總線通信子系統實現,界面布局管理子系統以插件形式加載到平臺,由插件管理子系統對插件進行管理。核心插件(Core Plugin)負責整個平臺界面的初始化工作,界面的布局由界面管理子系統負責。

圖4 平臺總體框架
5.1插件管理子系統設計
插件管理子系統的工作原理如圖5所示,插件管理器在加載插件之前首先獲取插件的描述信息,判斷插件是否正確,減少了直接加載插件發生錯誤時的系統開銷。在插件初始化的過程中,插件管理器需要將插件注冊對象添加到公共對象池中供其他插件使用。插件管理器接收到插件卸載信號時,會修改插件的狀態信息,并將該插件注冊的對象從公共對象池列表中刪除。插件管理子系統負責插件的加載、卸載及維護插件的狀態信息,插件的狀態包括Invalid, Read, Resolved,Loaded, Initialized, Running, Stopped, Deleted等八個狀態,Invalid:起始點,還沒有讀取插件的元數據。Read:插件的元數據被成功讀取,且其信息可通過PluginSpec取得。Resolved:description文件給出的依賴項被成功找到,且可以通過dependencySpecs()函數獲得。Loaded:插件的庫被加載且插件實例被創建(通過plugin())。Initialized:插件的實例的IPlugin:initialize()函數被調用,返回成功。Running:插件的依賴項被成功initialized和extensionsInitialized,加載過程完成。Stopped:插件被關閉,例如插件的IPlugin:aboutToShutdown()函數被調用之后。Deleted:插件的實例對象被釋放。

圖5 插件管理子系統工作原理
5.2總線通信管理子系統設計
平臺以插件的形式實現其功能,以總線的方式實現功能上的擴展。插件之間需要進行通信才能實現協同合作和真正意義上的功能擴展。總線通信管理子系統主要負責插件之間的通信管理,其工作原理如圖6所示,插件之間主要通過Qt的信號和槽機制進行通信,當某個插件plugin1請求與另一個插件plugin2進行通信時,plugin1將發射一個信號,如果plugin2有效則會接收到該信號并執行相應的操作,如果plugin2無效,那么通過插件管理子系統維護的插件狀態信息獲取plugin2的狀態,返回失敗信息。

圖6 總線通信管理子系統工作原理
5.3界面布局管理子系統設計
界面布局管理子系統的工作原理如圖7所示,軟件的界面布局管理主要由核心插件(Core Plugin)負責,核心插件提供ActionManager 和ModernManager兩個類,布局管理器ActionManager類負責菜單、菜單欄、鍵盤快捷鍵的注冊并記錄它們的布局;而ModeManager類負責平臺主界面上提供的FancyTabWidget工具欄上控件的添加、顯示以及控件的切換事件的處理。核心插件(Core Plugin)記錄各個插件對象及它們的布局信息,通過connect進行連接,接收對象布局改變信號,并進行相應的處理,然后更新界面布局,修改布局記錄。

圖7 界面布局管理子系統工作原理
該平臺主要采用插件式的軟件總線設計方法進行開發,代碼使用Qt和C++進行編寫,使用面向對象開發方法的思想,按照系統需求分析、系統功能設計、系統技術實現的步驟循序漸進,平臺采用“平臺+插件”的設計模式,復用性強,易于維護和擴展。
參考文獻
[1]Jasmin Blanchette,Mark Summerfield.C++ G UI Qt 4編程(第二版)[M].北京:電子工業出版社.2011:15.
[2]王光平.OO軟件總線研究[J].計算機工程與應用,2000,36(3):39-40.
[3]劉毅,陳慧蓉,榮鋼.Plug-in結構應用程序設計[J].計算機應用,2002,22(4):9-14.
[4]劉佳,王麗宏,孫克寧.插件技術在控制系統中的應用[J].計算機應用研究,2004:117-119.