袁衛(wèi)平,董春,康風(fēng)光,亢曉琛
(1.遼寧工程技術(shù)大學(xué) 測繪與地理科學(xué)學(xué)院,遼寧 阜新 123000;2.中國測繪科學(xué)研究院,北京 100830;3.武漢大學(xué) 資源與環(huán)境科學(xué)學(xué)院,武漢 430079)
地理國情普查統(tǒng)計(jì)分析是地理國情普查的重要組成部分,是地理國情普查要素向地理國情信息轉(zhuǎn)化和提升,并與經(jīng)濟(jì)社會(huì)信息相融合,反映經(jīng)濟(jì)、社會(huì)、資源、環(huán)境的空間分布規(guī)律的必要手段和階段,對(duì)于推廣普查成果應(yīng)用、推動(dòng)地理國情普查與監(jiān)測具有至關(guān)重要的作用。地理國情普查統(tǒng)計(jì)分析貫穿地理國情監(jiān)測全過程,是實(shí)現(xiàn)地理國情信息從數(shù)據(jù)服務(wù)到信息服務(wù),再到?jīng)Q策知識(shí)服務(wù)的必要手段。
地理國情基本統(tǒng)計(jì)根據(jù)地理國情普查采集的點(diǎn)、線、面等幾何特征類型和地理實(shí)體對(duì)象,以規(guī)則地理格網(wǎng)單元、行政區(qū)劃與管理單元、地形單元為統(tǒng)計(jì)單元,進(jìn)行地形地貌、植被覆蓋、荒漠與裸露地表、水域、交通網(wǎng)絡(luò)、居民地與設(shè)施、地理單元的數(shù)量、密度、位置、高程、范圍等內(nèi)容的統(tǒng)計(jì)。地理國情基本統(tǒng)計(jì)是地理國情普查統(tǒng)計(jì)分析的基礎(chǔ)。
地理國情普查基本統(tǒng)計(jì)軟件是為地理國情普查基本統(tǒng)計(jì)工作專門定制開發(fā)的生產(chǎn)性軟件操作平臺(tái),是地理國情普查統(tǒng)計(jì)分析軟件的重要組成部分。軟件以地理國情普查要素為數(shù)據(jù)源,集數(shù)據(jù)分析、統(tǒng)計(jì)和報(bào)表生成為一體的綜合性專業(yè)空間數(shù)據(jù)統(tǒng)計(jì)分析軟件,是以計(jì)算機(jī)技術(shù)、地理信息技術(shù)、數(shù)據(jù)融合技術(shù)、并行計(jì)算技術(shù)等為基礎(chǔ),提供數(shù)據(jù)管理、基本統(tǒng)計(jì)、報(bào)表管理和統(tǒng)計(jì)分析的綜合解決方案。地理國情基本統(tǒng)計(jì)軟件工具為地理國情統(tǒng)計(jì)分析工作提供數(shù)據(jù)和技術(shù)支撐,并為下一步地理國情綜合統(tǒng)計(jì)打下堅(jiān)實(shí)的基礎(chǔ)。
地理國情基本統(tǒng)計(jì)軟件開發(fā)過程中需解決以下兩個(gè)問題:
①地理國情基本統(tǒng)計(jì)軟算法模型復(fù)雜,算法種類繁多,部分算法復(fù)雜度較高,需要由不同開發(fā)人員乃至不同單位的專業(yè)人員開發(fā)完成。在此基礎(chǔ)之上,如何實(shí)現(xiàn)不同單位開發(fā)功能的測試和聯(lián)調(diào)是一項(xiàng)尤為重要的工作。
②地理國情涉及國家和地方兩個(gè)層面,國家和地區(qū)關(guān)注的指標(biāo)各不相同;同時(shí)各地區(qū)發(fā)展不同,對(duì)地理國情基本統(tǒng)計(jì)的需求也有差異。軟件須適應(yīng)國家以及各地區(qū)的對(duì)統(tǒng)計(jì)計(jì)算的不同需求,因此地理國情基本統(tǒng)計(jì)軟件在設(shè)計(jì)初期就必須考慮如何適應(yīng)需求的變化,實(shí)現(xiàn)基本統(tǒng)計(jì)的靈活配置。
為解決以上兩個(gè)問題,本文將研究基于反射機(jī)制和策略模式的統(tǒng)計(jì)算法模型庫管理策略。
反射(Reflection)是.NET中的重要機(jī)制,通過反射在運(yùn)行時(shí)獲得.NET中每一個(gè)類型(包括類、結(jié)構(gòu)、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等,并且可以獲得每個(gè)成員的名稱、限定符和參數(shù)等。有了反射即可對(duì)每一個(gè)類型了如指掌,運(yùn)行時(shí)只要獲得了構(gòu)造函數(shù)的信息,即可直接創(chuàng)建對(duì)象,即使對(duì)象類型在編譯時(shí)還屬未知。
通過反射機(jī)制可以預(yù)先定義對(duì)象接口,完成程序功能框架實(shí)現(xiàn)對(duì)對(duì)象接口的調(diào)用。對(duì)于新添加的功能對(duì)象,只需實(shí)現(xiàn)預(yù)定義的接口就可以在程序運(yùn)行時(shí)通過反射的方式實(shí)例化對(duì)象。無需編譯源程序即可完成功能模塊的添加,從而提高程序的復(fù)用性和靈活性。
策略模式(Strategy)是對(duì)算法的包裝,是把使用算法的責(zé)任和算法本身分割開來,委派給不同的對(duì)象管理。策略模式定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使其還可以相互替換,讓算法獨(dú)立于使用的客戶而獨(dú)立變化。
一般情況下策略模式主要分為三個(gè)角色:
①環(huán)境角色(Context):持有一個(gè)策略類引用,文中體現(xiàn)為地理國情基本統(tǒng)計(jì)軟件框架。
②抽象策略(Strategy):定義了多個(gè)具體策略的公共接口,具體策略類中各種不同的算法以不同的方式實(shí)現(xiàn)這個(gè)接口;Context使用這些接口調(diào)用不同實(shí)現(xiàn)的算法。一般使用接口或抽象類實(shí)現(xiàn),基本統(tǒng)計(jì)軟件開發(fā)過程中為IStatistic統(tǒng)計(jì)計(jì)算算法接口。
③具體策略(ConcreteStrategy):實(shí)現(xiàn)抽象策略類中的相關(guān)的算法或操作。這部分為各開發(fā)人員實(shí)現(xiàn)的具體統(tǒng)計(jì)計(jì)算類。
圖1 策略模式結(jié)構(gòu)圖
通過策略模式可以實(shí)現(xiàn)統(tǒng)計(jì)算法的動(dòng)態(tài)替換以及統(tǒng)計(jì)算法的定制功能。
地理統(tǒng)計(jì)基本統(tǒng)計(jì)包括多個(gè)計(jì)算指標(biāo),涉及GIS、大地、統(tǒng)計(jì)等多個(gè)專業(yè),部分算法具有非常高的專業(yè)性。所以統(tǒng)計(jì)過程中基本算法由多個(gè)單位合作完成,因此給軟件最后的測試和聯(lián)調(diào)帶來很大的挑戰(zhàn)。
按照傳統(tǒng)思路,如果統(tǒng)計(jì)算法沒有完成,主程序?qū)λ惴ㄕ{(diào)用功能將無法實(shí)現(xiàn);其次,即使采用接口方式進(jìn)行開發(fā),則在最終聯(lián)調(diào)時(shí)必須將代碼拷貝到一起再通過編譯測試。此時(shí),若有單位無法完成模塊的開發(fā),則會(huì)影響整個(gè)軟件的發(fā)布。
本文利用.Net反射機(jī)制實(shí)現(xiàn)統(tǒng)計(jì)算法模型的設(shè)計(jì)與開發(fā),即將基本統(tǒng)計(jì)算法模型以插件方式進(jìn)行整合。通過這種方式,可以先完成主程序框架,算法模型后期動(dòng)態(tài)添加,框架主要包括以下四個(gè)部分:
(1)程序主體框架:完成基本的系統(tǒng)功能,基本統(tǒng)計(jì)計(jì)算功能根據(jù)配置實(shí)現(xiàn)對(duì)統(tǒng)計(jì)算法的調(diào)用,開發(fā)過程中只面向接口,無需面向具體的計(jì)算方法,具體對(duì)象實(shí)現(xiàn)通過讀取配置文件獲取統(tǒng)計(jì)計(jì)算模塊位置及對(duì)象信息利用.Net反射機(jī)制實(shí)現(xiàn)。
圖2 功能結(jié)構(gòu)圖
(2)統(tǒng)計(jì)算法模型接口:定義統(tǒng)一的基本統(tǒng)計(jì)算法接口,并將該接口作為對(duì)外交互接口分發(fā)給統(tǒng)計(jì)算法開發(fā)人員。
(3)基本統(tǒng)計(jì)算法模型:統(tǒng)計(jì)分析算法都封裝成一個(gè)類,并且每個(gè)類均實(shí)現(xiàn)統(tǒng)一接口。開發(fā)人員實(shí)現(xiàn)統(tǒng)計(jì)算法模型并將其封裝在動(dòng)態(tài)鏈接庫中。
(4)統(tǒng)計(jì)算法模型庫:統(tǒng)計(jì)算法模型是基本統(tǒng)計(jì)軟件的核心,通過統(tǒng)計(jì)算法模型庫,將所有統(tǒng)計(jì)算法在系統(tǒng)中實(shí)現(xiàn)管理。統(tǒng)計(jì)算法模型庫保存模型編碼、模型名稱、模型類別、輸入?yún)?shù)、輸出參數(shù)等信息。通過對(duì)統(tǒng)計(jì)算法模型庫的管理,可實(shí)現(xiàn)對(duì)各單位開發(fā)的算法模型管理。
基于反射機(jī)制開發(fā)模型庫時(shí),主程序設(shè)計(jì)需要實(shí)現(xiàn)對(duì)已完成的統(tǒng)計(jì)算法模型的管理功能,并為調(diào)用算法提供功能接口。其中,模型算法管理功能主要實(shí)現(xiàn)以下三方面的功能:
(1)注冊(cè)模型:統(tǒng)計(jì)算法模型完成之后以DLL動(dòng)態(tài)鏈接庫的方式提交,模型管理功能通過對(duì)模型算法庫的管理對(duì)已完成的模型實(shí)現(xiàn)注冊(cè),保存包括模型編碼、模型名稱、模型類別、輸入?yún)?shù)、輸出參數(shù)以及模型所屬于的動(dòng)態(tài)鏈接庫位置等信息。
(2)啟用、禁用模型:模型管理功能能夠根據(jù)用戶的需求,對(duì)已注冊(cè)但暫時(shí)不想使用的模型具有啟用或者禁用功能。
(3)配置參數(shù):主程序能夠?qū)Σ寮M(jìn)行默認(rèn)參數(shù)配置,算法模型屬性以及其適用場景。
通過模型管理功能實(shí)現(xiàn)各類統(tǒng)計(jì)算法模型的集成,該方式只需要將部件組裝而不需要進(jìn)行編譯和鏈接,在軟件各功能模塊通過測試基礎(chǔ)上,只需拷貝模型對(duì)象所在的動(dòng)態(tài)鏈接庫,并通過修改模型算法庫即可實(shí)現(xiàn)軟件功能模塊和基本統(tǒng)計(jì)軟件的整合。
使用策略模式實(shí)現(xiàn)統(tǒng)計(jì)分析模型動(dòng)態(tài)配置,采用統(tǒng)一的策略接口IStatistic來擴(kuò)展算法,所有基本統(tǒng)計(jì)算法都繼承于該接口。這樣設(shè)計(jì)的優(yōu)點(diǎn)可以提高軟件靈活性,支持程序運(yùn)行期間選擇算法。對(duì)象關(guān)系如圖3所示。
表1 統(tǒng)計(jì)算法模型庫對(duì)應(yīng)表
圖3 策略模式類結(jié)構(gòu)圖
主要包括以下幾個(gè)步驟:
(1)接口定義:定義統(tǒng)一的基本統(tǒng)計(jì)算法接口IStatistic,并將該接口作為對(duì)外交互接口分發(fā)給程序開發(fā)人員。
(2)算法模塊實(shí)現(xiàn):算法模塊程序開發(fā)人員著手實(shí)現(xiàn)統(tǒng)計(jì)算法。所有統(tǒng)計(jì)算法模型都封裝成一個(gè)類,并且所有類的實(shí)現(xiàn)都繼承IStatistic接口。算法開發(fā)人員負(fù)責(zé)算法的開發(fā)和測試工作,算法完成后提交動(dòng)態(tài)鏈接庫。
(3)模型庫管理:算法模塊提交后,通過模型管理功能將統(tǒng)計(jì)模型和相關(guān)調(diào)用信息保存至基本統(tǒng)計(jì)模型庫,并實(shí)現(xiàn)對(duì)算法模型的添加、刪除、修改。算法模型庫是統(tǒng)計(jì)計(jì)算的核心,軟件通過訪問模型庫即可獲得算法模型位置以及模型相關(guān)信息。
(4)模型動(dòng)態(tài)配置:實(shí)現(xiàn)統(tǒng)計(jì)對(duì)象和統(tǒng)計(jì)算法動(dòng)態(tài)配置功能,首先獲得所有統(tǒng)計(jì)對(duì)象,針對(duì)每一個(gè)統(tǒng)計(jì)對(duì)象,從基本統(tǒng)計(jì)模型庫中根據(jù)模型輸入?yún)?shù)和模型類別列出適用于當(dāng)前統(tǒng)計(jì)對(duì)象的統(tǒng)計(jì)算法。用戶根據(jù)需求選擇對(duì)應(yīng)的統(tǒng)計(jì)算法,并配置統(tǒng)計(jì)單元。
表2 統(tǒng)計(jì)對(duì)象與統(tǒng)計(jì)指標(biāo)對(duì)應(yīng)表
(5)基本統(tǒng)計(jì)計(jì)算:用戶執(zhí)行基本統(tǒng)計(jì)計(jì)算時(shí),主程序從統(tǒng)計(jì)算法模型庫中獲得模型信息,通過反射機(jī)制實(shí)例化統(tǒng)計(jì)模型對(duì)象。統(tǒng)計(jì)模型對(duì)象根據(jù)配置文件獲得對(duì)象的輸入數(shù)據(jù)執(zhí)行統(tǒng)計(jì)計(jì)算。
本文以Microsoft Visual Studio 2010為開發(fā)環(huán)境,基于C#語言開發(fā)主程序框架,實(shí)現(xiàn)地理國情基本統(tǒng)計(jì)算法模型管理策略功能開發(fā),整體功能流程如圖4所示。
圖4 基本統(tǒng)計(jì)策略模式結(jié)構(gòu)圖
地理國情基本統(tǒng)計(jì)軟件通過算法模型管理、統(tǒng)計(jì)指標(biāo)與統(tǒng)計(jì)模型匹配、統(tǒng)計(jì)計(jì)算三部分功能實(shí)現(xiàn)統(tǒng)計(jì)算法模型庫的管理、統(tǒng)計(jì)計(jì)算動(dòng)態(tài)配置以及統(tǒng)計(jì)算法的調(diào)用。
(1)統(tǒng)計(jì)算法模型管理功能。開發(fā)人員提交的動(dòng)態(tài)鏈接庫,通過算法管理界面導(dǎo)入基本統(tǒng)計(jì)軟件中,并從統(tǒng)計(jì)算法管理界面完成統(tǒng)計(jì)算法模型添加、修改、刪除,通過勾選統(tǒng)計(jì)算法模型來控制選中算法的可用狀態(tài)。
圖5 統(tǒng)計(jì)算法模型庫界面圖
(2)統(tǒng)計(jì)對(duì)象與統(tǒng)計(jì)指標(biāo)匹配功能模塊。該功能實(shí)現(xiàn)統(tǒng)計(jì)對(duì)象與統(tǒng)計(jì)指標(biāo)的匹配工作。如圖6所示,左側(cè)是參與計(jì)算的統(tǒng)計(jì)對(duì)象,右側(cè)顯示統(tǒng)計(jì)算法。選中統(tǒng)計(jì)對(duì)象后,右側(cè)顯示從統(tǒng)計(jì)算法模型庫中獲取匹配的統(tǒng)計(jì)算法指標(biāo)。用戶通過點(diǎn)擊算法指標(biāo)選擇框即可完成統(tǒng)計(jì)算法的配置。
圖6 統(tǒng)計(jì)對(duì)象與統(tǒng)計(jì)指標(biāo)匹配界面圖
(3)統(tǒng)計(jì)計(jì)算功能。統(tǒng)計(jì)計(jì)算是基本統(tǒng)計(jì)軟件的主要功能,根據(jù)統(tǒng)計(jì)指標(biāo)的配置情況顯示所需計(jì)算的指標(biāo)。計(jì)算時(shí)通過反射機(jī)制獲得統(tǒng)計(jì)算法模型實(shí)例,核心代碼如下:
若需要添加新的算法,只需完成算法模型的開發(fā),然后通過以上步驟將動(dòng)態(tài)鏈接庫導(dǎo)入到基本統(tǒng)計(jì)軟件中,通過算法配置即可實(shí)現(xiàn)計(jì)算。整個(gè)過程無需編譯源程序就可以定制、修改和添加統(tǒng)計(jì)算法模型。
本文通過.Net語言提供的反射機(jī)制和策略模式研究地理國情基本統(tǒng)計(jì)算法模型的管理策略。通過反射機(jī)制結(jié)合模型數(shù)據(jù)管理簡化應(yīng)用軟件的后期維護(hù)和升級(jí),降低了軟件開發(fā)及維護(hù)成本。主程序和統(tǒng)計(jì)算法模型之間借助接口實(shí)現(xiàn)對(duì)象的調(diào)用,從而實(shí)現(xiàn)代碼之間的耦合。通過這個(gè)策略將應(yīng)用框架中的擴(kuò)展點(diǎn)以插件方式來動(dòng)態(tài)加載和構(gòu)建,從而實(shí)現(xiàn)統(tǒng)計(jì)算法模型動(dòng)態(tài)擴(kuò)展。
該策略已經(jīng)用于地理國情基本統(tǒng)計(jì)軟件系統(tǒng)中,實(shí)現(xiàn)了基本統(tǒng)計(jì)算法模型的動(dòng)態(tài)加載和管理。并通過模型動(dòng)態(tài)配置實(shí)現(xiàn)了統(tǒng)計(jì)計(jì)算模型的動(dòng)態(tài)維護(hù),減少了軟件開發(fā)的工作量,有效地提高了軟件的復(fù)用性和靈活性。
[1]蘇德國,李青元,董春,等.統(tǒng)計(jì)分析模型管理工具實(shí)現(xiàn)及其在空間輔助決策系統(tǒng)中的應(yīng)用[J].測繪科學(xué),2007,32(z1):63-65.
[2]趙宏利,李秀冰,李大林.基于反射機(jī)制的插件系統(tǒng)軟件設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(2):348-351,355.
[3]吳東慶,胡小健,楊逢建.反射機(jī)制下類工廠模式的實(shí)現(xiàn)與研究[J].計(jì)算機(jī)應(yīng)用,2006,26(3):705-707.
[4]羅巨波,葉鵬,袁文杰,等.一種支持軟件體系結(jié)構(gòu)重用的反射機(jī)制 RMRSA[J].計(jì)算機(jī)工程與應(yīng)用,2008,44(32):68-71.
[5]張連育,呂立.基于策略模式的中醫(yī)數(shù)據(jù)挖掘平臺(tái)的設(shè)計(jì)與研究[J].小型微型計(jì)算機(jī)系統(tǒng),2011,32(7):1406-1411.
[6]周宏廣,周繼承,劉長生.基于策略模式的缺損數(shù)據(jù)處理方法[J].長沙航空職業(yè)技術(shù)學(xué)院學(xué)報(bào),2004,4(2):47-50.
[7]高慧萍,呂俊.插件式開發(fā)技術(shù)研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(16):3805-3829.
[8]孫麗,高飛,胡小華,等.ArcEngine插件式 GIS二次開發(fā)框架的設(shè)計(jì)與實(shí)現(xiàn)[J].測繪科學(xué),2011,36(5):214-216.
[9]鄭穎華,武根友.智能決策支持系統(tǒng)中的模型庫及其管理系統(tǒng)[J].科學(xué)技術(shù)與工程,2006,6(9):1312-1315.