




已阅读5页,还剩46页未读, 继续免费阅读
(计算机应用技术专业论文)组件对象技术在gasor中的应用研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中文摘要 论文题目: 专 业: 硕士生: 指导教师: 组件对象技术在g a s o r 中的应用研究 计算机应用技术。 潘少伟( 签名) 兰查 王家华( 签名) 少伟 摘要 组件对象技术c o m 是m i c r o s o f t 提出的一种基础的软件重用技术。“储层地质统计 分析系统g a s o r ”是一个应用于油气储层随机建模的工作站版本的商品化软件系统。 随着计算机技术的发展,w i n d o w s 逐渐成为主流的操作平台,迫切需要用c o m 技术在 w i n d o w s 平台上对g a s o r 系统进行重新开发。 本文论述了基于c o m 的软件开发方法的基本原理,以及c o m 的两种可重用模型 一包容和聚合的实现。给出了基于c o m 的g a s o r 系统的总体结构和系统中各个组件 的功能。本文研究了用v c 开发g a s o r 系统中网格粗化组件的步骤和过程。先开发网 格粗化组件的四个子组件:渗透率粗化组件、孔隙度粗化组件、顶底粗化组件和深度及 有效厚度粗化组件。给它们添加组件接口和方法,然后应用包容技术把它们组合成整个 网格粗化组件,达到了组件重用的效果。本文随后研究了只有一个子组件的储量分析组 件的开发过程。主要工作是为储量分析的子组件添加一个组件接口。 应用c o m 技术来开发g a s o r 系统中的网格粗化和储量分析组件,缩短了g a s o r 系统的开发周期,降低了它的开发成本,提高了可移植性和维护性。 关键词:c o m 重用g a s o r 包容接口 论文类型:应用研究 ( 本文得到“储层地质统计分析系统g a s o r p c 微机版开发与推广”,陕西省科技厅 2 0 0 3 年科技推广计划项目( 项目编号为2 0 0 3 k t - 0 0 8 ) 的资助) 英文摘要 s u b j e c t a na p p l i c a t i o ns t u d yo ft e c h n o l o g yo fc o m p o n e n to b j e c tm o d e lo n g a s o r s p e c i a l i t y :c o m p u t e ra p p l i c a t i o nt e c h n o l o g y n a m e :p a ns h a o w e i ( s i g n a t u r e ) i n s t r u c t o r :w a n gj i a h u a ( s i g n a t u r e a b s t r a c t c o m p o n e n to b j e c tm o d e li saf o u n d a t i o nt e c h n o l o g yo fs o f t w a r er e u s ep u tf o r w a r db y m i c r o s o f t g a s o r ( g e o s t a t i s t i c a la n a l y s i ss y s t e mo fr e s e r v o i r ) b a s e do nu n i xs y s t e mi sa c o m m e r c i a ls o f t w a r ea p p l i e dw i d e l yi nt h ef i e l do fs t o c h a s t i cr e s e r v o i rm o d e l i n g w i t ht h e d e v e l o p m e n to fc o m p u t e rt e c h n o l o g y ,w i n d o w ss y s t e mh a sb e e nb e c o m i n g t h em a i no p e r a t o r s y s t e mg r a d u a l l y s o ,i ti su r g e n t l yt or e d e v e l o pg a s o ru s i n gc o m o nw i n d o w ss y s t e m - i nt h i sp a p e lt h eb a s i cp r i n c i p l e so nh o wt od e v e l o ps o f t w a r eb a s e do nc o ma r e d i s c u s s e d ,t h et w or e u s a b l ew a y so nh o wt or e a l i z ec o n t a i n i n ga n da g g r e g a t i o nm o d e la r e s t u d i e d t h ew h o l ef r a m e w o r ko fg a s o rb a s e do nc o m i sd e s i g n e d ,a n dt h ef u n c d o no f e v e r yc o m p o n e n ti sd i s c u s s e d t h es t e p sa n d c o u r s eo fd e v e l o p i n gg r i du p s c a l i n gc o m p o n e n t w i t hv i s u a lc + + a r es t u d i e d f i r s t l y , t h ef o u rs u bc o m p o n e n t sa r ed e v e l o p e d ,w h i c hc o n s i s to f t h ep e r m e a b i l i t yu p s c a l i n g ,t h ep o r o s i t yu p s c a l i n g ,t h et o pa n db o t t o mu p s c a l i n ga n dt h e h e i g h ta n dt h i c ku p s c a l i n g s e c o n d l y , t h ei n t e r f a c e sa n d m e t h o d sa r ea d d e dt ot h e m l a s t l y , t h es u bc o m p o n e n t sa r ei n t e g r a t e dt of o r mt h eg r i du p s c a l i n gc o m p o n e n tb ym e a n so f c o n t a i n i n g ,w h i c hh a sr e a l i z e dt h er e u s eo ft h es u bc o m p o n e n t s t h e nt h ed e v e l o p m e n to f t h e r e s e r v ea n a l y s i sc o m p o n e n ti ss t u d i e d ,w h i c hi so n l ym a d eu po fo n es u bc o m p o n e n t i ti st h e e m p h a s i st oa d d a ni n t e r f a c ef o ri t ss u bc o m p o n e n t g r i du p s c a l i n ga n dr e s e r v ea n a l y s i so fg a s o ra r ed e v e l o p e dw i t hc o m ,w h i c h s h o g e n e dt h ed e v e l o p m e n tp e r i o do fg a s o r ,r e d u c e dt h ed e v e l o p m e n tc o s t ,r a i s e dt h e t r a n s l a t i o na n ds a f e g u a r d i n g k e yw o r d s :c o m r e u s eg a s o rc o n t a i n i n gi n t e r f a c e d i s s e r t a t i o n :a p p l i c a t i o ns t u d y ( t h i sp a p e ri ss u p p o r t e db ys c i e n c ea n dt e c h n o l o g ys p r e a d i n gp r o j e c to fs h a n x ip r o v i n c e s c i e n c ea n dt e c h n o l o g yb u r e a ui n2 0 0 3 ) i i i 学位论文创新性声明 本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成 果。尽我所知,除了文中特别加以标注和致谢中所罗列的内容以外,论文中不包含其他 人已经发表或撰写过的研究成果;也不包含为获得西安石油大学或其它教育机构的学位 或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中做 了明确的说明并表示了谢意。 申请学位论文与资料若有不实之处,本人承担一切相关责任。 论文作者签名 蟠少牛 日期:埘5 ,5 肜 学位论文使用授权的说明 本人完全了解西安石油大学有关保留和使用学位论文的规定,即:研究生在校攻读 学位期间论文工作的知识产权单位属西安石油大学。学校享有以任何方法发表、复制、 公开阅览、借阅咀及申请专利等权利。本人离校后发表或使用学位论文或与该论文直接 相关的学术论文或成果时,署名单位仍然为西安石油大学。 论文作者签名 导师签名 焉少伟 日期 2 0 0 5 j 8 ,1 8 日期:证鸟匕:z z 第一章绪论 第一章绪论 l 。1 组件对象技术c o m 随着软件科学的不断发展,新的软件系统越来越复杂,尤其是近几年随着i n t r a n e t i n t e m e t 的迅速发展,使软件应用置身于更加广阔的环境中,从而对应用软件提出了更 高的要求,这就使得软件设计更加困难。 自2 0 世纪7 0 年代面向对象技术出现以后,该技术在软件业界得到了广泛的应用。 面向对象技术是一种建立在先前的软件经验上的、与软件有关的新思考方式。它统一了 标准,功能强大,独立于过程,容易掌握,迅速成为了软件业的主流开发方法。8 0 年代 以后,面向对象的方法已成为程序设计的总趋势。在系统设计上,1 9 9 4 年到1 9 9 6 年, 软件工程学家们共同提出了新的面向对象的分析与设计语言一u m l ( u n i f i e dm o d e l i n g l a n g u a g e ) 语言。近几年,组件技术逐渐成为了软件开发的新趋势。o m g ( o b j e c t m a n a g e m e n tg r o u p ,对象管理组织) 和m i c r o s o f t 分别提出了c o r b a ( c o m m o no b j e c t r e q u e s t b r o k e r a r c h i t e c t u r e ,公共对象请求代理结构) 和c o m ( c o m p o n e n t o b j e c t m o d e l , 组件对象模型) 标准,目前c o r b a 主要应用于u n i x 操作系统平_ 台上,而c o m 则主 要应用于w i n d o w s 操作系统平台上。 在程序结构上,组件对象技术c o m 是继面向对象技术的又一重大发展。按照组件 化程序设计的思想,复杂的应用程序被设计成一些小的、功能单一的组件模块,这些组 件模块可以运行在同一台机器上,也可以运行在不同的机器上。在理想的隋况下,每台 机器的运行环境和操作系统可以不同。 从此,c o m 以其统一的标准,强大的兼容性,成为了软件发展的新方向。c o m 充 分继承了面向对象技术的优点,进一步在概念上将对象模型从中问分割开来。c o m 并不 是一种计算机语言l ij ,而是一种以软件组件为单元的软件开发模型。c o m 是基于二进制 的代码重用,不存在类库重用时的问题。此外,c o m 充分利用了原有的d l l ( d y n a m i c l i n kl i b r a r y ) 机制,并加以发展,改变了重用的方法,克服了d l l 本身所固有的缺陷, 实现了更高一级的灵活性。它使各软件组件可以以一种统一的方法进行信息交互。c o m 既提供了组件之间进行交互的规范,也提供了实现交互的环境,因为组件对象之间交互 的规范不依赖于任何特定的语言,所以c o m 也成为不同语言协作开发的一种标准1 2 j 。 1 2c o m 的基本术语 组件对象技术c o m 是一种比较新颖的技术,其中有很多新的术语和概念,下面重 点研究c o m 规则的几个核心的术语和概念。 ( 1 ) 类( c l a s s ) ,就是将相关的一组数据和一些特定的功能组合在一起的一个特殊 的函数。c o m 中类的概念和面向对象技术中类的概念既有区别又有联系。 两安年i 油大学硕士学位论文 ( 2 ) 对象( o b j e c t ) ,与c + 十中对象的概念类似,对象是某一个特定类的实例。 ( 3 ) 接口( i n t e r f a c e ) ,一组逻辑上相关的函数。接口的功能是使任何程序能够访 问这些函数,是组件向程序和其他组件以及应用程序提供的一组公用的功能定义。 ( 4 ) 全局唯一标志符( g u i d ,g l o b a l l yu n i q u ei d e n t i f i e r ) ,一个1 2 8 位的整数,每 个生成一个组件的接口,就会产生一个惟一标志该接口的g u i d ,并向操作系统和其他 软件标识这个组件接口。组件或接口有任何改变时,都会产生新的g u i d 3 1 。 ( 5 ) 类标志符( c l s i d ,c l a s si d e n t i f i e r ) ,又叫做类i d ,也是一个1 2 8 位的g u i d 。 客户程序使用c l s i d 来标志c o m 对象。使用c l s i d 标志对象在全局范围内具有惟一 性【3 】。 ( 6 ) 组件代码( c o m p o n e n tc o d e ) ,是组件进行的实际工作,建立组件基础结构之 后,进行组件代码的编制以实现组件功能【3 】。 ( 7 ) 二进制兼容性( b i n a r yc o m p a t i b i l i t y ) ,c o m 完全符合二进制标准,所以,不 论是用什么语言编制的c o m 组件,都可以和其他的c o m 组件兼容,并可其他软件使 用【3 1 。 1 3 储层随机建模技术 建立定量的储层地质模型是现在油藏描述行业的核心术语,主要有两种建模的方法, 分别是确定性建模和随机建模。由于所获取的地下信息的不完备性( 特别是油田开发的 早期阶段) ,人们趋向于采用随机建模技术来表征不确定性和空间分布的非均质性。储层 随机建模就是地质统计学中的随机模拟技术在油藏描述中的应用,是指根据已知的信息, 以随机函数为理论,应用随机模拟方法,产生可选的、等概率和高精度的储层模型的方 法。目前在储层随机建模中多采用相控建模技术,即首先建立相模型,以相模型为控制 建立参数分布模型【4 1 。 该项技术是在2 0 世纪8 0 年代初期提出的,在9 0 年代得到了迅速发展,目前已经成 为油藏描述中必不可少的关键技术。 1 4 研究背景 “储层地质统计分析系统g a s o r ”是一个应用于油气储层随机建模的工作站版本 的软件系统。该系统自1 9 9 0 年开始研究以来,历经“八五”国家重点科技攻关项目、“九 五”国家重点科技攻关项目、中国石油天然气集团公司等重点科研项目的攻关,以及和 大庆、胜利、辽河、长庆等油田的横向合作项目的研究,已经成为国内油气储层随机建 模方面的商品化软件。 该系统以地质统计学中的随机建模理论为基本方法,以来自各油田的实际测井、井 位等数据为输入参数,来建立地质构造、层、沉积相、物性参数、砂体厚度等模型,以 形成相应的三维定量地质模型【5 】。 第一章绪论 但随着微型计算机技术的发展,w i n d o w s 逐渐成为了主流的操作系统,工作站版本 的软件系统已经不能适应各个大油田储层建模工作的需要,因此,用先进的软件开发技 术来开发微机版的g a s o r 系统就成为一种必须的选择。基于组件对象技术c o m ,通过 对原g a s o r 系统的各个功能模块的分析、抽象,提炼出其基本的操作行为和属性,构 建出基本的组件。这种开发方式具有较高的软件重用性,避免了软件模块的重复开发, 是一种比较成熟的方法。 1 5 研究内容 在g a s o r 微机版的开发过程中,利用组件对象技术,根据其已有的功能,把原来 系统中的各个模块分割为不同的部分,封装为不同的组件,来实现在软件中的重用。 首先,本论文建立了基于组件对象技术c o m 的g a s o r 系统的总体结构图,然后 详细的研究了如何应用组件对象技术来开发系统的两个重要部分网格粗化组件和储量 分析组件。 1 6 基于c o m 的g a s o r 系统的开发环境 基于c o m 的g a s o r 微机版的开发环境是p c 机,2 5 6 m b 内存,操作系统是 w i n d o w s 2 0 0 0 ,开发工具是v i s u a lc + + 6 0 。 西安石油大学硕士学位论文 第二章基于c o m 的软件开发方法 在过去的几十年里,软件工程的专家学者们一直在致力于研究各种新的程序设计技 术,以求不断提高软件开发和软件维护的效率。从传统的结构分析与结构化设计到面向 对象的程序设计,软件开发的可重用性、可维护性、灵活性等方面都有了很大的提高。 但是,面向对象技术的可重用性仅仅局限于同种开发环境下,即要求有相同的开发平台 和相同的开发语言,对于不同的开发环境,面向对象开发的可重用性仍然很差。然而, 计算机应用技术的飞速发展,使得软件开发平台、开发语言的多样性成为必然,因此, 寻求与开发平台和开发语言无关的软件开发方法仍然是一个急待解决的问题。组件技术 就是在这种情况下产生的。 直观上说,组件技术是一种二进制标准,即可执行文件标准【6 】。采用组件技术,软 件系统的开发就可转化为组件的开发与集成。基于组件的软件开发是提高软件系统生产 效率和产品质量的有效途径【”。由于组件具有积聚性,用户可在原有组件的基础上开发 新的组件或将原有组件集成为一个大的组件。随着组件的不断积累,软件开发中开发的 比重不断降低,而集成的比重则不断提高,因此可大大提高软件的开发效率,降低开发 成本【8 】。 由于原g a s o r 系统是由若干个子模块组成的,并且在各个子模块之间,有许多小 的功能模块是通用的,因此,为了使微机版的g a s o r 系统的结构更趋于规范化和合理 化并实现软件的重用,而且为以后的系统升级提供一定的便利,在该系统的开发过程中 采用了组件技术中的一种一组件对象技术c o m 。下面详细的研究组件技术的相关内容。 2 1 组件技术 组件技术是继模块化、结构化、面向对象的软件设计方法后发展起来的又一新的软 件开发方法,其最终目标是能够像搭积木一样装配应用程序。组件技术是一种二进制标 准,与开发语言无关。遵循这一规范所建立的组件对象,可以与应用程序,其它的组件, 甚至是其它计算机上的组件对象相互通信与交互。 基于组件的开发方法( c o m p o n e mb a s e dd e v e l o p m e n t ,简称c b d ) 模拟了硬件设计 的思想1 2 j 。在c b d 下,一个应用程序是由若干个可重用的组件组合而成的,与结构化方 法中的模块和面向对象方法中的对象不同,一个组件足一个大粒度的、自包容和基于标 准的软件部件,每个组件提供一个或多个接口,接口是组件与客户和其它组件之间通信 的唯一途径。一个组件同一个微型应用程序类似,都是己编译、链接好的二进制代码。 应用程序由多个这样的组件组合而成。在需要对应用程序进行修改时,只需将构成此应 用程序的某个组件用新版本的替换掉即可,可见组件在应用程序中完全是动态的。 从重用的角度看,结构化方法中的模块是面向系统的功能单位,是特定的为该系统 服务的,加上基于过程的不稳定性,几乎没有重用的可能。面向对象方法在重用性方面 第二章基于c o m 的软件开发方法 有了较大的提高,通过使用类库和继承来较好的实现了代码的重用。但是以面向对象方 法中的类和对象作为重用单位存在着粒度太小的缺点,并且由于继承索引器的对象之间 的依赖性,限制了具有独立性要求的重用。 组件建立在面向对象的基础之上并超越了面向对象的思想。组件本身可以用面向对 象的方法实现,完成一项独立的业务逻辑,实现的是对象重用。组件不存在继承的概念, 更强调封装的独立性,为重用提供了更好的支持。组件的内部实现细节是隐藏的,它通 过提供一个或多个接口,向外界提供它的服务,组件的客户通过接口使用组件所能提供 的服务,而无须知道这些服务是如何实现的。 组件能很好地支持分布式应用。在c b d 下,应用由多个组件动态组合而成。组件 的物理位置是透明的,一个组件可以分布在网络上,同时为多个应用提供服务。所有的 通信都由组件协议来完成,对组件客户和组件开发者保持透明,这是c b d 的一个显著 的优点一l 。 如上所述,组件技术在可扩充性、可重用性和支持分布式应用方面都支持的很好。 现在组件设计、组件调试己逐渐成为一种主流的软件开发方案。组件技术在不停的发展 之中。 2 1 1 组件技术的特点 与结构化软件开发技术相比较,组件技术有一些显著的特征: ( 1 ) 真正的软件重用和高度的互操作性。组件是完成通用或特定功能的一些可互操 作的、可以重用的模块。应用开发者可以利用他们在不同应用领域的知识来自由组合生 成合适的应用系统。 ( 2 ) 接口的可靠性。在这种基于组件的软件中,组件之间的接口是组件软件的关键, 组件接口一旦被发表,它们就不能被修改。也就是说,一旦组件使用者通过某接口获得 某项服务,则总可以从这个接口获得此项服务。因此,组件封装后,只能通过已定义的 接口来提供合理的、一致的服务。这种接口定义的稳定性使客户应用开发者能构造出坚 固的应用。 ( 3 ) 可扩充服务。每个组件都是自主的,有其独自的功能,只是通过接口与外界通 信。通过消息传送互相提供服务,基本组件的互操作是交互服务的。当一个组件需要提 供新的服务时,可通过增加新的接1 3 来完成,不会影响使用原接口的用户。用户也可以 重新选择新的接口来获得服务。 ( 4 ) 具有强有力的基础设施。为了使组件有机地胶合在一起,实现无缝连接,需要 功能很强的基础设施。这些基础设施是获得重用性、可移植性和互操作性的有效工具。 这样就可知道如何找到组件提供的服务,并能在应用程序编译时进行静态联编【1 0 ,用户 必须在编译时就知道要访问的服务器接口,或在应用程序执行时进行动态联编。在动态 机制中,客户可以不知道可用的服务器和接口信息,而是在运行时间内搜索可用服务器, 西安石油大学硕十学位论文 找到服务器接口,构造请求并发送,最后收到应答。 ( 5 ) 具有构建和胶合组件的工具。在设计与其它应用软件的接口时,利用构建和胶 合组件的工具,可以方便地增加和替换应用中的组件,充分发挥可重用的优势,实现客 户应用程序的组装和升级。 2 1 2 组件技术和面向对象技术的关系 组件技术是在面向对象软件开发方法的基础上逐渐发展起来的一种新技术。对象是 人们提出重用性要求的第一次尝试,由于面向对象开发环境本质上不够完善,缺乏解决 对象互操作性的公共基础设施等原因,妨碍了它们成为主流产品。对于组件技术和面向 对象技术之间的关系有以下几种观点: ( 1 ) 组件技术抽象了许多面向对象技术的实现概念【i l 】,是面向对象技术在系统设 计层面上的一种自然延伸; ( 2 ) 组件技术是面向对象技术的一个简单化的版本,它强调封装性,但忽略了继承 性和多态性; ( 3 ) 组件技术是在体系结构层面上构造系统的方法,并且可以采用面向对象方法很 方便地实现组件。这三种观点各有所长,都不全面,但对理解组件技术和面向对象技术 之间的关系却很有意义。下面用表格来对比一下组件技术和面向对象技术之间的关系。 表2 - 1 组件技术和面向对象技术的关系 组件技术面向对象技术 应用程序间更大范围应用程序内更大行为 目标 的组件重用的重用 基本关系请求,响应的关系行为的继承关系 可扩展的类的层次关 重点组件接口不变 系 应用程序具有定义良应用程序通过对象和 最终目的好的接口,可以很容类的层次关系的扩展 易的替换其中的组件来改变行为 有时一个组件就是一个对象,但一般意义上组件好比是“化合物”,而对象好比是个 “原子”,组件能被直接使用,而不必关心构成它们的原子,在面向对象开发中实现软件 重用一般是要提供源代码的,而用组件实现则完全不用了解它是如何实现的。 第二章基于c o m 的软件开发方法 2 2c o m 技术 目前,组件技术已经在软件复用中体现出了巨大的优势,但是到现在,组件本身的 标准和规范尚未有统一和完整的定义。由于w i n d o w s 操作系统的流行,组件对象技术 c o m 深受程序员的喜爱,现已有大量的软件系统基于此组件技术而建立,因此g a s o r 系统就采用m i c r o s o f t 的c o m 技术作为其开发技术。下面就从c o m 的发展动态、内存 结构、工作原理、c o m 的特点等方面具体的研究c o m 技术。 2 2 1c o m 技术的发展动态 m i c r o s o f t 最初并没有刻意发展一种组件化系统。c o m 技术是从o l e ( o b j e c tl i n k i n g a n de m b e d d i n g ) 技术中发展起来的【”。而且后来进一步的发展表明,c o m 所定义的组 件标准的广泛性远远超过了o l e 所具有的能力。 o l e 的第一个版本即o l e l 仅指复合文档( c o m p o n e n td o c u m e n t ) 的概念。在o l e l 中,组件程序和客户程序之间进行的通讯并没有使用c o m 规范,而是采用了种被称 为动态数据交换( d d e ,d y n a m i cd a t ae x c h a n g e ) 的机制。d d e 是建立在操作系统的消 息机制的基础上,其最大的缺点是程序执行效率低、系统健壮性差,使用也不够方便。 d d e 的这些缺陷限制了o l e l 的发展,于是在o l e 的后续版本即o l e 2 中,m i c m s o f l 重新编写了底层代码,放弃了d d e ,采用了新的c o m 模型,因此,o l e 2 成了第一个 应用c o m 构架的软件系统。 在计算机软件发展的早期,一个应用系统往往是一个单独的应用程序。应用程序越 复杂,系统开发的难度就越大。并且,一旦系统的某个版本完成以后,在下一个版本出 来之前,应用程序不会再有改变。对于一个庞大的程序来讲,更新版本的周期很长,在 两个版本之间,如果由于操作系统或硬件平台发生了变化,则系统很难适应这样的变化。 所以这类单体应用程序已经不能满足计算机软硬件的发展需要。 从软件的模型角度来考虑,一个很自然的想法是把一个庞大的应用程序分成多个模 块,每一个模块保持一定的功能独立性,在协同工作时,通过相互之间的接口完成实际 的任务。 把每一个这样的模块变成组件,一个设计良好的应用系统往往被划分成一些组件, 这些组件可以单独开发、编译和调试。当所有的组件开发完成后,把它们组合在一起就 得到了完整的应用系统。当系统的外界软硬件环境发生变化或用户的需求有所更改时, 并不需要像以前一样重新设计整个应用系统,而只需对相关的组件进行修改,然后重新 组合即得到新的升级软件。 组件软件最为关键的部分是组件之间的接口,接口是双方进行通信的基础口j 。c o m 就是这样的一种组件标准。c o m 不仅提供了组件之间的接口标准,它还引入了面向对象 的思想。在c o m 标准中,对象是一个非常活跃的元素,常把它称为c o m 对象。组件 西安石油大学硕十学位论文 模块为c o m 对象提供了活动的空间,c o m 对象以接口的方式提供服务,这种接口称为 c o m 接口。 c o m 规范所定义的组件模型的主要特性是:面向对象、客户服务器、c o m 规范 的语言无关性、对进程的透明性和它的可重用机制。自从c o m 在o l e 2 中第一次被应 用以来,c o m 也一直在不断的改进。 2 2 2c o m 技术概述 c o m 是m i c r o s o f t 提出的一种基于二进制标准与编程语言无关的软件构架,它使各 软件组件可以用一种统一的方式进行交互【1 】。c o m 不仅定义了组件程序之间进行交互的 标准,也提供了组件程序运行所需的环境。c o m 是一种开放的组件规范标准】,其核 心定义了软件组件与其使用者如何在二进制接口标准上进行交互。它包括c o m 规范和 c o m 实现两大部分,c o m 规范定义了组件的通信机制,这些规范不依赖于任何特定的 语言和操作系统,其中主要包括:c o m 核心、结构化存储、统一数据传输和命名与系统 级的实现。 c o m 核心规定了组件对象与客户通过接口标准进行交互的准则,结构化存储定义了 复合文档的存储格式以及创建文档的接口,统一数据传输约定了组件之间数据交换的标 准接口,智能命名给予对象一个系统可标识的唯一标记。c o m 标准的实现部分主要是 c o m 库( c o m 库主要包含在o l e 3 2 d l l 和r p c s s e x e 中) ,它为c o m 规范的具体实 现提供了一些核心服务,这些核心服务主要完成定位组件和将组件装入内存,执行进程 间通讯和远程通讯等一些实际性的工作。 2 2 3c o m 的内存结构 c o m 的内存结构是理解c o m 原理和进一步了解c o m 的基础,是c o m 规范的核 心内容。c o m 的内存结构包括c o m 对象和c o m 接口,其中c o m 接口包括i u n k n o w n 接口和用户自定义接口,i u n k n o w n 接口是所有用户自定义接口的“祖先”。 ( 1 ) c o m 对象 对象是类的实例,c o m 对象是c o m 组件提供给客户以对象形式封装起来的实体, c o m 对象是客户程序与组件程序通信的主体。类似于c + + 语言中类( c l a s s ) 的概念, c o m 对象也包括属性( 也称为数据成员) 和方法( 也称为成员函数) 0 2 ,c o m 对象的 属性反映了对象的存在和状态,即区别于其它对象的要素,c o m 对象的方法就是对象提 供给外界服务的接口,客户必须通过接口才能获得对象的服务。对于c o m 对象来说, 接口是它与外界进行交互的唯一途径,接口是用g u i d 标识的。c o m 对象是用c l s i d 标识的,用c l s i d 标识对象可以保证在全球范围内的唯一性1 1 ”。 ( 2 ) c o m 接口 c o m 接口是一组函数的数据结构,通过这组数据结构,客户代码可以调用组件对象 第二章基于c o m 的软件开发方法 的功能。接口提供了不同对象之间的一种连接,每个接口被分配一个l i d ( i n t e r f a c e i d e n t i f i e r ) ,每个i i d 也是一个长度为1 2 8 位的g u i d 结构。c o m 规范使用i d l ( i n t e r f a c e d e f i n i t i o n l a n g u a g e ,接口定义语言) 来定义接v i 1 1 。接口内存模型如图2 一l 所示: 匝卜ij 厂、 幽抖 l 接口函数1j 日t l 接口函数2 接口函数3类实现 接口函数4 图2 1 接口内存模型 由图2 一l 可知,客户程序用一个指向接口数据结构的指针来调用接口的各个成员函 数。接口指针实际上又指向另一个指针,这第二个指针指向一组函数,称为接口函数表, 接口函数表中每一项为4 个字节长的函数指针,每个函数指针与对象的具体实现相连接。 通过这种方式客户只要获得了接口指针就可以调用c o m 对象的所有功能。通常把接口 函数表称为虚方法表( v i r t u a lm e t h o d t a b l e ,简称v m t ) ,如图中v t a b l e 所示,指向v t a b l e 的指针为p v t a b l e 。对具体的接口来说,它的虚方法表是确定的,所以接口成员函数和成 员函数在v t a b l e 中的顺序是不变的;对于每个成员函数来说,其参数和返回值也是确定 的。 ( 3 ) i u n k n o w n 接口 根据c o m 规范,c o m 定义的每个接口都是由i u n k n o w n 接口直接或间接继承来的 1 13 1 oi u n k n o w n 接口提供了两个非常重要的特性:生存期控制和接口查询。i u n k n o w n 引 入了“引用计数”方法可以有效的控制对象的生存周期。 i u n k n o w n 接口包括3 个成员函数:q u e r y i n t e r f a c e ,a d d r e f 和r e a l e a s e 【1 4 】。 函数q u e r y l m e r f a c e 用于查询组件是否支持某个特定的接口。如果支持,则 q u e r y i n t e r f a c e 返回一个指向该接口的指针;否则就返回错误的代码。q u e r y i n t e r f a c e 带 有两个参数: h r e s 观l s t d c a l lq u e r y i n t e r f a c e ( c o n s tl i d & i i d , v o i d ”p p v ) ; 这里的第一个参数标识了客户所需要的接口,此参数是一个“接口标识”( 1 i d ) 结 构。 假设客户有了一个指向i u n k n o w n 的指针p i ,为了知道相应的组件是否支持某个特 定的接口,客户可以调用q u e r y i n t e r f a c e ,并给它一个接口标识符,若q u e r y i n t e r f a c e 成 功的返回,则可以使用它返回的指针,用代码具体的表示该过程如下: v o i df o o ( i u n k n o w n + p i ) 西安石油大学硕士学位论文 1 x + p l x = n u l l ;为接口i x 定义一个指针 为接口i x 发出请求 h r e s u l th r2p i 一 q u e r y i n t e r f a c e ( i i d i x ,( v o i d ”) & p i x ) ; 检验返回值 i f ( s u c c e e d e d ( l r ) ) 调用接口的成员函数 p l x 一 f x 0 ; ) 函数a d d r e f 和r e a l e a s e 用于对引用计数进行操作。当客户得到一个指向该对象的 接口指针时,引用计数加1 :当客户用完了该接口指针后,引用计数减1 。当引用计数减 少到0 时,c o m 对象就把它自己从内存中清除。当客户程序对一个接口指针进行复制, 则引用计数也应该增加。i u n k n o w n 的接口成员函数a d d r e f 和r e a l e a s e 分别完成引用计 数增1 和减1 的操作。 2 2 4c o m 的接口描述语言i d l i d l ( i n t e r f a c ed e s c r i p t i o nl a n g u a g e ,接e l 描述语言) 提供了一种不依赖于任何语言的接 1 3 描述方法【,因此,它可以成为组件程序和客户程序之间的共同语言。在c o m 规范 中,i d l 不仅用来定义c o m 接口,也可以描述自定义的数据结构。i d l 描述接口的实 例如下: o b j e c t , u u i d ( 8 a 2 e 6 c f a b a c 8 4 a 1 8 - b c 8 4 一o c 0 4 5 6 0 8 4 l e 4 ) , h e l p s t r i n g ( ”i m a t hi n t e r f a c e ”) , p o i n t e r _ d e f a u l t ( u n i q u e ) i n t e r f a c ei m a t h :i d i s p a t c h ( ) ; 这里,o b j e c t 表示所定义的接口为一个c o m 接口,关键字o b j e c t 是m i c r o s o f t 对于 i d l 的一个扩展。第二个关键字u u i d 指定了相应接口的i i d 。第三个关键字用于将一个 帮助串放到类型库中。第四个关键字p o i n t e r d e f a u l t 的作用就是告诉m i d l ( m i c r o s o f t 第一二章基于c o m 的软件开发方法 的i d l 编译器) 在没有为指针指定其他属性时应如何处理此指针。 2 2 5c o m 的工作原理 c o m 对象与客户之间的交互是典型的客户j r 务器模式( c l i e n t s e r v e r ) 。客户向c o m 库发出创建组件的请求,并传递一个类标识符( c l s i d ) 给c o m 库;c o m 库根据c l s i d 在w i n d o w s 注煅表中查询组件对象的设置,激活对象并创建一个相应的实例,组件服务 器将实例返回给客户,客户直接通过接口调用组件服务器提供的功能。在这一过程中, 组件与接口用一个1 2 8 位的c l s i d 在注册表中表示自己的位置、安全性及版本号等信息。 对于不同的组件与接口,这个c l s i d 是唯一的。 按客户与组件对象是否在同一进程空间,可分为进程内组件、进程外组件和远程组 件。进程内组件以d l l 文件的方式存在。组件对象在运行时刻被装入客户进程中。进程 内组件不依赖于客户程序,运行效率高。但是,一旦组件程序有严重错误,将会引起客 户程序的崩溃1 2 j 。 进程外组件运行于一个独立的进程空间,可以d l l 或e x e 文件的方式存在。组件 程序通过本地过程调用l p c ( l o c a lp r o c e d u r ec a l l ) 与客户程序进行通讯。客户只与同 一进程中的代理( p r o x y ) 对象打交道,组件程序也只与同一进程中的存根d l l 打交道, 本地过程调用只在代理对象和存根d l l 之间进行。复杂的l p c 调用及函数的参数、返 回值的解释与传递均由代理存根( p r o x y s t u b ) 来完成。代理存根只和接口的定义有 关,接口中各函数的参数及返回值确定之后,代理存根d l l 便确定下来了,和接口的 实现没有关系。进程外组件与客户程序的调用关系如图2 2 所示: 返 e d 客户程序一 a b c 一组件程序 一( 客户进程) 一 一( 组件进程) b 代理对象通过 匝磊卜 叫代理d l l 中i l p c 调用组件存根 接【代理对象l ,。 i1e 存根d l l 通过 i ! 堡竺卜_ l p c 返回结果 d 服务完成 后返回 c 调用组件对象 接口成员函数 图2 - 2 进程外组件与客户程序的调用关系图 由图2 2 可知,客户程序只与同一进程中的代理对象打交道,组件程序只与同一进 程中的存根d l l 打交道,l p c 只在代理对象和存根d l l 之间进行。代理d l l 和存根 d l l 除了完成l p c 调用之外,它还需要对参数和返回值进行翻译和传递,客户程序调用 的参数,首先经过代理d l l 处理,把参数以及其它的一些调用信息组装成一个数据包给 组件程序,该过程称为参数列集( m a r s h a l l n g ) ;组件进程接收数据包之后,要进行解包 操作,把参数信息提取出来,该过程称为散集( u n m a r s h a l i n g ) ;然后再进行实际的接口 调用。函数的返回值和输出参数在返回的过程中也要进行列集和散集操作,只是在存根 西安石油大学硕士学位论文 d l l 一端进行列集,在代理d l l 一端进行散集,最后把散集后的结果值返回给客户程 序,完成一次完整的功能调用。如果不考虑底层的存根d l l 和代理d l l 之间的l p c 操 作,则好像是客户程序和组件程序的直接调用,如图2 - 2 中的虚线箭头所示。 若组件程序在不同机器上,则代理与存根对象通过远程程序调用r p c ( r e m o t e p r o c e d u r ec a l l ) 在网络上进行过程调用,从而实现分布式组件对象模型d c o m ( d i s t r i b u t e dc o m ) ,即远程组件。c o m d c o m 的组成示意图如图2 3 所示: 图2 3c 洲d c o m 组成示意图 2 2 6c o m 的特点 c o m 是一种构造软件组件的二进制标准,而面向对象技术是组件式设计思想的基 础。所以,c o m 规范所定义的组件模型除具有面向对象的特点外,又有其区别于面向对 象的特征,主要表现为: ( 1 ) 语言无关性 组件与开发工具语言无关,开发人员可以使用任何支持c o m 对象的二进制设计语 言进行组件的开发1 1 3 1 。因此,编写c o m 对象所使用的语言与编写客户程序所使用的语 言可以不同,只要它们都
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025湖南张家界市住房保障和房产市场服务中心招聘公益性岗位人员1人模拟试卷及答案详解(历年真题)
- 2025年分级设备地矿勘测设备:钻探机合作协议书
- Heptadecanonyldethio-CoA-Heptadecanonyldethio-coenzyme-A-生命科学试剂-MCE
- Glycidyl-myristate-d5-Myristic-acid-glycidyl-ester-d-sub-5-sub-生命科学试剂-MCE
- 2025安徽滁州市明光市消防救援大队招聘政府专职消防员15人考前自测高频考点模拟试题参考答案详解
- 小学元旦安全教育培训课件
- 2025广东湛江市坡头区社会保险基金管理局招聘编外人员1人模拟试卷带答案详解
- 2025年琼海市校园招聘教育类专业技术人才(西安站)考前自测高频考点模拟试题及答案详解(名校卷)
- 生产安全管理制度执行记录表安全事故预防功能
- 2025年泉州德化县公办学校专项招聘编制内新任教师19人(二)模拟试卷及答案详解(考点梳理)
- Frenchay构音障碍评定
- 第二讲国外教育评价的发展历程
- 教育学原理课后答案主编项贤明
- 建筑装饰施工技术-轻质隔墙工程施工课件(-)
- 语言领域核心经验《学前儿童语言学习与发展核心经验》
- 德国工业4.0与数字化制造课件
- 肉制品加工技术完整版ppt课件全套教程(最新)
- 统编版一年级语文上册 第5单元教材解读 PPT
- GB∕T 11032-2020 交流无间隙金属氧化物避雷器
- 新进教职工试用期满考核登记表
- 我的爱人(央金)简谱图片格式-简谱
评论
0/150
提交评论