网站大量收购闲置独家精品文档,联系QQ:2885784924

前一些章节已经讲述了COM的基本规范以及COM实现的细节-1.ppt

前一些章节已经讲述了COM的基本规范以及COM实现的细节-1.ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[3G国际漫游业务支撑培训讲义[3G国际漫游业务支撑培训讲义[3G国际漫游业务支撑培训讲义

第四章 COM特性 前一些章节已经讲述了COM的基本规范以及COM实现的细节。现在就可以编写真正的组件了。 可以把大的系统分解成一些小的组件对象,每个组件对象按照COM规范来实现,再编写一个或多个客户程序调用这些组件,组件之间或组件与客户之间通过COM接口进行通信。简单的程序这样做就可以了。 4.1 可重用性:包容和聚合 面向对象系统的三个最基本的特性分别是:封装、多态、重用 封装性体现在对所有对象状态信息的访问只能通过接口来访问。 多态性主要体现在三个层次上:接口成员函数、单个接口、一组接口 所谓重用是指:当一个程序单元能够对其它的程序单元提供服务时,尽可能地重用原先单元程序地代码,既可以在源代码一级重用,也可以在可执行代码一级重用。C++语言地重用性位于源代码一级;而COM是建立在二进制一级上地标准,因此重用性也必然建立在二进制一级。 4.1.1 包容和聚合 包容和聚合是COM地两种重用模型。 包容: 假如已经实现了一个COM对象A,他是现了接口ISomeInterface,在此还要实现另一个COM对象B,这个COM对象既要实现接口ISomeInterface,也要实现接口IOtherInterface,而且, ISomeInterface接口所提供地服务与对象A的接口所提供的服务基本一致,这样就可以重用对象A来实现对象B的接口功能。 最简单的办法是:在实现对象B的接口ISomeInterface时调用对象A的相应成员函数,对于对象A来说,它只是当作一个普通的COM对象,而对于对象B来说,虽然它本身是一个COM对象,但同时也是对象A的客户,因为他调用对象A的功能服务。对于对象B的客户来说,他根本就不知道对象A的存在。 包容模型在实际使用过程中可以非常灵活,对象B的成员函数在调用对象A的接口成员之前或者调用返回之后也可以进行其它一些操作,因此,对象B的ISomeInterface接口提供的功能可以超出对象A的接口功能,返回结果也可以不一致。 包容和聚合 对象A和对象B可以只是一个服务器与客户的关系。 对象A的创建和释放完全在对象B内部进行。对象B构造时,同时创建对象A的接口指针,以便自阿对象B的成员函数中使用;当对象B被释放时,它先释放对象A,这样可以完成对象B对对象A的篏套使用,形成包容。要对其优化,便可在对象B需要时创建对象A,在不需要时释放对象A。 聚合: 对象B要实现两个接口ISomeInterface和IOtherInterface,而对象A实现了ISomeInterface接口,并且不要对此接口进行修改便可满足对象B的要求。如果采用包容模型,那么对象B要实现两个接口,并且在ISomeInterface接口的成员函数中调用对象A的相应函数,采用聚合则不一样。对象B本生不实现接口ISomeInterface,他只实现IOtherInterface接口,但它也能提供接口ISomeInterface的功能,当对象B的客户请求接口ISomeInterface时,对象B把对象A的ISomeInterface接口暴露给客户,因此,客户调用ISomeInterface是直接与对象A进行交互的,而客户知道的只是对象B。 包容和聚合 在交互模型中,被聚合的对象A虽然直接向对象B的客户提供功能服务,但它的生存周期受对象B控制,而且其它的一些行为也受到对象B控制,包括内部状态初始化、获取数据等。 实现交互的关键在于对象B的QueryInterface成员函数,当客户向对象B请求ISomeInterface接口时,对象B的QueryInterface函数把对象A的ISomeInterface接口指针放到输出参数中,客户程序就获得了对象A的ISomeInterface接口指针,可以直接调用接口成员函数了。 这样还是有问题的,问题在于:当客户程序通过ISomeInterface::QueryInterface函数又请求其它的接口指针时,问题就出现了。因为对象A并不知道对象B实现可什么样的接口,而根据COM规范,客户程序从对象B的任何一个接口可以获取其它的任何接口指针。而且,在正常情况下,客户程序调用对象A的ISomeInterface::QueryInterface函数请求IUnknown接口指针获取的是对象A的Innknown接口指针,而客户程序调用对象B的IOtherInterface::QueryInterface函数请求IUknown接口指针获取的是对象B的IUknown接口指针,而COM规范要求的IUknown接口指针必须唯一。因此,为了使聚合顺利实现,对象A也必须能够适应在被聚合的情况下进行的特殊处理,尤其是接口的QueryInterface成员函数,在被聚合的情况下,当客户请求它所不支持的接口或请求Ikknown接

文档评论(0)

wendan118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档