袁衛平,董春,康風光,亢曉琛
(1.遼寧工程技術大學 測繪與地理科學學院,遼寧 阜新 123000;2.中國測繪科學研究院,北京 100830;3.武漢大學 資源與環境科學學院,武漢 430079)
地理國情普查統計分析是地理國情普查的重要組成部分,是地理國情普查要素向地理國情信息轉化和提升,并與經濟社會信息相融合,反映經濟、社會、資源、環境的空間分布規律的必要手段和階段,對于推廣普查成果應用、推動地理國情普查與監測具有至關重要的作用。地理國情普查統計分析貫穿地理國情監測全過程,是實現地理國情信息從數據服務到信息服務,再到決策知識服務的必要手段。
地理國情基本統計根據地理國情普查采集的點、線、面等幾何特征類型和地理實體對象,以規則地理格網單元、行政區劃與管理單元、地形單元為統計單元,進行地形地貌、植被覆蓋、荒漠與裸露地表、水域、交通網絡、居民地與設施、地理單元的數量、密度、位置、高程、范圍等內容的統計。地理國情基本統計是地理國情普查統計分析的基礎。
地理國情普查基本統計軟件是為地理國情普查基本統計工作專門定制開發的生產性軟件操作平臺,是地理國情普查統計分析軟件的重要組成部分。軟件以地理國情普查要素為數據源,集數據分析、統計和報表生成為一體的綜合性專業空間數據統計分析軟件,是以計算機技術、地理信息技術、數據融合技術、并行計算技術等為基礎,提供數據管理、基本統計、報表管理和統計分析的綜合解決方案。地理國情基本統計軟件工具為地理國情統計分析工作提供數據和技術支撐,并為下一步地理國情綜合統計打下堅實的基礎。
地理國情基本統計軟件開發過程中需解決以下兩個問題:
①地理國情基本統計軟算法模型復雜,算法種類繁多,部分算法復雜度較高,需要由不同開發人員乃至不同單位的專業人員開發完成。在此基礎之上,如何實現不同單位開發功能的測試和聯調是一項尤為重要的工作。
②地理國情涉及國家和地方兩個層面,國家和地區關注的指標各不相同;同時各地區發展不同,對地理國情基本統計的需求也有差異。軟件須適應國家以及各地區的對統計計算的不同需求,因此地理國情基本統計軟件在設計初期就必須考慮如何適應需求的變化,實現基本統計的靈活配置。
為解決以上兩個問題,本文將研究基于反射機制和策略模式的統計算法模型庫管理策略。
反射(Reflection)是.NET中的重要機制,通過反射在運行時獲得.NET中每一個類型(包括類、結構、委托、接口和枚舉等)的成員,包括方法、屬性、事件,以及構造函數等,并且可以獲得每個成員的名稱、限定符和參數等。有了反射即可對每一個類型了如指掌,運行時只要獲得了構造函數的信息,即可直接創建對象,即使對象類型在編譯時還屬未知。
通過反射機制可以預先定義對象接口,完成程序功能框架實現對對象接口的調用。對于新添加的功能對象,只需實現預定義的接口就可以在程序運行時通過反射的方式實例化對象。無需編譯源程序即可完成功能模塊的添加,從而提高程序的復用性和靈活性。
策略模式(Strategy)是對算法的包裝,是把使用算法的責任和算法本身分割開來,委派給不同的對象管理。策略模式定義了一系列的算法,并將每一個算法封裝起來,而且使其還可以相互替換,讓算法獨立于使用的客戶而獨立變化。
一般情況下策略模式主要分為三個角色:
①環境角色(Context):持有一個策略類引用,文中體現為地理國情基本統計軟件框架。
②抽象策略(Strategy):定義了多個具體策略的公共接口,具體策略類中各種不同的算法以不同的方式實現這個接口;Context使用這些接口調用不同實現的算法。一般使用接口或抽象類實現,基本統計軟件開發過程中為IStatistic統計計算算法接口。
③具體策略(ConcreteStrategy):實現抽象策略類中的相關的算法或操作。這部分為各開發人員實現的具體統計計算類。

