简短的回答:
您的第 4 个要点可能最接近普遍接受的 OOP 接口概念:需要相互交互的各方之间的合同。此类合同定义了 (a) 一方提供的方式,以及 (b) 另一方为此所需的方式。
长答案:
一般来说,接口是允许两个(可能非常不同的)实体相互交互的东西。它使他们能够一起工作,同时允许他们分开。接口是双方同意的“共同点”。
(可以像门锁一样简单:锁和任何能够使用它的钥匙都必须“装配在一起”在一个地方;你可以称那个地方为接口。)
这个一般定义如何适用于您的列表?
图形用户界面
GUI 允许人和计算机程序进行交互。它不需要计算机完全成为人类(用耳朵听,用嘴说话,微笑等),也不需要人类成为计算机程序本身。(不包括过去几十年的 UI。:)
“类的接口基本上是其方法的签名”
(公开可见的)方法和它们的确切签名是其他类型能够与该类交互的唯一方法,因此从这个意义上说,它们一起形成了该类的接口。
此外,每个构造函数和方法的一般描述通常是接口的一部分,以及对类及其每个方法的目的的简短一般描述。当然,类本身的名称——非常重要。
“Objective-C 代码可以分解为物理上独立的模块,称为接口和 [实现]”
我对 Objective-C 的了解不够充分,无法对此发表评论,但许多语言都有一个模块系统,允许您将代码库划分为单独的、功能独立的模块。这些通常不必将所有类型和功能暴露给外人;每个模块都可以仔细声明其他模块可以看到的内容。如上所述,所有选择公开的都是“接口”,因为它将是与模块中的任何内容进行交互的唯一方式。“模块中的任何内容”都保持隐藏状态;这叫“执行”,外人不必知道。
“Java 风格的接口和 Objective-C 协议基本上是父类和子类之间的契约”
这可能最接近 OOP 中普遍接受的接口概念:它们是想要交互的各方之间的合约。请参阅此问题开头的简短答案。
基本上,Javainterface
允许我们描述一组方法及其确切的签名,但它不允许我们提供实现。因此它是一个纯接口;不能直接调用。它只描述了如何与实际实现它的类进行交互。(两方不一定是“父母”和“孩子”。)
理想情况下,接口不应该只说明一个类必须提供什么;它还应该描述一个典型的消费者需要什么,从而使界面集中在一个封装良好的系统中。(我在这里指的是单一职责原则。)