| | | 分布式组件对象模型DCOM揭秘 | | 2001-07-24·
·QQ新人类编译··yesky
| 上一页 1 2 3 4 下一页 接口
在上面我们已经多次看到“接口”这个词,在我的一本字典中是这样定义一个接口的:
“接口:名词,是两个物体或者界面的共有分界”。
这是一个普通的定义。在COM中“接口”有非常特别的含义。COM接口是一个全新的概念,在C++中是没有的。对于许多人来说,接口的概念在开始时都较难理解。一个接口没有一个有形的存在。它类似一个抽象类,但不完全一样。
最简单地说,接口是函数的集合。在C++,一个类仅允许有一个接口。这个接口的成员函数都是该类所有的公有成员函数。用其它话来说,接口是类的公共可见部分。在C++中一个接口和一个类几乎没有任何的区别,以下就是C++类的一个例子:
|
class yyy { public: int DoThis(); private: void Helper1(); int count; int x,y,z; };
| 某人使用这个类时,他只可访问到pubilc的成员(这里我们忽略了protected成员和继承)。他不能调用Helper1,也不能使用任何的private变量。对于类的使用者来说,它的定义其实是:
class yyy { int DoThis(); };
类的public子集是外部的“接口”。接口将类的内部和使用者隔离开来。
C++类似的部分就只有这么多,COM接口并不是一个C++的类,COM接口和类拥有自己特别的一套规则和协定。
COM允许一个coclass(COM类)拥有多个接口,每个接口拥有自己的名字和函数集。这样做便可得到更为复杂和功能更强的对象。这个概念与C++是完全不同的。(可将多个接口想象为两个类定义的结合,当然,这种结合在C++中是不允许的)
接口将客户和服务器隔离开来
COM最重要的一条规定是你只可通过接口来访问一个COM对象。通过接口,客户端的程序与服务器的执行完全隔离开来。这是非常重要的一点。
客户端程序对于实现COM的COM对象或者C++类一无所知。它只能看到接口。接口就象COM对象的一个窗口。接口的设计者只让客户看到设计者希望展示的部分。图一展示了客户是如何通过接口来访问一个COM对象的。
 *****图一*****
| 图中一个小圆圈连接一条杆的符号,是表示一个COM接口的通常方法。接口还有许多重要的规定,对于理解COM的详细运作是很重要的,我们将在下面谈到。现在我们只集中谈接口的主要概念。
COM接口的形象化
这里将以另一种方式来形象化一个接口。在这个部分中,我们将不用任何的C++术语来介绍一个COM接口。我们将以一个抽象的形式来了解一个接口。想象一下一个“汽车”对象。对于现实中的所有汽车对象,你知道它有一个“驾驶”的接口,可让你控制汽车向左、向右,或者加速、减速。驾驶接口的成员函数包括有“左”、“右”、“加速”、“减速”、“向前”和“向后”。不少的汽车安装了收音机,因此还有一个“收音机”的接口。收音机的接口可以是“开”、“关”、“大声”、“柔和”、“下一个台”和“前一个台”。
|
Driving Radio Left() On() Right() Off() Slower() Louder() Faster() Softer() Forward() NextStation() Reverse() PrevStation()
| 有许多不同种类的汽车,它们不一定有收音机。因此它们虽然支持驾驶的接口,但没有实现收音机的接口。对于所有拥有收音机的汽车,收音器的功能都是一样的。一个人可以驾驶一辆没有收音机的汽车,但他不能听到音乐。对于带有收音机的汽车,还拥有收音机的接口。
对于COM类,COM支持这个同样形式的模型。一个COM对象可支持一个接口的集合,每个接口都拥有自己的名字。对于你自己创建的COM对象,你可以只使用单一一个COM接口。不过对于许多现有的COM对象,根据它们支持的特性,可支持多个COM接口。
另一个重要的区别是驾驶接口并不是汽车。驾驶接口并没有告诉你任何关于车的制动装置、车轮或者引擎等的事情。例如你可使用驾驶接口的加速和减速方法,而不需关心减速是如何实现的。汽车使用水力或者空气刹车也是不重要的。
组件的形象化
在你建立一个COM对象时,你会非常关注接口是如何工作的,对于接口的使用者,却不用关心它的实现。就象一辆车的制动一样,用户只关心接口的工作,而无需知道接口后面的细节。
隔离接口和实现对于COM是至关紧要的。通过将它的实现和接口隔离开,我们可以建立组件。组件可被替换和重用。两者均可简化和增加对象的可用性。
上一页 1 2 3 4 下一页 | | | 感谢
访问天极网,如果您觉得该文章涉及版权问题,请看这里!
|
|