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