《前一些章节已经讲述了COM的基本规范以及COM实现的细节》.pptVIP

  • 2
  • 0
  • 约4.6千字
  • 约 15页
  • 2020-10-24 发布于天津
  • 举报

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

前一些章节已经讲述了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)

1亿VIP精品文档

相关文档