介面 (程式設計)

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

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

實際上的介面

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

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

介面的使用

面向對象編程中,介面通常定義為一些方法的集合。對對象的屬性的存取通常通過屬性存取函數來進行。

介面的升級

介面投入使用之後就不應該被修改。如果介面的實現模塊提供了新的功能,而想在其他模塊中調用這個功能,那麼需要定義新的部份而不是修改現存的介面。在物件導向程式設計中,一些支持動態語言的模塊實現了IDispatch來支持在運行時「發現」對象提供的函數、方法和事件(通常稱為自動化),但是這個通過IDispatch來做代理的方法使得程式性能有所降低。

儘管介面的定義沒有強制的標準,但是一些標準的COM介面的應用十分廣泛,例如IUnknown和IDispatch。

參見