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