接口 (信息技术)

接口 (信息技术)

参见:应用二进制接口和应用程序接口

软件接口可能会指不同层次上的各种接口:操作系统和硬件之间会有接口、电脑上运行的应用程序或计算机程序需要有接口来处理字符串流、过滤器(英语: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() and pop()。可以用不同的方式来实现,例如FastStack及GenericStack,第一个可能是快速的,其数据结构是固定长度的,第二个的数据结构其长度可以调整,不过速度较慢。

接口可能会包括许多方法,不过也有可能只有一种方法,甚至完全没有方法。例如Java语言定义了接口Readable,只有一个read()方法:会因为不同的用途而有许多不同的实现,例如BufferedReader、FileReader、InputStreamReader、PipedReader及StringReader。像是Serializable等标记接口(英语:Marker interface pattern)完全没有方法,是在通用处理时,用反射来提供运行时信息[9]。

接口上的程序设计

编辑

接口的使用也可以形成一种称为“接口上的程序设计”(programming to the interface)的程序设计风格。此作法背后的概念是将程序的逻辑以其对象的接口来呈现,而不是内部实现的细节。接口上的程序设计可以减少和实现相关的相依性,也提高程序的复用性[10]。

控制反转是将上述概念推到极致后的一种设计原则。

相关推荐

说说中国乒乓球队神秘的陪练队伍的那些事
365bet足球在线

说说中国乒乓球队神秘的陪练队伍的那些事

📅 07-28 👍 521
EasyUI学习课件:从入门到精通
日博best365下拉飞机XLCOKK

EasyUI学习课件:从入门到精通

📅 07-10 👍 161