用户:小朱/sandbox4
介面 (interface) 是物件导向程式设计中的成员之一,它定义了软体元件(software component)所必须要遵循的规范,只要是要取用某个软体框架(framework)或是为软体添加特定由软体框架所内建的功能时,在主程式与元件间的沟通,就是要利用介面。它也是不同软体元件间的沟通桥梁,当程式两方(不论是元件或用户端程式)要相互沟通时,都要透过介面来识别。介面也是在物件导向领域中广为应用作为降低耦合度的方法。
概念
编辑介面的应用是物件导向中多型(Polymorphism)性质的一种,在物件导向领域中,被广为用来规定软体的特定行为(behavior)或功能(function),包含方法的签名码(signature),而要具备某些功能的软体元件要实作(implement)元件内指定的功能,而用户端要使用介面执行个体的方式来存取软体元件,透过如此的作法可以将软体元件或是用户端对特定软体元件的耦合性完全消除,藉以达成在不更动主程式或用户端的情况下,自由的插拔或抽换不同的软体元件。
一个介面成员的宣告通常包含了:
- 成员名称。
- 成员类型(属性或方法)。
- 成员回传的资料型态(data type)。
- 成员所需的参数(arguments/parameters)。
下列程式码即为 Java 的介面范例:
public interface IPredator {
boolean chasePrey(Prey p);
void eatPrey(Prey p);
}
当一个类别决定实作特定介面时,则其类别内必须包含介面所有成员的实作(但内容不一定要实作,可以掷回例外,回传特定数值或是保持空白等),当用户端程式呼叫时,就是呼叫介面所定义的方法,实际处理此呼叫的即为此类别实作的介面方法。下列程式即为实作介面的类别的 Java 程式范例:
public class Lion implements IPredator {
public boolean chasePrey(Prey p) {
// programming to chase prey p (specifically for a lion)
}
public void eatPrey (Prey p) {
// programming to eat prey p (specifically for a lion)
}
}
下列为用户端的呼叫范例:
IPredator predatorObject = PredatorFactory.Create("Lion");
predatorObject.chasePrey(new Prey());
功能
编辑介面有下列功能:
- 合约化软体元件,介面具有强大的约束力,一旦软体元件明确的要求实作某个介面,就表示该软体元件一定具有该介面所定义的功能(但软体元件不一定会完全实作该介面的成员),用户端也可以明确的将软体元件的执行个体转换为介面执行个体,并用来呼叫软体元件中所实作的介面成员,它的作用就有如软体元件和用户端共同签署了合约(contract)一般,双方均受合约的约束。
- 切断耦合性,当用户端借由参考介面来使用软体元件时,用户端程式对软体元件就只是间接参考(indirect reference),表示用户端程式不再相依(depend)于特定的软体元件,只要利用介面以及设计模式中的抽象工厂方法(Abstract Factory Method Pattern),即可自由的透过组态档案(configuration file)或中介资料(metadata)抽换或更动不同的软体元件。
应用
编辑介面在物件导向领域,尤其是设计模式中被广泛的应用,由于它具有强制约束以及松散耦合 (Loose-coupling) 的特性,让许多的软体模式广为应用介面来发展。
COM
编辑COM(元件物件模型)是微软的软体元件框架之一,于 1993 年发展出来,透过由系统提供的 COM 用户端函式库以及标准的介面,所有的软体元件都可以利用 IUnknown/IDispatch 来达成查询软体元件内介面以及与其他平台元件互通的能力。