介面 (程式設計)

(重定向自接口 (计算机科学)

接口界面英語:interface),台湾译为介面,取“仲介之面”之意。介面泛指實體把自己提供給外界的一種抽象化物(可以為另一實體),用以由內部操作分離出外部溝通方法,使其能被修改內部而不影響外界其他實體與其互動的方式,就如物件導向程式設計提供的多重抽象化。介面可能也提供某種意義上的在講不同語言的實體之間的翻譯,諸如人類與電腦之間。因為介面是一種間接手段,所以相比起直接溝通,會引致些額外負擔。

人類與電腦等資訊機器或人類與程式之間的介面稱為使用者介面。電腦等資訊機器硬體元件間的介面叫硬體介面。電腦等資訊機器軟體元件間的介面叫軟體介面,其存在於分離的軟體元件間,並提供一種機制使這些元件可以溝通。這條目主要述及程式編寫或設計的方法論中所關心的介面,這些介面作為程式元件功能的抽象化,屬於軟體介面的一類。

實際上的介面

提供給軟體元件間的介面會被存取到的事物的種類可以包括:常數資料型別程序的種類、例外規格、型別簽名。在某些個案,定義變數作為介面的一部份可能會很有用。介面常會透過註解或(於某些實驗性語言)透過正式的邏輯斷言指明那些程序和方法的功能。

任一個軟體模組 A 的介面被刻意與該模組的實作保持分離。實作包括描述於介面的程序和方法的實際程式碼,就如其他「私有」變數、程序等等。任何其他軟體模組 B (可以歸類為 A 的客戶)與 A 互動都被強迫確實真的只透過這介面。這按排的一個實際優點是,替換 A 的實作為符合這介面的相同規範的另一個,應該不會導致 B 故障,只要 B 那些使用到 A 的部份一直遵守這介面的規範(參看 Liskov代換原則)。

介面的使用

面向对象编程中,介面通常定义为一些方法的集合。对对象的属性的存取通常通过属性存取函数来进行。

介面的升级

介面投入使用之后就不应该被修改。如果介面的实现模块提供了新的功能,而想在其他模块中调用这个功能,那么需要定义新的部份而不是修改现存的介面。在物件導向程式設計中,一些支持動態語言的模块实现了IDispatch来支持在运行时“发现”对象提供的函数、方法和事件(通常称为自动化),但是这个通过IDispatch来做代理的方法使得程式性能有所降低。

尽管介面的定义没有强制的标准,但是一些标准的COM介面的应用十分广泛,例如IUnknown和IDispatch。

参见