用户:小朱/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 来达成查询软件元件内界面以及与其他平台元件互通的能力。