地理国情基本统计算法模型管理策略研究
2014-10-31袁卫平董春康风光亢晓琛
袁卫平,董春,康风光,亢晓琛
(1.辽宁工程技术大学 测绘与地理科学学院,辽宁 阜新 123000;2.中国测绘科学研究院,北京 100830;3.武汉大学 资源与环境科学学院,武汉 430079)
1 引 言
地理国情普查统计分析是地理国情普查的重要组成部分,是地理国情普查要素向地理国情信息转化和提升,并与经济社会信息相融合,反映经济、社会、资源、环境的空间分布规律的必要手段和阶段,对于推广普查成果应用、推动地理国情普查与监测具有至关重要的作用。地理国情普查统计分析贯穿地理国情监测全过程,是实现地理国情信息从数据服务到信息服务,再到决策知识服务的必要手段。
地理国情基本统计根据地理国情普查采集的点、线、面等几何特征类型和地理实体对象,以规则地理格网单元、行政区划与管理单元、地形单元为统计单元,进行地形地貌、植被覆盖、荒漠与裸露地表、水域、交通网络、居民地与设施、地理单元的数量、密度、位置、高程、范围等内容的统计。地理国情基本统计是地理国情普查统计分析的基础。
地理国情普查基本统计软件是为地理国情普查基本统计工作专门定制开发的生产性软件操作平台,是地理国情普查统计分析软件的重要组成部分。软件以地理国情普查要素为数据源,集数据分析、统计和报表生成为一体的综合性专业空间数据统计分析软件,是以计算机技术、地理信息技术、数据融合技术、并行计算技术等为基础,提供数据管理、基本统计、报表管理和统计分析的综合解决方案。地理国情基本统计软件工具为地理国情统计分析工作提供数据和技术支撑,并为下一步地理国情综合统计打下坚实的基础。
地理国情基本统计软件开发过程中需解决以下两个问题:
①地理国情基本统计软算法模型复杂,算法种类繁多,部分算法复杂度较高,需要由不同开发人员乃至不同单位的专业人员开发完成。在此基础之上,如何实现不同单位开发功能的测试和联调是一项尤为重要的工作。
②地理国情涉及国家和地方两个层面,国家和地区关注的指标各不相同;同时各地区发展不同,对地理国情基本统计的需求也有差异。软件须适应国家以及各地区的对统计计算的不同需求,因此地理国情基本统计软件在设计初期就必须考虑如何适应需求的变化,实现基本统计的灵活配置。
为解决以上两个问题,本文将研究基于反射机制和策略模式的统计算法模型库管理策略。
2 关键技术
2.1 反射机制
反射(Reflection)是.NET中的重要机制,通过反射在运行时获得.NET中每一个类型(包括类、结构、委托、接口和枚举等)的成员,包括方法、属性、事件,以及构造函数等,并且可以获得每个成员的名称、限定符和参数等。有了反射即可对每一个类型了如指掌,运行时只要获得了构造函数的信息,即可直接创建对象,即使对象类型在编译时还属未知。
通过反射机制可以预先定义对象接口,完成程序功能框架实现对对象接口的调用。对于新添加的功能对象,只需实现预定义的接口就可以在程序运行时通过反射的方式实例化对象。无需编译源程序即可完成功能模块的添加,从而提高程序的复用性和灵活性。
2.2 策略模式
策略模式(Strategy)是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式定义了一系列的算法,并将每一个算法封装起来,而且使其还可以相互替换,让算法独立于使用的客户而独立变化。
一般情况下策略模式主要分为三个角色:
①环境角色(Context):持有一个策略类引用,文中体现为地理国情基本统计软件框架。
②抽象策略(Strategy):定义了多个具体策略的公共接口,具体策略类中各种不同的算法以不同的方式实现这个接口;Context使用这些接口调用不同实现的算法。一般使用接口或抽象类实现,基本统计软件开发过程中为IStatistic统计计算算法接口。
③具体策略(ConcreteStrategy):实现抽象策略类中的相关的算法或操作。这部分为各开发人员实现的具体统计计算类。
图1 策略模式结构图
通过策略模式可以实现统计算法的动态替换以及统计算法的定制功能。
3 管理模式设计
3.1 程序结构
地理统计基本统计包括多个计算指标,涉及GIS、大地、统计等多个专业,部分算法具有非常高的专业性。所以统计过程中基本算法由多个单位合作完成,因此给软件最后的测试和联调带来很大的挑战。
按照传统思路,如果统计算法没有完成,主程序对算法调用功能将无法实现;其次,即使采用接口方式进行开发,则在最终联调时必须将代码拷贝到一起再通过编译测试。此时,若有单位无法完成模块的开发,则会影响整个软件的发布。
本文利用.Net反射机制实现统计算法模型的设计与开发,即将基本统计算法模型以插件方式进行整合。通过这种方式,可以先完成主程序框架,算法模型后期动态添加,框架主要包括以下四个部分:
(1)程序主体框架:完成基本的系统功能,基本统计计算功能根据配置实现对统计算法的调用,开发过程中只面向接口,无需面向具体的计算方法,具体对象实现通过读取配置文件获取统计计算模块位置及对象信息利用.Net反射机制实现。
图2 功能结构图
(2)统计算法模型接口:定义统一的基本统计算法接口,并将该接口作为对外交互接口分发给统计算法开发人员。
(3)基本统计算法模型:统计分析算法都封装成一个类,并且每个类均实现统一接口。开发人员实现统计算法模型并将其封装在动态链接库中。
(4)统计算法模型库:统计算法模型是基本统计软件的核心,通过统计算法模型库,将所有统计算法在系统中实现管理。统计算法模型库保存模型编码、模型名称、模型类别、输入参数、输出参数等信息。通过对统计算法模型库的管理,可实现对各单位开发的算法模型管理。
3.2 模型管理
基于反射机制开发模型库时,主程序设计需要实现对已完成的统计算法模型的管理功能,并为调用算法提供功能接口。其中,模型算法管理功能主要实现以下三方面的功能:
(1)注册模型:统计算法模型完成之后以DLL动态链接库的方式提交,模型管理功能通过对模型算法库的管理对已完成的模型实现注册,保存包括模型编码、模型名称、模型类别、输入参数、输出参数以及模型所属于的动态链接库位置等信息。
(2)启用、禁用模型:模型管理功能能够根据用户的需求,对已注册但暂时不想使用的模型具有启用或者禁用功能。
(3)配置参数:主程序能够对插件进行默认参数配置,算法模型属性以及其适用场景。
通过模型管理功能实现各类统计算法模型的集成,该方式只需要将部件组装而不需要进行编译和链接,在软件各功能模块通过测试基础上,只需拷贝模型对象所在的动态链接库,并通过修改模型算法库即可实现软件功能模块和基本统计软件的整合。
3.3 模型动态配置
使用策略模式实现统计分析模型动态配置,采用统一的策略接口IStatistic来扩展算法,所有基本统计算法都继承于该接口。这样设计的优点可以提高软件灵活性,支持程序运行期间选择算法。对象关系如图3所示。
表1 统计算法模型库对应表
图3 策略模式类结构图
主要包括以下几个步骤:
(1)接口定义:定义统一的基本统计算法接口IStatistic,并将该接口作为对外交互接口分发给程序开发人员。
(2)算法模块实现:算法模块程序开发人员着手实现统计算法。所有统计算法模型都封装成一个类,并且所有类的实现都继承IStatistic接口。算法开发人员负责算法的开发和测试工作,算法完成后提交动态链接库。
(3)模型库管理:算法模块提交后,通过模型管理功能将统计模型和相关调用信息保存至基本统计模型库,并实现对算法模型的添加、删除、修改。算法模型库是统计计算的核心,软件通过访问模型库即可获得算法模型位置以及模型相关信息。
(4)模型动态配置:实现统计对象和统计算法动态配置功能,首先获得所有统计对象,针对每一个统计对象,从基本统计模型库中根据模型输入参数和模型类别列出适用于当前统计对象的统计算法。用户根据需求选择对应的统计算法,并配置统计单元。
表2 统计对象与统计指标对应表
(5)基本统计计算:用户执行基本统计计算时,主程序从统计算法模型库中获得模型信息,通过反射机制实例化统计模型对象。统计模型对象根据配置文件获得对象的输入数据执行统计计算。
4 管理策略实现
本文以Microsoft Visual Studio 2010为开发环境,基于C#语言开发主程序框架,实现地理国情基本统计算法模型管理策略功能开发,整体功能流程如图4所示。
图4 基本统计策略模式结构图
地理国情基本统计软件通过算法模型管理、统计指标与统计模型匹配、统计计算三部分功能实现统计算法模型库的管理、统计计算动态配置以及统计算法的调用。
(1)统计算法模型管理功能。开发人员提交的动态链接库,通过算法管理界面导入基本统计软件中,并从统计算法管理界面完成统计算法模型添加、修改、删除,通过勾选统计算法模型来控制选中算法的可用状态。
图5 统计算法模型库界面图
(2)统计对象与统计指标匹配功能模块。该功能实现统计对象与统计指标的匹配工作。如图6所示,左侧是参与计算的统计对象,右侧显示统计算法。选中统计对象后,右侧显示从统计算法模型库中获取匹配的统计算法指标。用户通过点击算法指标选择框即可完成统计算法的配置。
图6 统计对象与统计指标匹配界面图
(3)统计计算功能。统计计算是基本统计软件的主要功能,根据统计指标的配置情况显示所需计算的指标。计算时通过反射机制获得统计算法模型实例,核心代码如下:
若需要添加新的算法,只需完成算法模型的开发,然后通过以上步骤将动态链接库导入到基本统计软件中,通过算法配置即可实现计算。整个过程无需编译源程序就可以定制、修改和添加统计算法模型。
5 结束语
本文通过.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.