COM-接口.ppt

上传人:s****8 文档编号:82766263 上传时间:2023-03-26 格式:PPT 页数:7 大小:185KB
返回 下载 相关 举报
COM-接口.ppt_第1页
第1页 / 共7页
COM-接口.ppt_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《COM-接口.ppt》由会员分享,可在线阅读,更多相关《COM-接口.ppt(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第二章 接口 接口提供了两个不同对象间的一种连接,计算机程序是通过一组函数连接起来的,这组函数实际上就定义了程序不同部分的接口。在C+中,可以使用抽象基类来实现COM接口。由于一个COM组件可以支持任意数目的接口,对于这类组件,可以使用抽象基类的多重继承来实现。2.1 接口的作用接口的作用 在COM中,接口就是一切。对于客户来说,一个组件就是一个接口集合。客户只有通过接口才能和COM组件打交道。客户不必了解组件的实现细节,甚至不必知道一个组件所提供的所有的接口。2.1.1 可复用的应用程序框架可复用的应用程序框架 单个的组件并不能对整个应用程序产生决定性的影响,相反,用以连接组件的接口将对整个

2、应用程序产生决定性的作用,只要接口不变,那么组件可以随意的替换。如果借口设计的好,可以得到可复用极高的结构。可复用结构的设计决不是一件简单的事情。它要求设计者具有预测未来的能力。2.1.2 COM接口的其他优点接口的其他优点 接口可以免受外界变化的影响。另外,接口还具有多态性。2.2 COM接口的实现接口的实现 例子程序 关键点:1.COM接口在C+中是使用纯抽象基类实现的。2.一个COM组件可以提供多个接口。3.一个C+类可以使用多继承来实现一个提供多个接口的组件。上述例子的缺陷:1.组件与客户间并没有完全通过接口进行通信。2.客户程序中使用了new和delete操作,这个操作和语言相关,因

3、此应该避免使用,去寻求一种更好的组件生命周期控制方法。若干问题:1.类并非组件,也就是说并非一个C+类只能与一个COM组件相对应。2.接口并非总是集成来的。对接口的继承只不过是一种实现细节罢了。3.多重接口与多重继承。组件包含接口、接口包含函数。命名冲突:1.不同接口中函数的命名冲突:不是问题,因为COM是二进制标准,真正调用时使用的并不是函数名称。2.接口名冲突:需要程序员根据一定的准则对接口的命名加以规范化。2.3 接口理论接口理论2.3.1 接口的不变性接口的不变性 可能是COM接口最具特色的一个性质。一旦公布了一个接口,那么它将永远保持不变。对组件进行升级时,通常不会修改已有的接口,而

4、是加入一些新的接口。2.3.2 多态性多态性 多态指的是可以按同一种方式处理不同的对象。多重接口使得多态的重要性更为突出,一个组件应当支持较小的接口,接口越大,接口的特定性越强,这将直接影响到该组件以及使用该组件的客户的可复用性。可复用整个应用架构的能力并不是随便就能出现的。需要精心的设计接口,以使之能够支持各种不同的实现。这不仅要求接口有较高的通用性,而且客户也应当按照一种比较通用的方式来使用该接口,以避免对接口的实现造成不必要的限制。2.4 接口的背后接口的背后(接口的二进制结构接口的二进制结构)定义一个纯抽象基类,实质上是定义一个内存块结构。interface IXvirtual voi

5、d _stdcall Fx1()=0;virtual void _stdcall Fx2()=0;virtual void _stdcall Fx3()=0;virtual void _stdcall Fx4()=0;2.4.2 vtbl指针及实例数据指针及实例数据(成员变量成员变量)class CA:public IXpublic:virtual void _stdcall Fx1()coutCA:Fx1endl;virtual void _stdcall Fx2()coutm_Fx2endl;virtual void _stdcall Fx3()coutm_Fx3endl;virtual

6、void _stdcall Fx4()coutm_Fx4endl;CA(double d):m_Fx2(d*d),m_Fx3(d*d*d),m_Fx4(d*d*d*d);double m_Fx2;double m_Fx3;double m_Fx4;虽然C+可以直接操作和使用实例数据,但COM组件决不会访问任何实例数据。在COM中,对一个组件的访问只能通过函数来完成,决不能通过变量。这是因为纯抽象基类中只能由纯虚函数,而不能有成员变量。2.4.3 多重实例多重实例int main()CA*pA1=new CA(1.5);CA*pA2=new CA(2.75);.上述两个对象共享一个vtbl。但是

7、对于各对象将各自有不同的实例数据。这一点是对于纯粹的C+来讲的,对于COM来说,这个并不重要,也不是必须的。COM组件的每一个实例中都有一个不同的vtbl。2.4.4 不同的类,相同的不同的类,相同的vtbl 接口的真正威力在于继承此接口的所有类均可以被客户按同一方式进行处理,如下例:class CB:public IXpublic:virtual void _stdcall Fx1()coutCB:Fx1endl;virtual void _stdcall Fx2()coutCB:Fx2endl;virtual void _stdcall Fx3()coutCB:Fx3endl;virtual void _stdcall Fx4()coutCB:Fx4Fx1();pIX-Fx2();int main()CA*pA=new CA(1.5);CB*pB=new CB;IX*pIX=pA;foo(pIX);pIX=pB;foo(pIX);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com