




已阅读5页,还剩70页未读, 继续免费阅读
(计算机应用技术专业论文)comdcom技术研究与activex技术应用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
c o m o c o m 技术研究与a c t i v e x 技术应用 摘要 、 j w w w 和i n t e r n e t 的飞速发展对软件工程提出了新的要求,分布式计算模 型及其应用技术研究曩成为黧要的研究课题。c o m d c o m 和c o r b a 是目前 最有代表往酶秘大计算模鳘。f 本文麓重研究微软静组释对象模蹙c o m d d c o m - p ,一 季睡a c t i v e x 应爝开发技术。零文深入讨论了c o m d c o m 帮a c t i v e x 的由程机 制郛应震集或技术,谨缨分枣嚣了c o i v t r d c o m 豹接叠黢缓臀蜜袋方涟,在踅 基础上: 提出了一种鞭的c o m 接口查询箨法,提高了查找效率;实现了蟹g 接口 p ,一 指针类,克服了原有搬针类因为需要释放指针而带来的闻磁;论文比较了 c o m d c o m 和c o r b a 技术的优缺点,给出了一种将两者集成的应用方案; 论文最后在基于c o m 模型和a c t i v e x 技术的基础上,设计并实现了个网上 一- 一 购物应用原型系统。 c o m 箜塑堇查塑窒兰墼! ! ! ! ! 茎查垄垄 一 a b s t r a c t t h er a p i dd e v e l o p m e n to fi n t e m e tp r o p o s e sn e wr e q u i r e m e n t s t os o f t w a r e e n g i n e e r i n g t h e r e s e a r c ho fd i s t r i b u t e do b j e c tc o m p u t i n g m o d e l sa n dt h e i r a p p l i c a t i o nt e c h n o l o g y b e c o m ev e r yi m p o r t a n t c o m d c o ma n dc o r b a r r et h e t w om o s tp r e v a l e n tc o m p u t i n gm o d e l s t h i sp a p e rf o c u s e so nm i c r o s o r sc o m m o n o b j e c tm o d e l ( c o i v v d c o m ) a n da c t i v e ) ( a p p l i c a t i o nt e c h u o l o g y a f t e r c a r e f u l l ys t u d y i n g t h ei n n e rs t r u c t u r ea n dr e a l a p p l i c a t i o n s o f c o m d c o ma n da c t i v e x ,t h i sp a p e rf i n i s h e sb e l o w w o r k s t h i sp a p e rp r o p o s e san e wq u e r y i n t e r f a c ef u n c t i o nb a s e do nh a s ha l g o r i t h m , w h i c hc a n e f f e c t i v e l yi m p r o v et h ee f f i c i e n c y o fc u r r e n t a l g o r i t h m t h i sp a p e r p r o p o s e si n t e l l i g e n t i n t e r f a c e p o i n t e rc l a s s ,w h i c h c a nm a s kt h e p r o b l e m s t h a t b r o u g h to u tb yf o r g e t t i n gu s i n gt h er e l e a s ef u n c t i o n 。t h i sp a p e rc o m p a r e st h e c o m d c o ma n dc o r b af r o mf o u r a s p e c t s a n dd e s c r i b e st h e i rv i r t u e sa n d s h o r t c o m i n g si nd e t a i l t h e nt h i sp a p e rp r o p o s e sa ni n t e g r a t e dp l a nt h a tc a l lm a k e f u l lu s eo ft h ev i r t u e so fc o m d c o ma n dc o r b a f i n a l l y , t h i sp a p e rr e a l i z e s 雅 i n t e r n e ts h o pb a s e do nc o mm o d e la n da c t i v e x t e c h n o l o g y 珏 c 0 m 堕业堇查堑壅量生! ! :! ! 垫查生旦 一一一 第一章引言 1 1 分布式处理技术与w e b 技术发晨概况 对分布式处理技术的研究已有几十年的历史。随着网络技术的发展和i n t e r a c t 规模的 不断扩大,分布式处理日益重要。如何有效地建立分布式系统和应用成为计算机界的重 大课题,而c o m d c o m 与c o r b a 的出现为解决上述问题提供了有效的途径。 m i c r o s o f t 公司和d e c 公司于1 9 9 5 年提出了组件对象模型( c o m m o no b j e c tm o d e l c o m ) 3 1 及分布式组件对象模型( d i s t r i b u t e dc o m m o no w e c tm o d e ld c o m ) 1 7 1 。c o m 模 型用于在异质网络和操作系统中创建,使用和加入可重复使用的组件对象,这些组件对 象可以相互通信与交互,而与它们的语言分布及原始平台无关,也就是说,c o m 模型 促进和鼓励开放式系统解决方案,c o m 规范包括一套标准a p l ( a p p l i c a t i o np r o g r a m m i n g i n t e r f a c e ) ,一个标准接口集以及c o m 用于支持分布式计算的网络协议。 而d c o m 是c o m 的分布式扩展,它允许基于网络的组件进行交互。c o m 能够在同 一台机器的不同地址空间中运行,而d c o m 则将应用扩展到了整个网络,通过它,运行 于不同平台的组件能够进行交互。c o m 和d c o m 是同一种为组件交互提供一系列服务 的技术。因此,本文主要研究了c o m 与d c o m 所共有的接口函数等属性。 如果说c o m 和d c o m 代表了能让组件进行交互的低层技术,那么,a c t i v e ) ( “技术 则是建立在c o m d c o m 之上的高层应用服务。它扩展了c o m d d c o m 的基本属性,使 组件能够嵌入到w e b 站点中去。它主要包含a c f i v e x 控件,a c t i v e ) ( 脚本处理,a c t i v e ) ( 文档,a c t i v e ) ( s e r v e r 等内容。本文深入探讨了上述内容,并构建了一个基于a c t i v e ) 技 术的网上商店。 而公共对象请求代理结构( c o m m o no b j e c tr e q u e s tb r o k e ra r c h i t e c t u r ec o r b a ) 1 6 1 是一个由8 0 0 多家公司组成的对象管理组织( o b j e c tm a n a g e m e n tg r o u p0 m g ) 于1 9 8 9 年提出的一种分布式对象框架,其核心结构是对象请求代理o r b ( o b j e c t r e q u e s t b r o k e r ) 1 6 1 。o r b 是对象总线,它保证对象之间的通信,无论这些对象是位于同一台机器上,还 是位于通过网络连接起来的不同的机器上。一个c 0 砌执对象是由包含着一组方法的接 口来表示的,对象实例由对象参数标识,c o r b a 客户通过对象参数进行方法调用。o r b 负责截获客户请求,找出目标对象,启动其中的方法并将结果返回给客户,o r b 通过对 象适配器o a ( o w e c ta d a p t 口) 【16 】或者o r b 接口与服务对象交互。本文对上述两种技术 进行了详细比较,并提出了两者相互集成的方案,从而充分发挥两种技术的优势。 下面,本文将介绍c o m ,d c o m 技术和a c f i v e x 技术的历史,现存问题,发展概况 以及本文针对上述情况所做的主要工作。 ! ! ! ! 堕业垫查堕茎兰! ! ! ! :! ! 塾查壁旦 1 1 1o l e 技术 c o m d c o m 技术的前身是m i c r o s o i l 公司的o l e 2 1 技术。应用程序之间最初是通过剪 贴板交换信息的,剪贴板提供了一个临时的存储区域,使得用户可以通过它在不同的应 用程序之间剪贴数据。由于剪贴板无法满足应用程序间自动进行数据交换的要求, m i c r o s o f t 公司引入了动态数据交换协议( d y n a m i cd a t ae x c h a n g i n gd d e ) 程序员可 以编写代码,使得应用程序之阃可以进行通信,信息接受方被称为客户端,信息提供方 被成为服务器端。由于编写和调试基于d d e 的程序相当困难,m i c r o s o f t 开发出了对象链 接与嵌入( o l e ) 技术,它使用了一种“以文档为中心”的计算模型,使得一个应用程 序可以使用其它程序的功能。例如:通过o l e 可以在m i c r o s o f tw o r d 文档中插入一个 p a i n t b r u s h 图象,并可以使用p a i n t b r u s h 的所有功能,也就是说,如果在w o r d 文档中需 要改变其中的p a i n t b r u s h 图象,只需要在图象上用鼠标双点,w o r d 就会启动p a i n t b r u s h , 并调入此图象,在完成了对图象的修改之后,退出p a i n t b r u s h 并返回到w o r d 中。 在使用o l e 时,既可以在文档中嵌入一个对象,也可以在其中链接入一个对象。当 嵌入一个对象时,w o r d 在文档中存放一个此对象的拷贝,如果以后在文档外对此对象进 行了修改,文档中的对象将不会受到影响;而如果是在文档中链接了一个对象,w o r d 只 在文档中存放一个对象磁盘文件的索引,每次打开此文档时,w o r d 都将会将此对象相应 的文件载入到文档中,这样,如果你修改了此对象,在文档中都将保持一个此对象的最 新内容。o l e 容器( 客户端) 是一个嵌入或链接了一个对象的应用程序,而o l e 服务器 则是创建此被链接或嵌入对象的应用程序i 。 决定将一个对象嵌入还是链接到一个容器中将影响容器的大小,如果是将一个对象嵌 入到一个容器中,容器将变大( 例如:在w o r d 文档中嵌入一幅p a i n t b r u s h 图象,w o r d 文档将明显变大) 。而如果是将对象链接到容器中的话,比起前一种情况容器将会小得多, 不过,如果对象的存储位置发生了变化,就需要修改文档,以使它指向对象的新位置。 o l e 有几种实现,包括:o l e 控件:o l e 控件是包含了一个o c x 的容器;o c x s : 一个o c x 就是一个简单的控件,o c x 的得名来源于其文件的后缀名;o l ea u t o m a t i o n : 是一种能够让普通用户通过编写简单的程序来控制大量的,大型的,第三方应用的o l e 属性。例如:如果一个普通用户想创建一个应用,点左键打开w o r d ,点右键打开e s c c l , 在o l ea u t o m a t i o n 出现之前,需要编写大量的程序,而利用o l ea u t o m a t i o n ,可以用 1 0 行代鹞完成上述工作m l 。 1 1 2c g i 技术 在a c t i v e x 网络计算平台出现之前,网络普遍采用的是公共网关界厩( c o m m o n g a t e w a yi n t e r f a c ec 6 i ) 3 技术。在主机时代,所采用的是一种基于主机的计算模型, 客户可以通过终端来运行存放在主机中的程序,随着p c 工作站和计算机网络的出现,客 户服务器计算模型开始流行,在这种计算模型中,客户可以运行存储在他们自己p c 中 的程序并通过网络向服务器请求信息,在客户端主要处理客户界面及用户输入,而服务 2 c o m d c o m 技术研究与a c t i v e x 技术应用 器端则处理客户端的请求,客户端和服务器端通过网络进行通信【2 ”。 随着i n t e r n e t 的广泛使用,超文本传输协议( h t t p ) 模型继续发展了客户服务器模 型,在基于h t t p 的模型中,客户端与服务器端进行交互,通常情况下,这种交互包括客 户端向服务器请求特定的w e b 页,因为w e b 页由h t m l 文档组成,所以这种模型有时又称 为h t t p ;h t m l 客户朋务器模型。 从用户的角度来看,h t t p 模型是静态的,它只提供很少的交互或根本没有交互功能, 用户只能简单地查看w e b 页面中的内容而不能通过w e b 页中的元素进行交互。而c g i 的 出现就是试图使从服务器到网关的信息传递标准化,以便能为多种而不是一种服务器编 写网关,使w e b 页面具有交互的功能。这个标准由一系列的环境变量( 它可由服务器按 照各个网关的要求创建) ,一个网关程序用到的命令行参数集以及程序的输入输出文件组 成。 在h t m l 也中嵌入c g i 引用的语法格式是: 。 指出了c g i 网关程序自身的 路径,如:h t t p :v n , v w z p f e o m o g i - b i n o r d e r o x o 或者是c g i b i n o r d e r e x e ; s u p p l e n e n t a r y p a t hi n f o r m a t i o n ) 是一个可选参数,紧跟在网关名之后,通常是由网关程序处理的文件 名; 是另外一个跟在网关程序和附加路径信息之后的可选参数,它可以作为程序 的命令行参数。 c g i 是一个松散的标准,在c g i 中,许多环境变量对所有的服务器都是可用的。目前 主要使用c c + + 和p e r l 语言来开发c g i 程序。 1 2 分布式计算技术与w e b 技术中有待解决的问题 1 2 1 0 l e 的缺点 随着i n t c r n c t 的迅速发展与普及,开发的重点偏重于网络,但原有的o l e 实现( 如: o l e 控件,o c x s ,o l ea u t o m a t i o n 等) 都比较庞大,其中包含了一些超出应用程序需 要的功能。浪费了宝贵的带宽,不适合于“瘦客户端”的要求。因此有必要提出一种新 的,更加灵活,小巧的分布式技术f 。 1 2 2 c g i 的缺点 c g i 中的问题有:1 ) 缺乏足够外部开发工具,操作系统和环境的支持;2 ) 即使被开 发工具支持,数据传输的方法也不稳健,或者效率较低;3 ) 对于一般设备存在不必要的 低级界面;4 ) 可测量性较差伫2 】。 c g i 以两种方式将数据从服务器输出并且间接地从用户的w e b 测览器传送到独立的 外部网关程序:环境变量和程序标准输出。外部程序将数据返回服务器时主要使用标准 输出。这样就存在一个问题,即:一个应用程序也许并不具备标准输出和标准输入的概 c o m d c o m 技术研究与a c t i v e x 技术应用 念。v b 程序员就不能直接编写出c g i 程序。单独的w e b 应用开发者和w 曲服务器销售 商试图通过对c g i 界面作些轻微的修改或提供一种依附于c g i 的外壳程序来弥补这个缺 陷。例如:o r e i l l yw e b s i tw e b 服务器提供了一种称为w i n c g l 圳的界面,它从一个磁盘上 的特定文件中获得全部输入,并将输出送到另外一个文件中。但从系统的观点来看,这 甚至比c g i 效果更差。这不仅是因为每次执行一个文件时都要刨建一个完整的新的处理 过程,而且每次运行网关程序的时候,都会产生中间文件,并在w i n c g l 程序中读他们。 调用几个w i n c g i 网关的拷贝时,可测量性问题甚至比传统的c g i 网关更大。 而且,将数据通过标准输入和大量的环境变量传递给c g i 程序是一种呆板,脆弱的 机制。环境变量无论是在w m d o w s 还是0 s 2 中其大小都是有限的。这意味着,比如说, 如果有许多数据要用g e t 方法从服务器传递给网关程序时( 它是通过环境变量 q u e r y来传递数据的),就很容易出问题。string 另外,c g i 标准迫使开发者记住与网关程序有关的所有环境变量。例如:开发者有可 能用到c o n t e n t l e n g t h 环境变量,q u e r y s t r i n g 环境变量等等。但它们全都是相 互关联的( 以决定数据来自于某一张表单) 。而且,即便是象c 0 1 盯e n t l e n g t h 这样的 数值型数据,也都被存放于文本格式的表中。事实上,所有这些都可以存放在个以相 应数据类型为结构成员的结构体中会更简单一些。 最后,也是最重要的一点,c g i 不能胜任高层次的同步处理。每次用户单击h t m l 订购单上的按钮都要激活个完全独立的程序或处理。很显然,它不可能处理成千上万 这样的命令。只有每个网关程序或程序服务器应用程序仅以单线程的形式运行于w e b 服 务器的处理空间时,w e b 服务器才有足够的能力处理大量的数据f “。 1 3 分布式计算技术的新解决方案 1 3 1m i c r o s o f t 的组件对象模型c o m d c o m c o m ( c o m m o no b j e c tm o d e l ) 【1 1 ,即组件对象模型,是关于如何建立组件以及如何 通过组件构建应用程序的个规范。对象链接与嵌入的m i c r o s o f t 版本被称为是o l e 。o l e 的第一个版本使用动态数据交换( d d e ) i s 作为客户及组件之间的通信方式。但d d e 速 度很慢,编写复杂,而且健壮性与灵活性较差。因此,m i c m m f t 从1 9 9 3 年就已经开始开 发c o m 了,其目的是使m i c r o s o f t 的各种软件产品更灵活,更具有动态性并且更易于定 制。目前m i c r o s o f t 的几乎所有应用程序都使用了c o m 。m i c r o s o f t 的a c t i v e x 技术就是 基于c o m 建立起来的。m i c r o s o f t 在c o m 的基础上又提出了d c o m ,使它更加适应网 络中分布式应用的需要。 c o m f d c o m t 7 8 1 组件是通过组件与客户之间的接口来实现信息封装的,由以w i n 3 2 动 态链接库( d l l s ) 或可执行文件( e x e s ) 的形式发布的可执行代码组成的,可用c + + 等 编程语言进行开发。但c o m d c o m 接口又不同于d l l 或c + + 接口,d l l 的接口就是它 4 c o m d c o m 技术研究与a c t i v e x 技术应用 所输出的那些函数:c + + 类的接口是该类的一个成员函数集;而对于c o m d c o m 来说, 接口是一个包含一个函数指针数组的内存结构,每一个数组元素包含的是一个由组件所 实现的函数的地址,其它东西都是c o m d c o m 并不是0 的实现细节。 所有的c o m d c o m 接口都必须继承一个名为i u n k n o w n t 7 j 的接口,客户同组件的交 互以及客户查询组件的其它接口都是通过i u n k n o w n 接口实现的。i u n k n o w n 接1 3 中主要 实现了q u e r y i n t e r f a c e ,a d d r e f ,r e l e a s e 这三个函数。 客户可以调用q u e r y i n t e r f a c e 来决定组件是否支持某个特定的接1 3 ,下文中将介绍其 实现细节,而a d d r e f 和r e l e a s e 实现的则是一种名为引用技术的内存管理技术。由于所 有c o m d c o m 接口都继承了i u n k n o w n ,每个接口的虚拟函数表v t b l t 7 i 中的前三个函数 都是q u e r y i n t e r f a c e ,a d d r e f ,r e l e a s e 这使得所有的c o m d c o m 接口都可以被当作 r u n k n o w n 接口来处理。 c o m d c o m 组件也是一种给其它应用程序提供面向对象的a p i 或服务的极好方法。 c o m d c o m 具有一个被称为c o m d c o m 库( c 0 m d c o ml i b r a r y ) h 1 的a p i ,它提供的是对所 有客户和组件都非常有用的组件管理服务。c o m d c o m 库可以保证对所有组件大多数重要 的操作都可以按相同的方式完成。同时c o m d c o m 库中的大多数代码均可以支持分布式或 网络化的组件。c o m d c o m 的实现中提供了一些同网络上其他组件通信所需的代码。这不 但可以节省开发人员花在网络编程上的时间,而且可以使得他们无须了解如何进行网络 编程。 i 3 2 新型的w e b 服务器框架a c t i v e x 技术 一方面,a c t i v e x 是由m i c r o s o f t 公司定义的基于c o m 技术的,用于i n t e r n e t 的一种 对象链接与嵌入技术。随着i n t e r a c t 的迅速发展与普及,开发的重点偏重于网络,但原有 的o l e 实现( 如:o l e 控件,o c x s ,o l ea u t o m a t i 帆等) 都比较庞大,其中包含了一 些超出应用程序需要的功能。浪费了宝贵的带宽,不适合于“瘦客户端”的要求。因此, m i c r o s o f t 顺势推出了为网络定义的o l e 即a c t i v e x 。a c t i v e ) ( 使通过i n t e r n e t 来简单,快 速地下载变得更为容易,使i n t e m e t 的开发者能够建立更高级,更好的基于w e b 的应用。 在另一方面,a c t i v e x t s l 以服务器框架的形式提供服务器方技术:i n t e r n e t 服务应用 程序界面( i s a p i ) 的技术规范与i s a p i 过滤器的技术规范,有效地解决了c g i 所存在的 问题,目前已成为w e b 服务器的主流。a c t i v e x 还包含了各种客户方技术,如:a c t i v e x 控件,a c t i v e x 脚本处理,a c t i v e x 文档等。 1 4 本文所徽的主要工作 本文所做的主要工作归纳如下: 1 本文在深入分析研究c o m d c o m 模型和a e t i v e x 技术内在机制与应用; 2 提出了种基于h a s h 算法的q u e r y h t e r f a c e 函数1 ”】,使得查询效率有较大提高。 5 c o m d c o m 拄木研究与a c t i v e x 技术应瑙 原祷算法的时问复杂度淹函数的个数线健增长,而新算法的时间复杂壤取决予表中填入 的记录数与h a s h 袋长度的比值,不管表长n 多大,总可以选择一个台遁的比值以便将平 均焱找次数限定在一个范潮内。平均鸯我次数不醚表长n 静增翻丽线健增加,获丽撬态 了裔找效率: 3 ,开发者经誉会因势意遗调翔r d e a s e 丞鼗褥霉致程痔镑谈,铮对途一绪滋,本文提 出丁一种智能接口指针,群蔽了r e l e a s e 函数的调用,简化了编攫。 4 。奉义还论文魄较了c o m 秘c o r b a 技术的垅姣点f ”,绘窭了一秘壤辫者集裁豹 应用方案1 3 3 1 , 5 ,论文最后在基于c o m 摸溅和a c t i v e x 技术鲍基础上,设计势实理了一个网上赡 物戚用原型系统。 全文主要包含以下五个章节:第一章引言主要包括了分布式处理技术的发展概况, 存瓷豹游联戳及本文所徽鞠主要工作;第= 章c o m d c o m 理论及其体系结构主要包括了 c 0 m d c o m 接口,o u e r y i n t e r f a c e 函数,引用计数,动态键接,d c o l i l 技术;第三章a e t i v e x 接本应用柩絮主要包括了h c t i v e x 概嚣,a c t i v e x 客户端,a e t i v e xs e r v e r ,a c t i v e x 与j a v a s c r i p t ,a c t i v e x 与v b s c r i p t ,a c t i v e x 与a c t i v e x c o n t r o lp a d ;第四章c 0 m d c 0 m 技术研兖主要怠括了q u e r y i n t e r f a e e 丞数募法磷究,餐璇接叠撂铮,c o m d c o m 与c o r b a 的t b 较和集成,w e b 数据库接口研究;第施章基于a c t i v e x 技术的网上商店的实现主臻 包撼了基于a e t i v e x 技术的网上巍痞豹并发滚稳,c o o k i e 瓣使震,盎揪购物车熬实理,s s l 的编写,实时信用卡处理。 6 c o m d c 0 m 技术研究与a c ti v e x 技术应用 第二章c o m d c o m 理论及其体系结构 c o m i l 引和d c o m l 7 川是为组件交互提供一系列服务的同一种技术,如:在同一个平 台上集成不同组件,为异构网络中的组件提供交互等。事实上,m i c r o s o f t 公司自己也称 d c o m 为“带有更长导线的c o m ”川。所以本文重点以c o m 为代表介绍c o m 与d c o m 所共有的属性,最后介绍d c o m 的技术特点与优势。 2 1c o m d c o m 接口 d l l 的接口就是它所输出的那些函数;c h 弓的接i = i 则是该类的一个成员函数集, c o m 的接口也涉及到一组由组件实现并提供给客户使用的函数。对于c o m 而言,接口 是一个包含一个函数指针数组的内存结构。每一个数组元素包含的是一个由组件所实现 的函数的地址。在c o m 体系中,接口就是此内存结构,其他东西均是c o m 并不关心 的实现细节。下面先详细讨论接口在c o m 中的作用,然后再实现一个接口。在此实现 之后,本文将先讨论一下有关接口的理论问题,然后再介绍一下c o m 所需的接口内存 结构。 2 1 1 接口的作用 在c o m 中接口就是一切。对于客户来说,一个组件就是一个接口集,客户只能通 过接口同c o m 组件打交道。从整体上来讲,客户对于一个组件可以说是知之甚少的。 在某些情况下,客户甚至不必知道一个组件所提供的所有接口。实际上从一个程序员的 角度来讲,接口对于一个应用程序而言是最重要的。组件本身只不过是接口的实现细节, 图2 1 比较精确地显示了接口对于c o m 程序的重要性: 说组件仅仅是接口的实现细节当然有点言过其实。不管怎么说,一个未被实现的接 口实际上什么也不能完成。但是组件可以从应用程序中删除并且可以用另外一个组件来 取代它。只要新的组件支持同原组件相同的接口,那么整个应用程序将仍然可以工作。 单个的组件并不能对整个应用程序产生决定性的作用。相反,用以连接组件的接口将对 整个应用程序产生决定性的影响。只要接口保持不变,那么组件可以任意地替换。使用 组件来构造应用程序的最大的优点在于可以复用应用程序的结构。如果接口设计得好的 话,将可以得到可复用度极高的结构。例如:可以通过允许改变若干关键性的组件,同 样的结构可以支持几种不同类型的应用。 7 i 型! 篓翌鍪查璧窒兰墼! ! :坚莛垄翌星 2 1 2 接口的实现 下面将给出个简单然而却是完整的实现例子,组件c a 将使用和i y 来实现两 令接口; 代码2 1 # i n c l u d e # i n c l u d e v o i dt r a c e ( c o n s tc h a r + p m s g ) c o u t p m s g e n d l ; i n t e r f a c e1 x v i r t u a lv o i ds t d c a l lf x l o = o : v i r t u a lv o i d _ s t d c a l lf x 2 0 = o ; ; i n t e r f a c ei y v i r t u a lv o i ds t d e a l lf y l 0 = o ; v i r t u a lv o i d _ s t d c a l lf y 2 0 = o : ) ; c l a s sc a :p u b l i ci x , p u b l i ci y ( p u b l i c : v i r t u a lv o i ds t d e a l lf x l 0 c o u t “c a :f x l ” e a d l ;) 8 c o m d c o m 技术研究与a e t i v e x 技术应用 v i r t u a lv o i ds t d c a l lf x 2 0 c o u t “c a :f x 2 ” e n d l ;) v i r t u a lv o i ds t d c a l lf y l 0 c o u t “c a :f y l ” e n d l ;) v i r t u a lv o i ds t d c a l lf y 2 0 c o u t “c a :f y 2 ” f x 2 0 ; i y + p l y = p a ; t r a c e ( c l i e n t :u s et h ei yi n t e r f a c e ”) p l y - f y l 0 ; p l y - f y 2 0 ; t r a c e ( c l i e n t :d e l e t et h ec o m p o n e n t x d e l e t ep a ; r e t u r n 0 ; ) 在上例中客户和组件是通过两个接口来通信的。在接口的实现中使用了两个纯抽象基 类和i y 。例中的组件是由类c a 实现的,它继承了和i y ,并实现了这两个接1 2 1 中 的所有成员函数。 客户m a i n 函数创建了组件的一个实例,并获取了组件所能提供的,指向接口的指针。 然后它象使用c + 十指针那样使用了这两个指针,这是由于接口是用纯抽象基类实现的。 在上述实现中,和i y 是用于实现接口的纯抽象基类【3 9 】。纯抽象基类指的是仅包含纯 抽象函数的基类。纯虚函数是指用“= 0 ”标记的虚拟函数。在定义纯抽象函数的类中, 是不实现这些纯虚函数的。例如在上面的代码中,函数:f x l ,i x ;:f x 2 ,i y :f y l , i y :f v 2 并没有函数体。纯虚函数将在派生类中实现。在上面的代码段中,组件c a 继 承了两个纯抽象基类和i y ,并实现了它们所定义的纯虚函数。 为实现和i y 的成员函数,c a 使用了多重继承【”。多重继承是指个类直接继承 了一个以上的基类。在c + + 中,大多数情况下使用的是单继承,即一个类只有一个基类。 在本节的后面将详细讨论多重接口与多态性。 我们可以将一个抽象类看作一个表单,派生类所做的就是填充这些表单的空白。抽 象基类指定了其派生类应提供哪些函数,而派生类则具体实现这些函数。对纯虚函数的 9 i ! ! ! 箜翌茎查黧壅兰! ! ! ! :! ! 墼查堡里 一一 一 继承被称为接口继承,这主要是因为派生类所继承的哭是基类对函数韵插叙- 抽象类并 没肖提供任何可供继承的实现细节。在本文中将使用纯虑函数来实现所有的接豳 由予c o m 燕与语言无关的,对予盼么是接韬,它露一个= 递隶l 标准。氇簸是说,表 示一个接期的内存块必须县有一定的结构。但稔序员并不一定臻了解寂的结构- 当使用 缝糖象基炎酵,诲多c + + 编译器籍哥鞋生戏其舂这种结构匏内存块。 2 1 3 接口理论 一,接日的不变彀:鼠代羁2 1 掰戳看出,接西不会发燕任何燮亿。这也正是c o m 最大 的优点。一旦公布了一个接口,那么它将永远保持不变。当对组件进行升级时,一 簸不会修改已有豹接霜,焉楚翻入一些耨匏接霜。这些多燕接强捷得缍襻除了胃戬 支持原有接口外,还可以支持新的接口。因此多重继承为组件和客户可以智能地同 对方瓣耘舨本滢哲交爱提供了墼实戆基毯。 = ,多重接口与多态性:组件可以支持任意数目的接口。为支持多重接口,可以使用多 重继承。在代码2 1 中,c a 使用了多重继承继承7 宅麝支持的嚣个接叠l v 和l y 。 这种支持多重接口的组件可以被看做是接口的集合。 这种特点使褥我们可以按一种递归的方式对缀件框架进行屡次的划分。在这糟层次结 构中,一个系统是一系列组件的集含;每个组件提供了一个接口集;每一个接口包 含一系列函数。 图2 2 个系统是一系列组件的集台;每个缀件提供了一个接口集;每一个接口包含 一系列函数 多态1 3 9 j 莛指可娃按照剃一种方式来齄理不同的对象。多重接口的支持能力给多态提供 了照多的机会。若两个不问的组件支持同一接口,那么客户将可以使用相同的代码来处 理冀串鲍矮 霉一个缀锌。魄羲是说客产胃酸按照穗嚣懿方式憝璎不弱熬缝俘。 多重接口使得多态的重舞性更加突出。一个组件所支持的接阴越多,这些组件就应该 l o c o m d c o m 技术研究与a c t i v e x 技术应用 越小。较小的接口表示较为简单的行为,而大的接口则表示更多的行为。一个接口所表 示的行为越多,它的特定性就越强,因此它被其它组件复用的可能性就越小对于不能 复用的接口,使用此接口的客户代码也将不能复用。 三,虚拟函数表:当定义一个纯抽象基类时,所定义的实际上是一个内存块的结构。纯 抽象基类的所有实现都是一些具有相同的基本结构的内存块。定义一个纯抽象基类 也就是定义了相应的内存结构。但此内存只是在派生类中实现此抽象基类时才会被 分配。当派生类继承一个抽象基类时,它将继承此内存结构。 虚拟函数表 图2 - 3 抽象基类所定义的内存结构示例 从图2 - 3 可以看出一个纯抽象基类所定义的内存结构可以分为两个部分。图2 3 的右 边是虚拟函数表( v t b l ) ,其中包含一组指向虚拟函数实现的指针。v t b l 中的第一项为派生 类中所实现的函数的地址,第二项为函数的地址,如此等等。图中左侧为一个指向v t b l 的指针。而指向抽象基类的指针则指向此v t b l 指针。v t b l 的作用不仅是给实例数据的保 存提供一个方便的位置,实际上它还可以同一个类的不同实例共享同一v t b l 。 这一节主要介绍了什么是接口,如何实现接口以及如何使用接口。但本节的接口并不 是真正的c o m 接口。c o m 需要所有的接口都支持三个函数。这三个函数必须是接口的 v t b l 的前三个函数。下一节本文将介绍这三个函数中的第一个函数q u e r y i n t e f f a c c 。 2 2q u e r y i n t e r f a c e 函数 2 2 1q u e r y i n t e r f a c e 函数的定义与作用 c o m 中的所有内容最终都起子接口,又最终归于接口。客户同组件的交互都是通过 一个接口完成的。在客户查询组件的其他接口时,也都是通过接口完成的。这个接口就 是i u n k n o w n 。i u n k n o w n 接口的定义包含在w m 3 2s d k 中的i 小n w n 。h 头文件中。 引用如下: i n t e r f a c ei u n k n o w n ( v i r t u a lh r e s u l t _ _ s t d c a l lq u e r y i n t e r f a c e ( e o n s tl i d & i i d ,v o i d ”p p v ) = 0 ; c o m d c o m 按术研究与a c ti v e x 技术痊麓 v i r t u a lu l o n gs t d c a l la d d r e r o = 0 ; v i r t u a lu l o n gs t d c a l lr e l e a s e o = o : ) ; 所有的c o m 接口都继承丁i u n l u l o w n ,每个接口的v t b l 中的前三个函数都是 q u e r y i n t e r f a e e ,a d d r e lr e l e a s e ( q u e r y i n t e r f a e e 月来凌定篷 孛燕否支挎菜个特定懿接l z l 。 a d d r e f 和r e l e a s e 用来控制接口的生命期。) 这使得所有的c o m 接口都可以被当成 i u n k n o w n 接口采处理。麓某个接霹鲍v t b l 孛懿瓣三个滋数不楚逸三令,那么它将琴燕 个c o m 接口。由于所有的接口都是从i u n k n o w n 继承的,因此所有的接口都支持 q u e r y i n t e r f a c e 。嬲此组 牛的任傅个接霸都可以披客户用来获取它所支持的其键接疆。 由于所有的接口指针同时也将是i u n k n o w n 指针,客户并不需要单独维护一个代表组件的 指针,它关心的将仅仅是接口的攒针。客户可以通过q u c 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 将遁西一个指向北接口静措针;谮刘 返回值将越一个错误代码。然后客户可以接着查询其它接口或将接口卸载。 q u e r y i n t e r f a c e 带窍两个参数: h r e s u l ts t d c a nq u e r y i n t e r f a c e ( c o n s t1 1 d & i i d ,v o i d ”p p v ) ; 其中静第一个参数瞧标识客户掰藩弱绩嚣。就参数是一个“接麓椽滚绔”( 1 i d ) 绩捣: e x t c m c c o n s ti i dl i d _ i x = 0 x 3 2 b b 8 3 2 0 ,0 x b 4 1 b ,o x l l c f , f o x a 6 ,0 x b b ,o x o , o x s o ,0 x c 7 ,o x b 2 ,0 x d 6 ,0 x 8 2 ) ) ; 另外个指针是q u e r y i n t e r f a e e 存放所请求接口指针的地址。q u e r y i n t e r f a c e 返回的是 一个h r e s u l t 德。此德实际上并不象其名称所表示酌那样蹙标识某个结果的旬柄。相 反,它是一个具有特定结构的3 2 位值: 豳2 - 4h r e s u l t 的结构 q u e r y i n t e r f a e e 可敬返回so k 或e _ n o i n t e r f a c e 。藩必一令溪数在多秘侍凝下返嚣豹 状态代码通常将包含多个成功代鹞及多个失败代码,客户不应将q u e r y i n t e r f a c e 的返回值 同遮两个馈进行 e 较,丙成使用s u e c e e d e d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年痴呆护理诊断及措施
- 公司组织安全培训新闻稿课件
- 职业技能实训《财务管理》形成性考核
- 《让法律保护你》课件
- 《蝴蝶找家》资源包课件
- 汽配月度工作总结
- 事故安全培训教学课件
- 教务年度总结汇报
- 公司级别安全培训内容课件
- 手术室年终总结2025
- 国企职工劳务合同协议
- GB/T 37507-2025项目、项目群和项目组合管理项目管理指南
- 商品检验试题及答案
- 骨科危重患者的急救及护理
- 2025年邮政社招笔试试题及答案
- 水资源保护课件
- 2025年中国移动初级解决方案经理学习考试题库大全-上(单选题)
- 重难点梳理写作指导(讲义)-人教PEP版英语六年级上册
- 临床用血管理制度课件
- 2024年钛行业发展研究报告
- 《人工智能通识教程》(第2版)教学大纲
评论
0/150
提交评论