圖1 策略模式結構圖
通過策略模式可以實現統計算法的動態替換以及統計算法的定制功能。
地理統計基本統計包括多個計算指標,涉及GIS、大地、統計等多個專業,部分算法具有非常高的專業性。所以統計過程中基本算法由多個單位合作完成,因此給軟件最后的測試和聯調帶來很大的挑戰。
按照傳統思路,如果統計算法沒有完成,主程序對算法調用功能將無法實現;其次,即使采用接口方式進行開發,則在最終聯調時必須將代碼拷貝到一起再通過編譯測試。此時,若有單位無法完成模塊的開發,則會影響整個軟件的發布。
本文利用.Net反射機制實現統計算法模型的設計與開發,即將基本統計算法模型以插件方式進行整合。通過這種方式,可以先完成主程序框架,算法模型后期動態添加,框架主要包括以下四個部分:
(1)程序主體框架:完成基本的系統功能,基本統計計算功能根據配置實現對統計算法的調用,開發過程中只面向接口,無需面向具體的計算方法,具體對象實現通過讀取配置文件獲取統計計算模塊位置及對象信息利用.Net反射機制實現。

圖2 功能結構圖
(2)統計算法模型接口:定義統一的基本統計算法接口,并將該接口作為對外交互接口分發給統計算法開發人員。
(3)基本統計算法模型:統計分析算法都封裝成一個類,并且每個類均實現統一接口。開發人員實現統計算法模型并將其封裝在動態鏈接庫中。
(4)統計算法模型庫:統計算法模型是基本統計軟件的核心,通過統計算法模型庫,將所有統計算法在系統中實現管理。統計算法模型庫保存模型編碼、模型名稱、模型類別、輸入參數、輸出參數等信息。通過對統計算法模型庫的管理,可實現對各單位開發的算法模型管理。
基于反射機制開發模型庫時,主程序設計需要實現對已完成的統計算法模型的管理功能,并為調用算法提供功能接口。其中,模型算法管理功能主要實現以下三方面的功能:
(1)注冊模型:統計算法模型完成之后以DLL動態鏈接庫的方式提交,模型管理功能通過對模型算法庫的管理對已完成的模型實現注冊,保存包括模型編碼、模型名稱、模型類別、輸入參數、輸出參數以及模型所屬于的動態鏈接庫位置等信息。
(2)啟用、禁用模型:模型管理功能能夠根據用戶的需求,對已注冊但暫時不想使用的模型具有啟用或者禁用功能。
(3)配置參數:主程序能夠對插件進行默認參數配置,算法模型屬性以及其適用場景。
通過模型管理功能實現各類統計算法模型的集成,該方式只需要將部件組裝而不需要進行編譯和鏈接,在軟件各功能模塊通過測試基礎上,只需拷貝模型對象所在的動態鏈接庫,并通過修改模型算法庫即可實現軟件功能模塊和基本統計軟件的整合。
使用策略模式實現統計分析模型動態配置,采用統一的策略接口IStatistic來擴展算法,所有基本統計算法都繼承于該接口。這樣設計的優點可以提高軟件靈活性,支持程序運行期間選擇算法。對象關系如圖3所示。

表1 統計算法模型庫對應表

圖3 策略模式類結構圖
主要包括以下幾個步驟:
(1)接口定義:定義統一的基本統計算法接口IStatistic,并將該接口作為對外交互接口分發給程序開發人員。
(2)算法模塊實現:算法模塊程序開發人員著手實現統計算法。所有統計算法模型都封裝成一個類,并且所有類的實現都繼承IStatistic接口。算法開發人員負責算法的開發和測試工作,算法完成后提交動態鏈接庫。
(3)模型庫管理:算法模塊提交后,通過模型管理功能將統計模型和相關調用信息保存至基本統計模型庫,并實現對算法模型的添加、刪除、修改。算法模型庫是統計計算的核心,軟件通過訪問模型庫即可獲得算法模型位置以及模型相關信息。
(4)模型動態配置:實現統計對象和統計算法動態配置功能,首先獲得所有統計對象,針對每一個統計對象,從基本統計模型庫中根據模型輸入參數和模型類別列出適用于當前統計對象的統計算法。用戶根據需求選擇對應的統計算法,并配置統計單元。

