300分接口技术讨论,进者有分 ( 积分: 300 )

  • 主题发起人 主题发起人 aafly
  • 开始时间 开始时间
接口是一种规范。符合这个规范就可以认为是这个接口类。
他是后期绑定的规范解决了OO中继承所不能解决的一些问题。
例如飞机类,鸟类更本就不是一个祖先类派生的
我想划分一个飞行物类。有一个飞行方法,只要是飞行物就可以进行统一调用。
那么就可以声明一个飞行物接口,绑定到飞机类和鸟类上
 
我表视关注这个问题,因为我最近也要做接口了
 
建议去看下:www.gjwtech.com 也许对你有点帮助。
 
因为Delphi中是单根继承的,要实现一个类有两个或更多的功能,它提供了接口,当然也有其他办法,比如在类中定义一个别的类型,然后引用它的变量。
 
接口功能主要是为了实现COM功能
4. Delphi 中的 Interface

Delphi 1 开始的时候 , 没有多重继承 , 也没有 Interface, 还挺嘴硬 : 多重继承容易出错 .

以后为了支持 COM. Delphi 必须按照 MS 的规范实现了 COM Interface.

VC++ 是 C++, 必须遵守基本的 C++ 语法 , 所以把 COM Interface 用 template 和宏来弄累极了 .

Object Pascal 是 Borland 独家拥有 , 想怎么定义自己觉得好就行 . 所以 Delphi 3 的

Object Pascal 中始见如下写法 :

type

I 组合音响 = interface;

I 组合音响 = interface(IDispatch)

['{621D2E6A-E5E5-4919-8230-2E2EAB3CB38x}']

procedure play; safecall;

end;

T 索尼音响 = class(TOleServer, I 组合音响 )

end;


class 后面的括号里可以写几样东西了 .以前的 Turbo Pascal, Borland Pascal 可绝对不允许的 .

这些东西就是 COM Interface. ( 导入 /import type library 时自动生成 )

Delphi 3, Delphi 4, Delphi 5 ,6,7... 很多人对 Delphi 中的 Interface 认识仅限于此 .


Delphi 6 中的 Interface 已经由单纯支持 COM Interface 的性质转变

到 Java Interface 的性质 . 而已经完全是 Design Patterns 中所定义的 Interface.

这是一场革命 !


所以现在用 Delphi 6 做 COM/DCOM 用 Interface, SOAP 也用 Interface, CORBA 也用

Interface. 已经远不局限于 COM 了

1. 关于 多重继承 和 接口 。


事实上应该从继承说起 ,继承意味着子类具有父类所有的成员变量和成员方法 ,

( 从本质而言 ,父类是作为子类的一个内嵌类存在的 ),那么多重继承也就意味

着子类具有好几个父类的所有成员变量及成员方法 ,这本身没有什么玄妙的地方 ,

但是一旦出现一种 " 菱形 " 结构 , 即类 d1, d2 继承于类 b, 而类 mi 又多重继

承了类 d1,d2 ,则 mi 类中则会包含有两个 b 类的内嵌类 ,在做从 mi 到 b

的向上映射时 ,会出现二义性 (C++ 用了一种虚继承的机制来避免这种情况 ) 。


我个人认为很多时候不应该把接口和多重继承放在一起谈 ,因为接口没有成员

变量 ,没有实现了的成员方法 ,它根本没办法作为另一个类的内嵌成员存在。也就

是说没有什么类可以 " 继承 " 接口 ,只有 " 实现 " 接口。

" 实际上应该存在两种继承性。实现继承 (implementation inheritance ) 表示

真正的实现 ( 即行为 ) 被继承 ; 而接口继承 ( interface inheritance ) 则表示

只有行为的规范被继承 "


以这个角度来理解的话 ,Java 和 Delphi 里的接口 还有 C++ 里的纯虚基类

都是提供了接口继承 , 但是千万不要以为这是多重继承的替代 ,我想有必要强调这

一点 : 只有在作向上映射时 ,接口才能发挥作用。


2. 关于 接口 和 设计模式


设计模式中关于接口的最最最最直观运用是 Adapter 即 适配器 模式 ,而

Adapter 在 Observer 模式中也起到了相当重要的应用 ,强调这两个模式有两个原



一 , 这两个模式我最常用 ,也可以说别的模式我用得很少或者根本不会用。

二 , 我觉得这两个 pattern 适合初学模式的入手 ,也很容易从中发现 pattern

及面向对象的妙处。
 
不懂,帮忙顶
 
后退
顶部