《COM本质论》第三章第一节(P80)中有这么一段话:“COM清晰地把接口(interface)、实现(implementation)和类(class)看作三个不同的概念。接口是与对象进行通信的抽象协议。实现是支持一个或者多个接口的具体数据类型,它为借口的每个抽象操作都提供了精确的语义解释。类是被命名的实现,它代表了具体的、可实例化的类型,其正式名称为COM类或者 coclass。”
其中我一直对这段话所定义的“实现”不理解,到底“实现”是什么呢,它与“类”有什么不同呢? 结合书上这一章所举的例子:IApe对应了接口,这个很明显,那么大猩猩,黑猩猩,和猩猩的类(比如 p82页的class Gorilla)对应的是“实现”的概念呢,还是“类”的概念呢,我看应该是对应“类”的概念吧,那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成? 我也感觉不妥。请高手指教,小弟这里谢过!
其中我一直对这段话所定义的“实现”不理解,到底“实现”是什么呢,它与“类”有什么不同呢? 结合书上这一章所举的例子:IApe对应了接口,这个很明显,那么大猩猩,黑猩猩,和猩猩的类(比如 p82页的class Gorilla)对应的是“实现”的概念呢,还是“类”的概念呢,我看应该是对应“类”的概念吧,那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成? 我也感觉不妥。请高手指教,小弟这里谢过!
解决方案 »
- 有大牛用过VNC源码的吗,请指教
- CSubEdit (派生自CEdit) 为什么不响应WM_CTLCOLOR消息?
- 请高手帮忙解答一下comdef.h头文件的作用是什么,为什么调用这个头文件?
- 给个 飘云阁 的邀请码呀。
- 求教:VS2005编译出来的程序在别的机器运行不了啊。。
- 服务程序中加载DLL(DLL中是关于键盘的钩子函数)出现问题!!(欢迎高手指点)
- 有一个全局的链表,父窗口中有一timer,每隔100ms向该链表中Add一个数据,子窗口中也有一timer,每隔200ms在该链表中取出一个数据,问对
- {在线结贴} CListCtrl控件创建后,如何改变它的风格?
- 在vc++中怎样用c
- 关于数值计算方法的问题(十分简单的送分问题)
- 如何实现 对话框按一个按钮后,对话框加大,多出来几个控件
- win32窗口程序的主线程从什么位置开始执行?
实现就是具体的类 它实现并继承自这个接口
就像 国际控件站 的对接 它可以和 发现者号对接 可以和 进步者号对接
那是因为它们的接口相同但是 确实不同的飞船
另外既然每种实现都对应一个类了(一一对应了),为什么还要有“实现”这个抽象的概念呢?我还是认为把实现和类视为一个概念比较合理,为什么弄那么晦涩呢?
如果谁能结合我前面发帖里提出的对应关系的问题回答,我可能会更清楚,在此我把那个问题再贴出来,欢迎大家讨论,以解小弟之惑。
问题:IApe对应了接口,这个很明显,那么大猩猩,黑猩猩,和猩猩的类(比如 p82页的class Gorilla)对应的是“实现”的概念呢,还是“类”的概念呢,我看应该是对应“类”的概念吧,那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成?
----------------------------------
class Gorilla是类的概念。那么什么对应了 “实现”的概念呢,肯定不可能是 P83的class GorillaClass吧,莫非是class Gorilla的类实例不成?
-------------------------------------
对,不是GorillaClass。当然也不是class Gorilla的类实例。在此处“实现”没有具体的代表对象。这么说吧:
接口和实现是一对相关概念(理论层),IApe和Gorilla是一对相关概念(实践层)。
两组概念之间的关系是:IApe is a 接口,Gorilla is a 实现。也就是说即使有了具体的接口IApe,我们还是需要“接口”这个概念来概括所有跟IApe特性相关的东西,它们的特性就是定义一组协议;
同理,即使有了具体的实现Gorilla,我们也还是需要“实现”这个概念来概括所有跟Gorilla特性相关的东西,它们的特性就是解释一组协议。好好品味一下这句话:类是被命名的实现。
第一点:DON BOX 在书中该处所说的 “类”特指具体的实现类(他后面说的“其正式名称为COM类或者 coclass”这一句我感觉比较准确),与其相对应的是接口类,但不管是实现类也好还是接口类也好,这其实是具体编程语言层面的概念,即lxpws所说的的实践层。
第二点:由于COM是一种规范,是独立于具体编程语言的,因而为了描述这种“规范”(这种规范指导了具体编程语言的实现),COM 必须抽象地定义出接口和实现的概念,接口和实现这两个概念是 COM 规范层面的概念,对应lxpws所说的的理论层。