表2 統計對象與統計指標對應表
(5)基本統計計算:用戶執行基本統計計算時,主程序從統計算法模型庫中獲得模型信息,通過反射機制實例化統計模型對象。統計模型對象根據配置文件獲得對象的輸入數據執行統計計算。
本文以Microsoft Visual Studio 2010為開發環境,基于C#語言開發主程序框架,實現地理國情基本統計算法模型管理策略功能開發,整體功能流程如圖4所示。

圖4 基本統計策略模式結構圖
地理國情基本統計軟件通過算法模型管理、統計指標與統計模型匹配、統計計算三部分功能實現統計算法模型庫的管理、統計計算動態配置以及統計算法的調用。
(1)統計算法模型管理功能。開發人員提交的動態鏈接庫,通過算法管理界面導入基本統計軟件中,并從統計算法管理界面完成統計算法模型添加、修改、刪除,通過勾選統計算法模型來控制選中算法的可用狀態。

圖5 統計算法模型庫界面圖
(2)統計對象與統計指標匹配功能模塊。該功能實現統計對象與統計指標的匹配工作。如圖6所示,左側是參與計算的統計對象,右側顯示統計算法。選中統計對象后,右側顯示從統計算法模型庫中獲取匹配的統計算法指標。用戶通過點擊算法指標選擇框即可完成統計算法的配置。

圖6 統計對象與統計指標匹配界面圖
(3)統計計算功能。統計計算是基本統計軟件的主要功能,根據統計指標的配置情況顯示所需計算的指標。計算時通過反射機制獲得統計算法模型實例,核心代碼如下:


若需要添加新的算法,只需完成算法模型的開發,然后通過以上步驟將動態鏈接庫導入到基本統計軟件中,通過算法配置即可實現計算。整個過程無需編譯源程序就可以定制、修改和添加統計算法模型。
本文通過.Net語言提供的反射機制和策略模式研究地理國情基本統計算法模型的管理策略。通過反射機制結合模型數據管理簡化應用軟件的后期維護和升級,降低了軟件開發及維護成本。主程序和統計算法模型之間借助接口實現對象的調用,從而實現代碼之間的耦合。通過這個策略將應用框架中的擴展點以插件方式來動態加載和構建,從而實現統計算法模型動態擴展。
該策略已經用于地理國情基本統計軟件系統中,實現了基本統計算法模型的動態加載和管理。并通過模型動態配置實現了統計計算模型的動態維護,減少了軟件開發的工作量,有效地提高了軟件的復用性和靈活性。
[1]蘇德國,李青元,董春,等.統計分析模型管理工具實現及其在空間輔助決策系統中的應用[J].測繪科學,2007,32(z1):63-65.
[2]趙宏利,李秀冰,李大林.基于反射機制的插件系統軟件設計[J].計算機工程與設計,2010,31(2):348-351,355.
[3]吳東慶,胡小健,楊逢建.反射機制下類工廠模式的實現與研究[J].計算機應用,2006,26(3):705-707.
[4]羅巨波,葉鵬,袁文杰,等.一種支持軟件體系結構重用的反射機制 RMRSA[J].計算機工程與應用,2008,44(32):68-71.
[5]張連育,呂立.基于策略模式的中醫數據挖掘平臺的設計與研究[J].小型微型計算機系統,2011,32(7):1406-1411.
[6]周宏廣,周繼承,劉長生.基于策略模式的缺損數據處理方法[J].長沙航空職業技術學院學報,2004,4(2):47-50.
[7]高慧萍,呂俊.插件式開發技術研究與實現[J].計算機工程與設計,2009,30(16):3805-3829.
[8]孫麗,高飛,胡小華,等.ArcEngine插件式 GIS二次開發框架的設計與實現[J].測繪科學,2011,36(5):214-216.
[9]鄭穎華,武根友.智能決策支持系統中的模型庫及其管理系統[J].科學技術與工程,2006,6(9):1312-1315.