插件式开发技术研究与实现-_第1页
插件式开发技术研究与实现-_第2页
插件式开发技术研究与实现-_第3页
插件式开发技术研究与实现-_第4页
插件式开发技术研究与实现-_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、高慧萍,吕俊:插件式开发技术研究与实现2009,30(163805 0引言随着人们对软件需求的变化,对于软件的重用性、可扩展性、专业化、标准化、系列化等方面有了更高的要求,在此基础上基于面向组件的开发技术引起了越来越多学者的关注,通过插件技术在程序中的使用来提高软件的可扩展性,使软件更易于开发和维护。因此插件式开发技术的研究得以广泛的研究。组件化程序设计技术是一种现代化的软件开发思想。它不同于传统的结构化程序设计,也不同于现在被广泛应用的面向对象程序设计技术,而是位于这两者之上的。它更注重应用系统的全局性,要求从应用系统的全方位来进行考察。在具体到某个组件或模块的设计时,我们仍然需要结构化程序

2、设计和面向对象程序设计技术作为基础。组件式软件程序设计开发的思想是将复杂的软件开发分解成若干个功能组件,这些组件可由不同厂家用任何语言开发,开发的环境也没有特别的限制。若干组件可以根据应用的要求,可靠而有效地组合在一起完成复杂的任务。组件对象模型1(componentobject model ,COM 等标准的提出为组件的描述、组装与管理提供了思路和技术支持。插件技术本身也是一种组件技术,该技术比COM 等组件技术2简单,在构造本地应用系统时更容易实现。本文从介绍插件入手,深入探讨了接口以及插件技术的基本概念和特点、功能和特点,并通过实例介绍插件技术开发的过程。1插件技术3由于插件技术的诸多优

3、点为,现在被不断发展和应用,简单来说插件技术是能通过在软件的设计和研发过程中把软件的需求和功能进行划分,使程序分为两个主要部分主程序和插件。把基础的功能要求设计在主程序中,另外,主程序还提供与插件的接口,使相应的插件能够按一定的规则进行数据交换,从而实现一些功能;而插件则是一个个实现部分功能的组件,这样通过增减插件或修改插件内部功能来调整软件的功能,由于插件是对独立的部分,可以独立进行编辑。从而实现软件功能的扩展和不断改进。1.1插件的种类当前插件技术被广泛用于当前一些使用的软件中,除Adobe 公司的图形处理软件Photoshop 外,使用插件技术的软收稿日期:2008-09-23;修订日期

4、:2009-03-24。软件与算法38062009,30(16计算机工程与设计Computer Engineering and Design件还有Microsoft 的IE 、Netscape 、Macromedia 公司的系列软件,以及Microsoft 的Visual Studio 开发工具及办公软件Office 等。通过研究发现,在各用户软件领域所应用的插件技术大致可分为以下3种类型:(1文本插件:类似批处理命令的简单插件。(2脚本插件:使用一种特殊的脚本语言来实现的插件。(3程序插件:利用已有的程序开发环境来制作插件。1.2插件结构如上所述的插件种类中,被广泛使用的插件类型为程序插件。

5、此类插件体以体系结构实现进行划分,整个插件实现可分为主程序、接口程序、插件程序3个部分4。其中插件管理程序仅仅包含组织协调和调用。程序的功能则有外部插件来实现,所以软件的功能就不像传统的那样固定不变。而且由于这种方法的方便性和灵活性,能够通过插入和改变外部插件来实现软件功能的扩充和改进,这也是插件体系结构开发方法的魅力所在。插件体系结构如图1所示。 (1主程序:完成基本的系统功能,可以插入多个不同的插件,根据需求向插件提供数据,以及接受插件提供的服务。(2接口程序:独立的主程序和插件能够相互结合在一起工作,必须有一套规则和协议来使不同来源的这些程序协调运作。这是一个逻辑上的接口,在主程序和插件

6、中各完成一部分,完成插件的插入、调用和中止服务。(3插件:能动态插入到插件系统中,增强主程序原有的功能。主程序是插件的平台,接口是插件的枢纽,包括插件本身,这三方面都与插件的共享密切相关。1.3插件管理采用插件式开发过程时,主程序设计要能实现对其对应的的插件提供管理,调用插件提供的接口功能,主程序中插件管理功能主要实现以下4个方面的功能:(1注册、反注册插件:插件在使用之前必须能在主程序中注册。只有插件注册成功之后,主程序才能正确找到此插件路径,并根据配置参数对其初始化,另外主程序还要能对已注册但不再需要的插件进行反注册,从而使其不在作为主程序的一部分。(2启用、禁用插件:主程序能够根据用户需

7、求,对已注册但暂时不想使用的插件具有启用或者禁用功能。(3显示插件基本信息:插件一般都是由第三方提供或自行开发的,所以必须提供获取版权等登记处接口。(4配置插件参数:主程序根据能够对插件进行默认参数配置,包括插件的安装路径、插件本身的参数等。2插件的实现方案对于插件的实现,有组件对象模型和动态链接库(dynamiclink library ,DLL 两种方案。2.1组件对象模型组件对象模型(COM 是一种以组件为发布单元的对象模型,这种模型使各软件组件可以用一种统一的方式进行交互。COM 既提出了组件之间进行交互的规范,也提供了实现交互的环境,由于同类插件一般有统一的调用接口,因此可使用COM

8、 技术作为开发插件的基础。使用COM 技术编写插件,易于在插件与系统间进行交互操作,这对编写插件及扩大插件的使用范围是很有利的;但与之相应的是,应用COM 技术编写插件时,涉及大量的COM 技术及原理。2.2动态链接库本文采用动态链接库方案。动态链接库(DLL 是一种具有一定功能的可执行软件模块,也是在Windows 系统中实现软件组件重用的一种方法。动态链接库本身不能独立运行,只能输出变量、函数或类,通过其它能独立运行的程序(主程序调用其内部的功能。主程序有两种使用动态链接库的方式,一种是隐式链接方式,另一种是显式链接方式。使用隐式链接方式,在主程序中可以直接调用动态链接库输出的函数或类。但

9、在编译链接时要提供输出库文件,编译链接后,动态链接库的个数及模块名都是固定的。当程序运行时,由操作系统自动加载程序中所使用的动态链接库;在程序结束时,由操作系统自动释放它们。而使用显式链接方式则不需要输出库文件。它使用操作系统提供的系统函数加载指定动态链接库,然后使用其中的功能,并在适当的时候释放它。可以使用DLL 来实现插件的原因在于可以共享它们所链入的应用程序的地址空间。主程序和插件是通过接口进行交互的。一个接口是一个指向函数的指针列表(virtual table ,vtbl ,每个插件将为接口的函数指针列表分配内存并用每一个函数的地址来初始化此表格。为使用函数指针列表,主程序应该能够访问

10、插件为其函数指针列表所分配的内存,同时还必须能够理解插件放入到函数指针列表中的各个地址。在Windows 中,由于动态链接库与主程序使用的是同一个地址空间,因此主程序访问函数指针列表极其方便。当主程序得到插件的一个接口指针时,连接它们的惟一中介是接口的二进制结构。当主程序查询插件的某个接口时,它所请求的实际上是具有特定格式的一块内存。当插件返回一个接口指针时,它告诉主程序的实际上是此块内存的地址。由于接口是在主程序和插件都能够访问的内存中,因此这种情况实际上与当主程序和插件在同一.EXE 文件中是相同的。对于主程序而言,惟一的区别在于在静态链接和动态链接的情况下它所获得接口指针的方式不同。3插

11、件技术开发实例本文以VC+5为开发平台,使用较为灵活的动态链接库作为插件的提供形式实现插件开发。动态链接库通过外部导出函数为主程序提供对插件功能的调用,主程序在对动态链图1插件体系结构主程序插件管理程序接口插件1插件2插件3高慧萍,吕俊:插件式开发技术研究与实现2009,30(163807接库进行动态装载时也容易实现。在本程序中为了实现关于不同电路计算的方法和获得不同结果,采用此插件开发方式来解决这个问题。在主程序中设计一个接口并建立起到连接和管理功能,由于主程序要实现连接不同的插件程序,因此,在主程序中通过公用的函数接口和参数,来实现不同数据的相互传递;在插件程序方面,根据一定的要求来建立不

12、同的插件程序,在满足接口程序的基础之上,通过自身内部的计算过程来实现本插件要实现的功能。由于插件程序只要有满足和主程序连接的接口函数,其它功能则可以在插件程序中通过不同的类和函数来完成。因此,在设计好主程序的基础上,可以根据需要来编写不同的插件程序来实现功能。采用这种方式的一个主要优点就是可以根据不同的用户需要来订制不同的插件,这样可以通过一个主程序来满足各种用户的需求,对于用户的要求可以根据需求分析来订制相应的插件程序,而不需要修改主程序的代码,从而大大的增大代码的重复使用,提高软件代码的重用性,当用户在使用软件的过程中如果有了新需求和功能要求时,可以直接编写新插件程序。然后在不修改原软件的

13、基础上直接更新插件库,从而提高了软件的扩展性。3.1主程序实现插件中动态链接库的与普通动态链接库调用方式不同。普通应用程序对动态链接库进行调用时,要明确知道需要使用哪些动态链接库,动态链接库又提供有哪些函数等信息。插件的应用程序对动态链接库时,并不需要知道插件动态链接库提供的具体函数功能,而是通过插件的主程序和插件之间建立一种统一的接口标准并通过此接口标准完成对所有后期插件的管理。如上所述,主程序需要完成的功能并不是太多,主要目的是要设计一个良好的接口,从而保证主程序和以后的插件程序进行连接和管理。在本文中通过一个公用函数Plug_Create 作为接口函数的调用入口。在该函数的参数传递中通过

14、一个void指针来作为传递数据的指针,由于这个使用的是void*指针且本身也是一个指针,因此,可以接受根据不同传递的类型的数据,由于在插件编写过程中知道传递的类型,程序员可以直接将传递来的数据类型转化为自己需要的类型,而不会出现错误。在此,主程序和插件之间是通过一个标准的DLL导出函数来实现的,主要用于在主体程序内插件对象的创建,关键代码如下:BOOL Plug_CreateObject(void*pObj*pobj=new CPlugFirst;return*pObj!=NULL;类CPlugFirst是插件程序里动态链接库中的一个类,是由主程序中提供的基类CPlugBase派生出来的,提供

15、了一个插件的大部分主要功能,这样就可以把实现的程序在本类中重载,并实现本插件中的功能。而CPlugBase类则是一个纯虚类也就是前面提到的接口程序,是主程序中一个重要的类,主要负责插件和主程序之间的交互工作如增加插件、插件图标的获取、插件提供的功能接口函数以及插件的释放等,在此类中主要的函数都是虚函数,这些函数虽然没有具体的实现代码,但却是各个插件代码中通过使用重载的方式来完成自身的功能,基类CPlugBase的主要结构如下:class CPlugBasepublic:CPlugBase(;virtual void AddPlug(=0;virtual void Interface(LPBYT

16、E lper,DWORD t_size=0;virtual void ReleasePlug(=0;主程序中要实现对插件的管理工作,这里通过模板vector 类对所有的插件对象进行存储和管理,在主程序中的vector存储的是插件的指针以及对应插件的相关参数,这样在主程序运行的过程中可以通过对vector的遍历和操作来实现对外界插件的管理,由于vector里存入的是各个等待使用的插件指针,当主程序运行时,只要在vector里查找到的插件指针就对应一个外界插件,利用对应指针来调用对应的功能。另外,在主程序界面上还要提供窗口化管理功能,比如按钮、菜单等。这些在主程序运行增加、删除插件时就给予体现。还

17、要能通过一定操作来实现对插件内部功能函数的调用,本文通过向工具条增添按钮的方式来达到此目的。对于插件的资源共享,主程序有相应的模块进行管理。首先主程序要能对插件进行查找并添加到主程序中,这样当主程序起动时,相应的插件自动加载。本文主程序的插件管理模块实现了从应用程序所指定的目录下搜寻是否存在以动态链接库形式提供的插件,并对找到的插件进行加载。3.2插件实现本文中的插件实现包括一个创建动态链接库的过程。在VC+开发环境下可以创建3种不同类型的动态链接库:常规静态动态链接库文件、常规动态链接库文件和扩展动态链接库文件。根据需要可以创建不同的动态链接库,如上文所述,这里的动态链接库中必须有一个类是基

18、于CPlugBase类的,插件在创建时同样也必须遵循其主程序的接口标准,这主要通过导出函数来体现:LIBRARY"PlugFirst"DESCRIPTION'PlugFirst Windows Dynamic Link Library'EXPORTSPlug_CreateObject1在这段代码中LIBRARY是定义本插件的连接名称,是每一个插件中根据自身的需要而进行定义的,通过这段导出函数从而实现与主程序的连接。导出函数Plug_CreateObject 负责在应用程序中创建一个插件对象,在实现虚基类的所有函数前提下,可以创建插件实现过程中需要的类,来完成

19、相应工作。(下转第3829页周军,林庆:基于粒度商的决策树构造算法2009,30(163829 于知识具有粗糙性,粗糙集研究的关键点是对样本训练集边界域的深入研究。本文介绍了粗糙集理论及应用范围,粒度计算理论及应用方向,并把粗糙集和粒度计算理论相结合,研究条件和决策属性集间的关系,从而定义了粒度商的概念。讨论了智能决策系统,针对决策表,基于粗糙集理论,运用粒度思想详细讨论了粒度意义下的决策规则演变问题。介绍了决策树方法,并以该理论为基础提出了一种新的决策树构造算法,通过分析一个决策系统实例,研究证明本文提出的决策树算法是可靠、有效的。最后对粒度商在多变量决策树中的应用作了介绍。总之,粒度意义下的粗糙集应用于智能决策系统,无论在理论上还是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论