都是“虚的”不能被实例化这也是接口中为什么不能包含字段--成员变
量的原因 正因为接口是虚的所以接口内的索引属性时间等只能有声明而不
能在接口内实现具体如何实现是派生接口或者派生类的事
都具有模板的性质如果一个接口或者类从某一个接口继承它将自动具有
被集成者的特征包括索引属性函数实践等
接口支持多重继承而 #中类之支持单一继承接口实际表示的是一种
承载能力
下面是接口的一个简单定义:
!"!#$"!
!% &!$'
((注意此处没有
)%
上面的接口定义了一个索引
一个实践 "!一个方法 & 和一个属性 )%
'*$+
! ,
!%-!$'
.,!$'
!"!#$"!
%!%%"!
"!,'$$
'"!/"!0"/
第一节 接口慨述
接口()用来定义一种程序的协定。实现接口的类或者结构要
与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论
上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以
包含方法、属性、事件和索引器。接口本身不提供它所定义的成员的实现。接
口只指定 实现该接口的类或接口必须提供的成员。
接口好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让
这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口
并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。
例子:
1/"$
!"!#$"!
!%&!$'
)%
'*$$!%"!#$%*2"!
上面例子中的接口包含一个索引 、一个事件 "!、一个方法 & 和
一个属性 )%。
接口可以支持多重继承。就像在下例中,接口3%*%4%3同时
从354%3和364%3继承。
%%$
!%)
54%+%%$
!%5
64%+%%$
!%
%*%4%+54%64%
类和结构可以多重实例化接口。就像在下例中,类3"4%3继承了
类3%%$3,同时从374%'3和3%%$3继承。
74%'
!%44*
'*$$"4%+%%$%%$74%'
'*$!%)
'*$!%44*
8在上面的代码中,3)3方法从3%%$3接口而来;343方法
从374%'3接口而来,都以3'*$3的身份在3"4%3类中实现。
说明:
、9中的接口是独立于类来定义的。这与 ..模型是对立的,在 ..
中接口实际上就是抽象基类。
、接口和类都可以继承多个接口。
、而类可以继承一个基类,接口根本不能继承类。这种模型避免了 ..
的多继承问题,..中不同基类中的实现可能出现冲突。因此也不再需要诸如
虚拟继承和显式作用域这类复杂机制。9的简化接口模型有助于加快应用程序
的开发。
、一个接口定义一个只有抽象成员的引用类型。9中一个接口实际所做
的,仅仅只存在着方法标志,但根本就没有执行代码。这就暗示了不能实例化
一个接口,只能实例化一个派生自该接口的对象。
:、接口可以定义方法、属性和索引。所以,对比一个类,接口的特殊性
是:当定义一个类时,可以派生自多重接口,而你只能可以从仅有的一个类派
生。
接口与组件
8接口描述了组件对外提供的服务。 在组件和组件之间、组件和客户之间都通
过接口进行交互。因此组件一旦发布,它只能通过预先定义的接口来提供合理
的、一致的服务。这种接口定义之间的稳定性 使客户应用开发者能够构造出坚
固的应用。一个组件可以实现多个组件接口,而一个特定的组件接口也可以被
多个组件来实现。
8组件接口必须是能够自我描述的。这意味着组件接口应该不依赖于具体的实现,
将实现和接口分离彻底消除了接口的使用者和接口的实现者之间的耦合关系,
增强了信息的封装程度。同时这也要求组件接口必须使用一种与组件实现无关
的语言。目前组件接口的描述标准是 76 语言。
由于接口是组件之间的协议,因此组件的接口一旦被发布,组件生产者就
应该尽可能地保持接口不变,任何对接口语法或语义上的改变,都有可能造成
现有组件与客户之间的联系遭到破坏。
8每个组件都是自主的,有其独特的功能,只能通过接口与外界通信。当一个组
件需要提供新的服务时,可以通过增加新的接口来实现。不会影响原接口已存
在的客户。而新的客户可以重新选择新的接口来获得服务。
组件化程序设计
组件化程序设计方法继承并发展了面向对象的程序设计方法。它把对象技
术应用于系统设计,对面向对象的程序设计的实现过程作了进一步的抽象。我
们可以把组件化程序设计方法用作构造系统的体系结构层次的方法,并且可以
使用面向对象的方法很方便地实现组件。
8组件化程序设计强调真正的软件可重用性和高度的互操作性。它侧重于组件的
产生和装配,这两方面一起构成了组件化程序设计的核心。组件的产生过程不
仅仅是应用系统的需求,组件市场本身也推动了组件的发展,促进了软件厂商
的交流与合作。组件的装配使得软件产品可以采用类似于搭积木的方法快速地
建立起来,不仅可以缩短软件产品的开发周期,同时也提高了系统的稳定性和
可靠性。
组件程序设计的方法有以下几个方面的特点:
8、编程语言和开发环境的独立性;
、组件位置的透明性;
、组件的进程透明性;
、可扩充性;
:、可重用性;
;、具有强有力的基础设施;
<、系统一级的公共服务;
9语言由于其许多优点,十分适用于组件编程。但这并不是说 9是一门
组件编程语言,也不是说 9提供了组件编程的工具。我们已经多次指出,组
件应该具 有与编程语言无关的特性。请读者记住这一点:组件模型是一种规范,
不管采用何种程序语言设计组件,都必须遵守这一规范。比如组装计算机的例
子,只要各个厂 商为我们提供的配件规格、接口符合统一的标准,这些配件组
合起来就能协同工作,组件编程也是一样。我们只是说,利用 9语言进行组
件编程将会给我们带来更 大的方便。
知道了什么是接口,接下来就是怎样定义接口请看下一节==定义接口。
第二节 定义接口
8从技术上讲,接口是一组包含了函数型方法的数据结构。通过这组数据结构,
客户代码可以调用组件对象的功能。
定义接口的一般形式为:
*'%--+*=$=
*%/
说明:
、*'(可选):附加的定义性信息。
、%-(可选): 允许使用的修饰符有 >和四个访问修饰符。
分别是:>、'*$、%、$、 !。在一个接口定义
中同一修饰符不允许出现多次,>修饰符只能出现在嵌套接口中,表示覆盖
了继承而来的同名成员。5'*$%$!修
饰符定义了对接口的访问权限。
、指示器和事件。
、-:接口名称。
:、*=$(可选)+包含一个或多个显式基接口的列表,接口间由逗号
分隔。
;、=*%/:对接口成员的定义。
<、接口可以是命名空间或类的成员,并且可以包含下列成员的签名: 方
法、属性、索引器 。
?、一个接口可从一个或多个基接口继承。