3

我对面向对象编程有点陌生。在我的旅途中,我遇到了一些让我困惑了几天的事情。它是术语“接口”以及它在不同的上下文甚至不同的编程语言中如何具有不同的含义。我想了解“界面”,但是当我进行研究时,我似乎得到了不同的定义,就好像它具有多种含义一样。

有人会在每种情况下给我一个简明的接口定义(只是主要的)吗?

我买了一本Matt Weisfeld写的名为《面向对象的思维过程》的书,其中一些已经被识别出来,如下所示:

  1. 图形用户界面
  2. 类的接口基本上是其方法的签名
  3. Objective-C 代码可以分解为物理上独立的模块,称为接口和实现
  4. Java风格的接口和Objective-C协议基本上是父类和子类之间的契约

(OOP 中术语接口的使用/定义是否比上面确定的更多?)

如果有人愿意解释 OOP 中术语接口的不同上下文,将不胜感激。

4

5 回答 5

4

简短的回答:

您的第 4 个要点可能最接近普遍接受的 OOP 接口概念:需要相互交互的各方之间的合同。此类合同定义了 (a) 一方提供的方式,以及 (b) 另一方为此所需的方式。

长答案:

一般来说,接口是允许两个(可能非常不同的)实体相互交互的东西。它使他们能够一起工作,同时允许他们分开。接口是双方同意的“共同点”。

(可以像门锁一样简单:锁和任何能够使用它的钥匙都必须“装配在一起”在一个地方;你可以称那个地方为接口。)

这个一般定义如何适用于您的列表?

图形用户界面

GUI 允许人和计算机程序进行交互。它不需要计算机完全成为人类(用耳朵听,用嘴说话,微笑等),也不需要人类成为计算机程序本身。(不包括过去几十年的 UI。:)

“类的接口基本上是其方法的签名”

(公开可见的)方法和它们的确切签名是其他类型能够与该类交互的唯一方法,因此从这个意义上说,它们一起形成了该类的接口。

此外,每个构造函数和方法的一般描述通常是接口的一部分,以及对类及其每个方法的目的的简短一般描述。当然,类本身的名称——非常重要。

“Objective-C 代码可以分解为物理上独立的模块,称为接口和 [实现]”

我对 Objective-C 的了解不够充分,无法对此发表评论,但许多语言都有一个模块系统,允许您将代码库划分为单独的、功能独立的模块。这些通常不必将所有类型和功能暴露给外人;每个模块都可以仔细声明其他模块可以看到的内容。如上所述,所有选择公开的都是“接口”,因为它将是与模块中的任何内容进行交互的唯一方式。“模块中的任何内容”都保持隐藏状态;这叫“执行”,外人不必知道。

“Java 风格的接口和 Objective-C 协议基本上是父类和子类之间的契约”

这可能最接近 OOP 中普遍接受的接口概念:它们是想要交互的各方之间的合约。请参阅此问题开头的简短答案。

基本上,Javainterface允许我们描述一组方法及其确切的签名,但它不允许我们提供实现。因此它是一个纯接口;不能直接调用。它只描述了如何与实际实现它的类进行交互。(两方不一定是“父母”和“孩子”。)

理想情况下,接口不应该只说明一个类必须提供什么;它还应该描述一个典型的消费者需要什么,从而使界面集中在一个封装良好的系统中。(我在这里指的是单一职责原则。)

于 2013-10-27T06:50:10.153 回答
1

接口是一个抽象和封装的概念。它基本上是您应该遵守或给予的合同,即接口只是两方之间的合同,以便他们知道他们将如何相互交互。接口通常定义您如何与类交互,以及它支持的方法。

接口仅包含方法的签名。这些方法没有任何东西,接口也不能做任何事情。这只是一种模式。

在此处输入图像描述

现在在这个 anAbstarctMethod() 是定义的接口,它只有签名但没有实现。现在,当 ASubClass 类实现了ineinterface 时,实际的实现就提供给了接口。

就图形用户界面而言,我认为这不一定是面向对象编程。wiki说图形用户界面只是一个用户界面,您可以通过它通过图标和其他指示器与电子设备进行交互。

在此处输入图像描述

Java 文档为此提供了一个很好的例子:-

方法形成对象与外界的接口;例如,电视机前面的按钮是您与其塑料外壳另一侧的电线之间的接口。您按下“电源”按钮来打开和关闭电视。

一个很好的例子 -

界面是对对象可以执行的操作的描述……例如,当您拨动电灯开关时,灯会亮起,您不在乎如何,它就是这样做的。在面向对象编程中,接口是对象必须具有的所有功能的描述,以便成为“X”。同样,作为一个例子,任何“像”灯一样的东西都应该有一个 turn_on() 方法和一个 turn_off() 方法。接口的目的是允许计算机强制执行这些属性并知道类型 T 的对象(无论接口是什么)必须具有称为 X、Y、Z 等的函数。

您还可以查看为什么使用接口?

另一种强大的设计技术是让一个类实现多个接口。如果这样做,您将拥有支持多个接口的对象,从而支持多种行为。当与运行时类型检查一起使用时,它变得非常强大。

于 2013-10-27T06:28:56.343 回答
0

在 OOP 中,术语“接口”基本上意味着可以发送到类对象的所有消息的所有方法签名。所以在 Objective-C 中,它会是头文件中的所有方法声明。

术语“图形用户界面”没有在 OO 上下文中使用“界面”一词。您列表中的第 2 项是 OO 接口。项目 #3 指的是 .h 和 .m 文件。Item #4 指的是 Java 语言中的关键字“interface”,并将其等同于 Objective-C 语言中的关键字“protocol”。

于 2013-10-27T06:23:53.597 回答
-1

一般含义:

接口本质上是与其他事物交互的事物

例如:一个接口可以是一个 python 应用程序和 Skype-API(我脑子里想出来的 xD)

于 2013-10-27T06:24:30.370 回答
-1

接口是多重继承的一种形式(没有“所谓的”带来的并发症)(这是一个有争议的主题)

OO是建立在“是一个”关系之上的,MI(多重继承)允许一个对象是多个事物。接口为它们定义了一种方式,无需实现。

他们是“你必须要_成为_随便什么”。

于 2013-10-27T06:25:13.183 回答