抽象和接口有什么区别

What is the difference between abstraction and interface?

本文关键字:什么 区别 接口 抽象      更新时间:2023-10-16

我从互联网上找到了以下定义,听起来都与我相似:

抽象

:抽象是OOPS的另一个好功能。抽象意味着只向对象的客户端显示必要的细节。您知道PC显示器的内部细节吗?打开显示器时会发生什么?这对您来说对监视器内部发生的事情重要吗?不对,对你来说重要的是天气监视器是否打开。当您更换车辆档位时,您真的关心车辆发动机的内部细节吗?不,但对你来说重要的是齿轮必须改变,就是这样!!这是抽象;仅显示对用户重要的详细信息。假设您的 Employee 类中有一个方法"CalculateSalary",该方法将 EmployeeId 作为参数,并以整数值的形式返回当月员工的工资。现在,如果有人想使用这种方法。他不需要关心员工对象如何计算工资?他唯一需要关心的是方法的名称,其输入参数和结果成员的格式,对吗?所以抽象说只公开与对象的用户(客户端)有关的细节。因此,使用您的类的客户端不需要了解内部细节,例如您的类如何执行操作?他只需要知道几个细节。这当然有助于代码的可重用性。

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

面向对象编程语言中的接口

接口是一种编程结构/语法,允许计算机对对象(类)强制实施某些属性。例如,假设我们有一个汽车类、一个踏板车类和一个卡车类。这三个类中的每一个都应该有一个 start_engine() 操作。每辆车的"发动机启动"如何留给每个特定类别,但它们必须具有start_engine动作的事实是接口的领域。

两种解释不是说的是同一件事吗?那么它们是相同还是不同?

界面告诉你可以用什么东西做什么。Abstract(ion)可能会告诉你如何做其中的一些。因此,接口始终是一种抽象,但抽象可以比接口携带更多的信息。

在C++世界中,与Java不同,没有接口的显式声明;相反,您的类会自动提供基类提供的所有接口。我们中的一些人倾向于只使用纯虚拟方法(可能还有非纯虚拟析构函数)和接口来调用类。请注意,严格来说,这不是指定界面的唯一方法,新的/即将推出的C++功能(如概念画板)可能会改变这种情况。同样,我们通常说,当一个类至少有一个纯虚拟方法时,它是抽象的,尽管当你使用基于模板/特征的组合和实现和接口而不是虚拟和继承时,可能会有不同的定义。

抽象是远离细节,如果你愿意的话,可以"缩小"。您倾向于通过创建结构来布局代码,从而从实现中抽象出来。举个例子,与其从身体中的单个细胞的角度思考,不如抽象出思考整个人,或者更进一步,思考一群人。

接口就是这样;你如何与代码接口。这通常以类中的public函数的形式出现,但不一定。理想情况下,接口应该描述某些东西可以做什么,而不受它如何做的影响。例如,你可能有一个功能可以让一个人走路,但没有一个功能来移动他们的个人肌肉。

在上下文中

,比如说,一个C++函数:

该接口描述了如何使用功能,这就是函数原型的作用。

调用函数的

客户端不必担心函数是如何实现的(即它如何做事)。简而言之,你有一个抽象层。