我对面向对象编程有点新意。在我的旅途中,我遇到了让我困惑了几天的事情。它是术语“界面”,它在不同的上下文甚至不同的编程语言中具有不同的含义。我想理解“界面”,但是当我进行研究时,我似乎得到了不同的定义,好像它有多重含义。
有人会在每个上下文(只是主要的)中给我一个简洁的界面定义吗?
我在Matt Weisfeld购买了一本名为面向对象的思维过程的书,其中部分已经确定如下:
(OOP中术语接口的使用/定义是否比上面确定的更多?)
如果有人愿意在OOP中解释术语界面的不同背景,我们将非常感激。
答案 0 :(得分:2)
您的第4个要点可能最接近OOP接口的普遍接受的概念:合同在需要彼此交互的各方之间。此类合同定义了一方提供的方式(a),以及(b)另一方要求的方式。
一般来说,界面是允许两个(可能是非常不同的)实体相互交互的东西;它使他们能够在一起工作,同时让他们分开。界面是双方同意的“共同点”。
(可以像门锁一样简单:锁和任何能够工作的钥匙都必须“合在一起”在一个地方;你可以把那个地方称为界面。)
此一般定义如何适用于您的列表?
图形用户界面
GUI允许人和计算机程序进行交互。它不需要计算机变成完全人类(并且用耳朵听,用嘴说话,微笑等),也不要求人类成为计算机程序本身。 (过去几十年的用户界面被排除在外。)
“类的接口基本上是其方法的签名”
(公开可见)方法及其精确签名是其他类型能够与该类交互的唯一方法,因此从这个意义上说,它们一起构成了该类的接口。
“Objective-C代码可以分解为物理上独立的模块,称为接口和[实现]”
我不太清楚Objective-C对此有何评论,但许多语言都有一个模块系统,允许您将代码库划分为独立的,功能独立的模块。这些通常不必将其所有类型和功能暴露给外人;每个模块都可以仔细声明其他模块可以看到的内容。如上所述,选择公开的所有内容都是“接口”,因为它将是与模块中的任何内容进行交互的唯一方式。 “模块中的任何东西”都隐藏着;它被称为“实施”,外人不应该知道它。
“Java风格的接口和Objective-C协议基本上是父类和子类之间的契约”
这可能与OOP中普遍接受的接口概念最接近:它们是希望进行交互的 方之间的契约。请参阅本问题开头的简短回答。
基本上,Java interface
允许我们描述一组方法及其确切的签名,但它不允许我们提供实现。因此它是一个纯粹的界面;它无法直接调用。它只描述如何与实际实现它的类进行交互。 (双方不一定必须是“父母”和“孩子”。)
理想情况下,界面不应仅仅陈述一个类提供的内容;它还应描述典型的消费者需要什么,从而将界面集中在一个封装良好的系统中。 (我指的是Single-Responsibility Principle。)
答案 1 :(得分:1)
接口是抽象和封装的概念。它基本上是你应该遵守或给予的合同,即,Interface只是双方之间的合同,以便他们知道他们将如何相互作用。接口通常定义了如何与类进行交互,它支持的方法。
接口仅包含方法的签名。方法没有任何接口可以做任何事情。这只是一种模式。
现在在这个anAbstarctMethod()是定义的接口,它只有签名但没有实现。现在,当ASUBClass类实现了ineterface时,实际的实现就会提供给接口。
就图形用户界面而言,我不认为这可能是面向对象的编程。 wiki表示图形用户界面只是一个用户界面,您可以通过该界面通过图标和其他指示器与电子设备进行交互。
Java doc为此提供了一个很好的例子: -
方法形成对象与外界的界面;该 例如,电视机正面的按钮就是 您和另一侧的电线之间的接口 它的塑料外壳。按“电源”按钮转动 电视开关。
来自here的一个很好的例子: -
接口是对象可以执行的操作的描述... 例如,当您打开灯开关时,灯会亮起,而您却没有 关心如何,就是这样。 面向对象编程, 接口是对象必须具有的所有函数的描述 为了成为“X”。再举一个例子,任何“行动都喜欢”的东西 一个灯,应该有turn_on()方法和turn_off()方法。该 接口的目的是允许计算机强制执行这些 属性并知道TYPE T的对象(无论是什么 interface is)必须有X,Y,Z等函数。
您还可以查看 Why Use Interfaces?
另一种强大的设计技术是拥有一个类实现 多个接口。如果你这样做,你将有对象 支持多个接口,因此支持多种行为。什么时候 与运行时类型检查一起使用,这变得非常 强大。
答案 2 :(得分:0)
在OOP中,术语“接口”基本上表示可以发送到类对象的所有消息的所有方法签名。所以在Objective-C中,它将是头文件中的所有方法声明。
术语“图形用户界面”在OO上下文中未使用“interface”一词。 列表中的项目#2是OO接口。 项目#3指的是.h和.m文件。 Item#4引用Java语言中的关键字'interface',并将其与Objective-C语言中的关键字'protocol'等同。
答案 3 :(得分:-1)
一般含义:
接口本质上是与其他东西相互作用的东西
例如:一个接口可以与一个python应用程序和Skype-API(我的脑海中想到xD)
答案 4 :(得分:-1)
界面是一种多重继承的形式(没有带来的'涉嫌'并发症)(这是一个有争议的主题)
OO建立在“是一种”关系上,MI(多重继承)允许一个对象成为几件事。接口为他们定义了一种方式,无需实现。他们是“你必须要_ 成为_ 无论如何”。