介面 (程式設計)

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

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

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

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

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

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

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

参见
 抽象倒置
 應用程式介面
 應用程式二進制介面
 模組 (程式設計)
 軟體元件化
 虛擬繼承
 介面 (資訊科技)

 
面向对象的程序设计
程序架構