介面 (程式设计)
此条目没有列出任何参考或来源。 (2018年4月10日) |
接口或界面(英语:interface),台湾译为介面,取“仲介之面”之意。介面泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其互动的方式,就如物件导向程式设计提供的多重抽象化。介面可能也提供某种意义上的在讲不同语言的实体之间的翻译,诸如人类与电脑之间。因为介面是一种间接手段,所以相比起直接沟通,会引致些额外负担。
人类与电脑等资讯机器或人类与程式之间的介面称为使用者介面。电脑等资讯机器硬体元件间的介面叫硬体介面。电脑等资讯机器软体元件间的介面叫软体介面,其存在于分离的软体元件间,并提供一种机制使这些元件可以沟通。这条目主要述及程式编写或设计的方法论中所关心的介面,这些介面作为程式元件功能的抽象化,属于软体介面的一类。
实际上的介面
提供给软体元件间的介面会被存取到的事物的种类可以包括:常数、资料型别、程序的种类、例外规格、型别签名。在某些个案,定义变数作为介面的一部份可能会很有用。介面常会透过注解或(于某些实验性语言)透过正式的逻辑断言指明那些程序和方法的功能。
任一个软体模组 A 的介面被刻意与该模组的实作保持分离。实作包括描述于介面的程序和方法的实际程式码,就如其他“私有”变数、程序等等。任何其他软体模组 B (可以归类为 A 的客户)与 A 互动都被强迫确实真的只透过这介面。这按排的一个实际优点是,替换 A 的实作为符合这介面的相同规范的另一个,应该不会导致 B 故障,只要 B 那些使用到 A 的部份一直遵守这介面的规范(参看 Liskov代换原则)。
介面的使用
介面的升级
介面投入使用之后就不应该被修改。如果介面的实现模块提供了新的功能,而想在其他模块中调用这个功能,那么需要定义新的部份而不是修改现存的介面。在物件导向程式设计中,一些支持动态语言的模块实现了IDispatch来支持在运行时“发现”对象提供的函数、方法和事件(通常称为自动化),但是这个通过IDispatch来做代理的方法使得程式性能有所降低。