《COM本质论》第三章第一节(P80)中有这么一段话:“COM清晰地把接口(interface)、实现(implementation)和类(class)看作三个不同的概念。接口是与对象进行通信的抽象协议。实现是支持一个或者多个接口的具体数据类型,它为借口的每个抽象操作都提供了精确的语义解释。类是被命名的实现,它代表了具体的、可实例化的类型,其正式名称为COM类或者 coclass。”
   其中我一直对这段话所定义的“实现”不理解,到底“实现”是什么呢,它与“类”有什么不同呢? 结合书上这一章所举的例子:IApe对应了接口,这个很明显,那么大猩猩,黑猩猩,和猩猩的类(比如 p82页的class Gorilla)对应的是“实现”的概念呢,还是“类”的概念呢,我看应该是对应“类”的概念吧,那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成? 我也感觉不妥。请高手指教,小弟这里谢过!

解决方案 »

  1.   

    接口 就是纯虚基类在COM里面 是 继承自 struct 的 IUnknown
    实现就是具体的类 它实现并继承自这个接口
    就像 国际控件站 的对接 它可以和 发现者号对接 可以和 进步者号对接
    那是因为它们的接口相同但是 确实不同的飞船
      

  2.   

    欢迎楼上的继续讨论,接口我基本明白,问题正是:到底“实现”是什么呢,它与“类”有什么不同呢?具体到书上那一章的例子( 我认为IApe对应接口,Gorilla类对应类,那么实现该由什么东西对应呢)又该怎么理解呢。在读本书之前,我也以为只要有“接口”和“实现”的概念就可以了(我认为类就是实现),但是这本书明确地说 :“COM清晰地把接口(interface)、实现(implementation)和类(class)看作三个不同的概念。”这样我就糊涂了,实现和类是两个不同的概念,他们该怎么区分呢?
      

  3.   

    能否举个实例说明呢,比如拿书上 IApe接口来说吧,我可以解释多次吗(注意:因为不是解释方式,所以不能说可以有不同的解释,不同的解释是解释方式的问题,这是类的概念了),它的一次的“解释动作”是什么呢?它是否可以有多次的“解释动作”呢?即使有多次的“解释动作”,这些解释动作有什么不同呢?,
        另外既然每种实现都对应一个类了(一一对应了),为什么还要有“实现”这个抽象的概念呢?我还是认为把实现和类视为一个概念比较合理,为什么弄那么晦涩呢?
         如果谁能结合我前面发帖里提出的对应关系的问题回答,我可能会更清楚,在此我把那个问题再贴出来,欢迎大家讨论,以解小弟之惑。
        问题:IApe对应了接口,这个很明显,那么大猩猩,黑猩猩,和猩猩的类(比如 p82页的class Gorilla)对应的是“实现”的概念呢,还是“类”的概念呢,我看应该是对应“类”的概念吧,那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成?
      

  4.   

    IApe对应了接口,这个很明显,那么大猩猩,黑猩猩,和猩猩的类(比如 p82页的class Gorilla)对应的是“实现”的概念呢,还是“类”的概念呢
    ----------------------------------
    class Gorilla是类的概念。那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成?
    -------------------------------------
    对,不是GorillaClass。当然也不是class Gorilla的类实例。在此处“实现”没有具体的代表对象。这么说吧:
    接口和实现是一对相关概念(理论层),IApe和Gorilla是一对相关概念(实践层)。
    两组概念之间的关系是:IApe is a 接口,Gorilla is a 实现。也就是说即使有了具体的接口IApe,我们还是需要“接口”这个概念来概括所有跟IApe特性相关的东西,它们的特性就是定义一组协议;
    同理,即使有了具体的实现Gorilla,我们也还是需要“实现”这个概念来概括所有跟Gorilla特性相关的东西,它们的特性就是解释一组协议。好好品味一下这句话:类是被命名的实现。
      

  5.   

    lxpws说的很有道理,让我有点开窍了。根据lxpws所言,我又思考了一下,是不是可以这么理解呢:
    第一点:DON BOX 在书中该处所说的 “类”特指具体的实现类(他后面说的“其正式名称为COM类或者 coclass”这一句我感觉比较准确),与其相对应的是接口类,但不管是实现类也好还是接口类也好,这其实是具体编程语言层面的概念,即lxpws所说的的实践层。
    第二点:由于COM是一种规范,是独立于具体编程语言的,因而为了描述这种“规范”(这种规范指导了具体编程语言的实现),COM 必须抽象地定义出接口和实现的概念,接口和实现这两个概念是 COM 规范层面的概念,对应lxpws所说的的理论层。