郭鵑



摘要:電子海圖軟件是航海安全的基礎支撐軟件,廣泛運行于嵌入式系統、Windows、Linux等多種操作系統中。該文針對電子海圖軟件在多操作系統平臺下開展可重用設計,對電子海圖軟件進行分層架構設計,有效支撐電子海圖軟件基礎層、功能層、操作系統適配層系統解耦,實現了電子海圖軟件功能構件集、基礎軟件構件集清晰劃分,對減少產品部署周期、控制成本都有著重要的意義,在實踐中取得預期的效果,解決了電子海圖軟件在多個操作系統平臺下軟件可重用設計的問題。
關鍵詞:可重用設計;分層架構;電子海圖
中圖分類號:TP31 文獻標識碼:A
文章編號:1009-3044(2019)31-0061-03
電子海圖顯示與信息系統(以下簡稱電子海圖軟件)是信息化技術在航海領域的重要應用,電子海圖可大幅提高船員的工作效率,同時提高航海的安全性。傳統的電子海圖軟件開發模式根據需求通過特定的平臺進行開發,根據用戶需求可選擇Windows操作系統、Linux系統、嵌入式VxWorks系統等等,這種開發模式針對單個操作系統平臺特點進行開發,構件可重用性有較大的提升空間。因此從軟件工程化角度出發,在設計階段對電子海圖軟件做好可重用設計,聚焦于構建電子海圖軟件構件集,通過軟件分層架構設計提高電子海圖軟件可重用性,實現電子海圖軟件在多個操作系統平臺應用中的高效應用。
可重用設計在軟件設計里涉及需求分析、軟件設計、配置項管理等各部分。本文設定需求清晰,僅探討如何在電子海圖軟件構架設計這個層面實現可重用的軟件。
1整體架構設計
電子海圖軟件屬于特定領域的軟件,非常適合按照軟件工程進行分層架構以及功能構件化行設計,采用標準的框架結構可提升軟件架構高效演進,減少軟件重構帶來的成本以及開發周期的風險。
好的軟件架構可提升軟件的可重用性,相比于一般的商業軟件,電子海圖面向航行安全,具有可靠性要求高、復雜性高等特點。首先將電子海圖軟件分解為與目標平臺無關的主體部分以及目標平臺相關的適配部分,電子海圖主體部分主要體現軟件的核心功能㈣,比如電子海圖的漫游、縮放等應用操作以及字體繪制、要素繪制、坐標轉換算法,根據功能的不同范圍,再具體劃分為海圖功能層和基礎繪制層。
電子海圖軟件與操作系統關聯的部分也就是操作系統適配層主要集中在數據文件讀取、文件管理、顯示輸出、人機交互等部分。電子海圖軟件利用分層架構進行顯示和數據分離的設計,會大大減少電子海圖軟件與操作系統底層耦合。
根據以上對電子海圖軟件的特點分析,電子海圖軟件基本組成分為基礎繪制部分、海圖功能部分、符號庫及海圖數據部分等三個部分組成,可以將它們根據交互方式區別定位于不同的抽象層次,具體分為以下幾個層次:海圖功能層、基礎繪制層、數據層、操作系統適配層,具體如圖1所示:
2開發語言以及編譯規則
2.1開發語言
首先需要確定電子海圖開發語言,電子海圖軟件的主要工作是數據處理以及圖形繪制,這兩項對數據處理速度以及圖形繪制的速度都有較高的要求,Java等解釋性語言受限于各種硬件運算速度,尤其在嵌入式操作系統支持并不完善,而標準c++語言本身具備很高的可移植性,利用其提供的模板類、數據流等實現符號庫解析、數據讀取等核心功能,因此選用C/C++語言。
2.2操作系統字節序
電子海圖運行在X86和PowerPC硬件體系結構上時,字節序也不一樣。因此在這兩個不同體系結構上進行電子海圖數據轉換需要滿足字節序的問題。為了盡可能減少由于數據結構差異帶來的額外處理工作,通過在數據定制軟件,將電子海圖數據轉換為統一、高效的內部數據組織方式,也就是通常所說的SENC。
2.3編譯規則
電子海圖軟件主要工作是數據處理以及圖形繪制,因此在數據處理部分,特別是對海圖元數據以及海圖要素繪制結構體定義時,默認情況下編譯器往往按照32位也就是4字節進行對齊,導致最終的結構體大小為4字節的倍數,所以根據一定的編程規范在編譯時要選擇緊湊字節數,在Windows操作系統下通過條件編譯參數或者IDE進行設置,其他系統例如VxWorks系統以及Linux系統通過設定packed編譯參數設置,結構體定義清晰化有利整個軟件可重用設計。此外,定義清晰的變量也有利于軟件可重用設計。
3海圖功能層及基礎層構件化設計
海圖功能層完成初始化、海圖刷新顯示、漫游、縮放等功能。不管是海圖漫游,還是海圖開窗放大、海圖縮放等功能接口都是根據目標的區域傳遞位置參數,通過經緯度坐標和屏幕坐標的換算關系,最終根據區域對海圖進行繪制。因此根據這個設定,可以將海圖和人機交互相關的接口高度抽象化,對電子海圖代碼進行分解,提取功能構件,從而提高軟件的可重用性。
海圖基礎層則與電子海圖數據相關的投影變換、字體繪制以及點、線、面各種海圖要素繪制完成調用圖形中間件提供的點、線、面封裝接口,因此也可以將基礎層各種繪制功能以及拼接繪制等接口抽象為基礎構件。
功能層和基礎層執行流程如下圖所示:
下面以漫游功能為例,電子海圖軟件功能層和基礎層以及操作系統適配層的接口函數如何進行層次上的劃分。
4操作系統適配層設計
4.1數據以及內存管理
電子海圖軟件需要進行海圖數據索引以及數據讀取,因此在不同的操作系統下面對文件存放目錄都有不同的規定,比如Windows通過盤符來表示,Linux文件存放路徑采用“/”根目錄符號表示,存放路徑可以通過正則表達式進行解析,通過匹配和遍歷進行海圖數據存放路徑解析。并且在不同系統下對系統調用也有不同的表達方式,比如Windows對文件的讀取會有不同定義函數,比如說fopen等函數在不同操作系統下工作都有一定差異性,在跨平臺設計過程尤其需要注意到。如果要提高軟件可重用性,減少修改軟件的次數,就必須在設計階段考慮文件系統的兼容性。
另外,電子海圖的數據讀取以及繪制都要使用到大量內存,并且底層電子海圖繪制位圖在應用時經常要實現一定可重人性,盡量保留較少的全局變量,也可以通過類似堆棧的方式來實現全局變量保存。
4.2圖形中間件設計
圖形中間件把電子海圖基礎層軟件和操作系統隔離開來,這樣就使得電子海圖系統的圖形繪制與所在系統無關,向上它能夠屏蔽多種平臺系統對圖形設備接口描述的差異,為圖形功能層提供統一圖形設備操作方法,向下則針對不同的嵌入式平臺,實現各種具體的可視化輸出功能。從而大大提高了系統的可移植性。圖形中間件封裝不同操作系統對圖形圖像繪制和字體顯示接口,能提供畫筆、畫刷、文本屬性設置以滿足特殊繪制效果,向上提供平臺無關的繪制接口,以解決電子海圖軟件可重用設計的實際需求。
電子海圖軟件所繪制的要素主要包括點、線、面,不同平臺對于填充有不同的調用方式。從可重用角度出發,需要對不同系統的函數接口進行平臺無關性的封裝。電子海圖軟件需要繪制大量的海圖要素,使用的圖形函數主要有以下類型:畫線函數、多邊形填充函數、繪圖屬性函數、字體函數。其中畫線函數的功能是進行海岸線、等深線等線狀要素的繪制,填充函數的功能是用指定的顏色來填充陸地、島嶼等面狀要素,繪圖屬性函數是用來設置如畫筆的顏色,畫刷的顏色等,字體函數是在指定的區域進行海圖字體繪制等等。
不同操作系統提供的圖形繪制函數庫均有一定差異性,比如VxWorks的圖形驅動包為WindML,Windows操作系統提供GDI應用編程接口,Linux則提供XWindows調用方式,因此設計在操作系統適配層采用高度定制化、與操作系統無關的圖形編程接口,屏蔽操作系統差異性對電子海圖軟件的影響,能夠最大化地提升海圖基礎層以及海圖功能層可重用性。
4.3字體差異性接口差異
電子海圖軟件中需要使用很多字體,對普通字體顯示需要進行旋轉等各類操作,VxWorks等嵌入式操作系統未提供相關中文字體,這時就需要使用點陣漢字解決電子海圖顯示過程的字體顯示。Linux操作系統如果沒有合適字體也需要進行點陣字體讀取,Windows操作系統通常使用系統提供的字體函數進行直接調用。
5結束語
本文探討了利用操作系統適配層一>海圖軟件基礎層一>海圖軟件功能層的層次模型實現電子海圖可重用性的軟件工程化方法,以基礎上的漫游功能為例說明了功能層構件化的設計方法,以海圖漫游構件為例說明了可復用構件的設計方法,并利用已開發的海圖構件實現了海圖漫游、縮放、開窗放大等人機交互接口開發,核心代碼重用率超過95%,和傳統開發方法相比,提升較大。
作者在有限的時間內完成了VxWorks、Windows、Linux、So-laris等多個平臺下的電子海圖軟件開發應用,也得益于清晰分層架構設計,從軟件概要設計就利用軟件重用的軟件工程化方法,將會有利于提高軟件的可重用性,減少產品的開發和測試周期。并能很好地保證產品的可靠性。本文所述的分層架構設計也可應用在其他功能較為復雜的軟件進行可重用設計,在設計階段使用分層架構進行設計時考慮到各個平臺不同差異性,軟件研發成本都可以得到不同程度的降低。