【问题标题】:In OOP what are the different meanings of interface in the different contexts they apply to [closed]在OOP中,接口在它们适用的不同上下文中的不同含义是什么[关闭]
【发布时间】:2013-10-27 06:16:34
【问题描述】:

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

谁能给我一个简明的接口定义在每个上下文中(只是主要的)?

我买了一本 Matt Weisfeld 写的名为面向对象的思维过程的书,其中部分已被确定如下:

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

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

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

【问题讨论】:

  • 将界面想象成两个或多个事物可以相遇和互动的地方
  • 旁注:图形用户界面 (GUI) 不一定与 OOP 相关。
  • 这个问题似乎是题外话,因为它是关于术语的讨论问题,而不是特定的编程问题。更适合Software Engineering
  • 接口只是两方之间的合同,以便他们知道如何握手。假设 A 想与 B 交流,A 应该知道 B 说/理解什么语言,类似地在软件中你定义这是我班级的合同,你可以使用它。

标签: oop user-interface interface


【解决方案1】:

简答:

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

长答案:

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

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

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

图形用户界面

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

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

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

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

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

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

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

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

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

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

【讨论】:

  • 简洁明了。我对这一切只有两个问题。关于java接口,它实现了什么?它的目的和它提供的好处/力量是什么?除了我们讨论过的之外,OOP 中的术语接口还有其他用途吗?
  • @MohsinG:关于你的最后一个问题,我想在我的回答中表明“接口”是一个和其他词一样的词,OOP 并没有重新定义它的基本含义。虽然将 OOP“接口”广泛理解为类似于 Java 的interfaces,但这并不意味着该词不能用于描述具有相同基本特征的其他事物。
  • @MohsinG:关于你最初的几个后续问题,这些问题确实不同。我在这里没有多少空间来回答它们,所以只要说interfaces 迫使你退后一步,想想你的系统真正想要实现什么,以及它的各个部分如何协同工作就足够了。因为您无法提供具体的实现,所以这些 (a) 不会在这个重要的设计步骤中分散您的注意力,并且 (b) 将变得可替换/可交换。
【解决方案2】:

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

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

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

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

Java doc 给出了一个很好的例子:-

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

来自here的一个很好的例子:-

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

您也可以查看Why Use Interfaces?

另一种强大的设计技术是使用单个类实现 多个接口。如果你这样做,你将有对象 支持多个接口,因此支持多种行为。什么时候 与运行时类型检查一起使用,这变得非常 强大。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      一般含义:

      接口本质上是与其他东西交互的东西

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

      【讨论】:

      • 不,界面不交互自身。只有才能让另外两个事物相互交互。
      【解决方案5】:

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

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

      它们是“你必须 _成为 _ 的东西”。

      【讨论】:

      • “接口是多重继承的一种形式”和“OO 建立在“是”关系之上的显然是错误的。接口不是多重继承的一种形式(您可以在多重继承场景中使用它们,但它与接口的主要观点相去甚远)也不是建立在 is-a 关系上的 OO(OO 有很多东西,但你引用的这个对我来说是新闻的核心部分)
      猜你喜欢
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2010-10-21
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多