「interface」的各地常用譯名 中国大陸 接口、界面 港澳 界面、介面 臺灣 介面
接口 或界面 (英語:Interface ),台湾译为介面 ,取“仲介之面”之意。介面泛指實體把自己提供給外界(可以為另一實體)的一種抽象化 物,用以由內部操作分離出外部溝通方法,使其能被修改內部而不影響外界其他實體與其互動的方式,就如物件導向程式設計 提供的多重抽象化 。
介面是兩實體交換資料的媒介,交換資料的實體可以是軟體 、電腦硬體 、外部设备 、人等等[ 1] 。有些介面(例如觸控式螢幕 )是雙向的,可以傳送資訊,同時接收資訊,有些介面(例如滑鼠或喇叭)則是單向的,只能傳送或接收資訊[ 2] 。人類與電腦等資訊機器或人類與程式 之間的介面稱為使用者介面 。電腦等資訊機器硬體元件間的介面叫硬體介面。電腦等資訊機器軟體元件間的介面叫軟體介面,其存在於分離的軟體元件間,並提供一種機制使這些元件可以溝通。
介面可能也提供某種意義上的在講不同語言的實體之間的翻譯,諸如人類與電腦之間。因為介面是一種間接手段,所以相比起直接溝通,會引致些額外負擔。
硬體介面為電腦等的資訊機器的硬體 之間通信時的物理連接器 形狀、傳送接收信號的方法(協定 )等等的規格。主要可分為並列 連結的和位元 序列 連結的。序列連結者相比起並列連結者,多得多使用同一電線作為信號控制線和電源供應線。個人電腦 領域,因並列連結向更高傳輸速度的發展遇到瓶項,而在向各介面的序列連結方式遷移(參看匯流排 )。
軟體介面可能會指不同層次上的各種介面:作業系統 和硬體之間會有介面、電腦上運行的应用程序 或计算机程序 需要有介面來處理字串流 、過濾器 ( 英语 : Filter (software) ) 及管道 [ 3] 、在面向对象程序设计 中,應用程式中的物件會透過方法 來和外面互動,這也是一種介面[ 4] 。而軟體 間通訊時傳遞消息(message)的規格、行程間通訊 或電腦網路 也都有介面的特性。
程式編寫或設計的方法論 中所關心的介面作為程式元件功能的抽象化,屬於軟體介面的一類。在程式設計時的一個基本原則是:所有的資源預設都是不允許直接存取的,只允許透過有良好定義的介面來存取[ 5] 。軟體介面提供可以存取電腦系統中資源(例如記憶體、CPU、儲存裝置)的方式。若軟體沒有透過界面存取資源,而是直接存取相關資源,對機能以及穩定性都會造成不良的(而且可能是災難性的)後果[來源請求] 。
提供給軟體元件間的介面會被存取到的事物的種類可以包括:常數 、資料型別 、程序 的種類、例外 規格、型別簽名 。在某些個案,定義變數 作為介面的一部份可能會很有用。介面常會透過註解或(於某些實驗性語言)透過正式的邏輯斷言指明那些程序和方法的功能。在面向对象编程 中,介面通常定义为一些方法的集合。对对象的属性的存取通常通过存取函式 来进行。有時介面中也會定義公共变量 [ 6] 。
軟體模組A 的介面會刻意的和模組的實現 分開定義。模組的實現會包括要有關介面的模組以及介面的實際程式碼,也包括模組中的私有程序及方法。另一個軟體模組B ,假設是軟體模組A 的客户端 ,需通過公開提供的介面才能存取軟體模組A 。這樣安排在實務的好處是:若將軟體模組A 的實現方式改成其他方式,但介面不變,軟體模組B 仍然可以存取軟體模組A ,軟體模組A 實現介面的作法不會影響B ,這就是关注点分离 ,只關注介面的規格(也可以參照里氏替换原则 )[來源請求] 。
介面投入使用之后就不应该被修改。如果介面的实现模块提供了新的功能,而想在其他模块中调用这个功能,那么需要定义新的部份而不是修改现存的介面。在物件導向程式設計中,一些支持動態語言的模块实现了IDispatch 来支持在运行时“发现”对象提供的函数、方法和事件(通常称为自动化),但是这个通过IDispatch来做代理的方法使得程式性能有所降低。
尽管介面的定义没有强制的标准,但是一些标准的COM 介面的应用十分广泛,例如IUnknown 和IDispatch。
在一些面向对象程序设计 語言中(特別是沒有完整多重继承 的語言),會用「介面」來定義沒有資料,只有方法的抽象資料型別 ,以此為方法 ( 英语 : Method (computer science) ) 的簽名(signatures)。任一個具有程式及資料的类 ,只要有「介面」中所有的方法,就是「實現」此一介面[ 7] 。而且,就算在單一繼承語言中,也可以實現多個介面,因此可以同時「符合」多種型態[ 8] 。
介面是資料類型 的定義:物件可以改變其型態(例如子程序 或方法 呼叫中),方式是用其所實現的介面或基底類,而不是直接列出具體的类 。因此所有實現這個介面的类都可以使用[來源請求] 。例如在最終實現之前,可以用虛設代碼 來讓軟體開發得以進行。另外,在测试驱动开发 中,可以在測試過程中用mock物件來取代實際的物件,這類的桩 實現會在後續開發中,再改為真正實作的程式碼。
一般而言,介面中的方法沒有實際的程式碼,因此無法執行。若要執行,需要由非抽象的類別實現其介面,讓方法有實際的程式碼,才能執行[來源請求] 。例如一種稱為Stack 的介面需要支援兩種方法:push() andpop()。可以用不同的方式來實現,例如FastStack及GenericStack,第一個可能是快速的,其資料結構是固定長度的,第二個的資料結構其長度可以調整,不過速度較慢。
介面可能會包括許多方法,不過也有可能只有一種方法,甚至完全沒有方法。例如Java 語言定義了介面Readable,只有一個read()方法:會因為不同的用途而有許多不同的實現,例如BufferedReader、FileReader、InputStreamReader、PipedReader及StringReader。像是Serializable等標記介面 ( 英语 : Marker interface pattern ) 完全沒有方法,是在通用處理時,用反射 來提供運行時資訊[ 9] 。
介面的使用也可以形成一種稱為「介面上的程式設計」(programming to the interface)的程式設計風格。此作法背後的概念是將程式的邏輯以其物件的介面來呈現,而不是內部實現的細節。介面上的程式設計可以減少和實現相關的相依性,也提高程式的復用性[ 10] 。
控制反转 是將上述概念推到極致後的一種設計原則。
使用者介面 是指人類與機器、裝置、電腦程式或其他複雜工具互動的中介物的聚合。常用於電腦系統和電子裝置文脈。有時也會將機械 系統、交通工具或工業 設備的使用者介面稱為人機介面 (Human-Machine Interface ,縮寫為 HMI)。
^ Hookway, B. Chapter 1: The Subject of the Interface.Interface . MIT Press. 2014: 1–58 [2020-09-24 ] .ISBN 9780262525503 . (原始内容存档 于2020-07-29). ^ IEEE 100 - The Authoritative Dictionary Of IEEE Standards Terms. NYC, NY, USA: IEEE Press: 574–575. 2000.ISBN 9780738126012 . ^ Buyya, R.Mastering Cloud Computing . Tata McGraw-Hill Education. 2013: 2.13 [2020-09-24 ] .ISBN 9781259029950 . (原始内容存档 于2020-07-29). ^ Poo, D.; Kiong, D.; Ashok, S. Chapter 2: Object, Class, Message and Method.Object-Oriented Programming and Java . Springer-Verlag. 2008: 7–15.ISBN 9781846289637 . ^ Bill Venners.Leading-Edge Java: Design Principles from Design Patterns: Program to an interface, not an implementation - A Conversation with Erich Gamma, Part III .http://www.artima.com/index.jsp : artima developer. 2005-06-06 [2011-08-03 ] . (原始内容存档 于2011-08-05).Once you depend on interfaces only, you're decoupled from the implementation. That means the implementation can vary, and that is a healthy dependency relationship. For example, for testing purposes you can replace a heavy database implementation with a lighter-weight mock implementation. Fortunately, with today's refactoring support you no longer have to come up with an interface up front. You can distill an interface from a concrete class once you have the full insights into a problem. The intended interface is just one 'extract interface' refactoring away. ... ^ Patterson, D.A.; Hennessy, J.L. Computer Organization and Design: The Hardware/Software Interface 3rd. Elsevier. : 656.ISBN 9780080502571 . ^ What Is an Interface . The Java Tutorials. Oracle. [2012-05-01 ] . (原始内容存档 于2012-04-12). ^ Interfaces . The Java Tutorials. Oracle. [2012-05-01 ] . (原始内容存档 于2012-05-26). ^ Performance improvement techniques in Serialization .http://www.precisejava.com/ : Precise Java. [2011-08-04 ] . (原始内容存档 于2011-08-24).We will talk initially about Serializable interface. This is a marker interface and does not have any methods. ^ Gamma; Helm; Johnson; Vlissides.Design Patterns: Elements of Reusable Object-Oriented Software . Addison Wesley. 1995:17–18 .