您现在的位置是: 软件 > 开发者网络 > 技术跟踪 > 技术理论 > 正文


-Win xp中的多种网络
-试验试验试验试验
-用Freehand实现位图矢量化
-网络电话面面观

分布式组件对象模型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  下一页

【责任编辑:方舟】
【发表评论】【关闭窗口】
■ 相关内容
 微软事务处理服务介绍
 关于Plug-In实现的描述
 关于Plug-In实现的描述
 DCOM揭秘之六
 DCOM揭秘之五
 DCOM揭秘之三
 C++子对象和堆对象
 DCOM揭秘之二
 C++语法之函数重载
 初识Visual C++.NET开发环境
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!