接口 (程式设计)

接口界面英语:interface),台湾译为介面,取“仲介之面”之意。接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式,就如面向对象编程提供的多重抽象化。接口可能也提供某种意义上的在讲不同语言的实体之间的翻译,诸如人类与电脑之间。因为接口是一种间接手段,所以相比起直接沟通,会引致些额外负担。

人类与电脑等资讯机器或人类与程序之间的接口称为用户界面。电脑等资讯机器硬件组件间的接口叫硬件接口。电脑等资讯机器软件组件间的接口叫软件接口,其存在于分离的软件组件间,并提供一种机制使这些组件可以沟通。这条目主要述及程序编写或设计的方法论中所关心的接口,这些接口作为程序组件功能的抽象化,属于软件接口的一类。

实际上的接口

提供给软件组件间的接口会被存取到的事物的种类可以包括:常量资料类型程序的种类、例外规格、类型签名。在某些个案,定义变量作为接口的一部分可能会很有用。接口常会透过注解或(于某些实验性语言)透过正式的逻辑断言指明那些程序和方法的功能。

任一个软件模块 A 的接口被刻意与该模块的实现保持分离。实现包括描述于接口的程序和方法的实际代码,就如其他“私有”变量、程序等等。任何其他软件模块 B (可以归类为 A 的客户)与 A 交互都被强迫确实真的只透过这接口。这按排的一个实际优点是,替换 A 的实现为符合这接口的相同规范的另一个,应该不会导致 B 故障,只要 B 那些使用到 A 的部分一直遵守这接口的规范(参看 Liskov代换原则)。

接口的使用

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

接口的升级

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

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

参见