Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对OOP中“抽象”的定义感到困惑_Oop_Abstraction - Fatal编程技术网

对OOP中“抽象”的定义感到困惑

对OOP中“抽象”的定义感到困惑,oop,abstraction,Oop,Abstraction,我试图理解OOP中“抽象”的定义 我遇到了两个主要的定义。它们都有效吗?其中一个错了吗?我很困惑。我用自己的话重新写下了定义 定义1: 抽象是从现实世界中获取一些对象,并将其转换为编程术语的概念。例如,创建一个人类并为其提供int-health、int-age、String-name等属性,以及eat等方法 定义2: 更一般的定义。抽象是一个发生在软件系统中任何地方的概念,其中涉及“使事物更一般/更简单/抽象”。举几个例子: 继承层次结构,其中较高的类更简单或更通用, 并定义更一般和抽象的实现。

我试图理解OOP中“抽象”的定义

我遇到了两个主要的定义。它们都有效吗?其中一个错了吗?我很困惑。我用自己的话重新写下了定义

定义1:

抽象是从现实世界中获取一些对象,并将其转换为编程术语的概念。例如,创建一个人类并为其提供int-health、int-age、String-name等属性,以及eat等方法

定义2:

更一般的定义。抽象是一个发生在软件系统中任何地方的概念,其中涉及“使事物更一般/更简单/抽象”。举几个例子:

继承层次结构,其中较高的类更简单或更通用, 并定义更一般和抽象的实现。 而层次结构中较低的类则更为具体和明确 更详细的实现

使用封装对其他类隐藏类的实现细节,从而使类对外部软件世界更“抽象”

这些定义是否正确


我指的是最传统和公认的定义。

我认为两者都是合理的,它们在不同的环境中使用。Timothy Budd在其1991年的文本《面向对象编程导论》中将其定义为封装和隔离设计和执行信息的能力。从某种意义上说,面向对象技术可以看作是从过程到模块再到抽象数据类型和对象的漫长历史进程的自然结果。注入我自己的观点,当你把焦点从如何做的事情转移到哪些操作可用于哪些类型的事情时,你是在抽象。@pjs所以基本上,抽象是将焦点从细节和具体的实现转移到事物的类型,即类,可用的操作,即方法等,从而使编程更简单、更通用、更抽象。这发生在封装时,因为封装意味着隐藏实现的细节,只显示事物的类型及其更一般和抽象的定义。我理解对了吗?@Prog对我来说是一个很好的总结!对于抽象,您不必担心实现。事实上,有了一个好的抽象接口,可以完全修改支持实现,而不改变抽象用户如何使用它。我喜欢音频磁带、cd播放机、vcr和dvd的控件示例——全世界的每个人都知道播放、反转、停止和暂停按钮的功能,即使底层技术完全不同。@pjs您认为这个定义是传统的,并且被广泛接受吗?