当前位置: 首页 > 知识库问答 >
问题:

OOP中“抽象”的正确定义是什么?

濮阳振海
2023-03-14

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

我遇到了几个主要的定义。它们都有效吗?其中一个错了吗?我很困惑。

定义1:
抽象是将现实世界的对象建模为编程语言的过程
抽象不是关于接口或抽象类<抽象是用编程语言对现实世界中的对象进行建模的过程<因此,接口和抽象类只是这一过程中使用的两种技术
在像Java这样的面向对象编程语言中,一切都是抽象的:接口、类、字段、方法、变量等等。

抽象是其他概念所依赖的基本概念:封装、继承和多态

定义2:抽象是面向对象编程(OOP)语言的关键概念之一。它的主要目标是通过向用户隐藏不必要的细节来处理复杂性。这使得用户能够在提供的抽象之上实现更复杂的逻辑,而无需理解甚至思考所有隐藏的复杂性。

共有3个答案

东郭子默
2023-03-14

定义1并不能准确地解释抽象。将真实世界的对象建模为编程语言的过程称为OOP。抽象是一个面向对象的概念。

定义2在解释抽象方面做得更好。

但最好是用自己的想法和语言来理解这个概念。

想想抽象这个词在英语中的意思。它被定义为“处理想法而非事件的品质”。在OOP中类似,抽象是一个只显示相关数据并向用户隐藏对象不必要细节的概念。

西门淮晨
2023-03-14

定义1太窄了。“将真实世界的对象建模为编程语言”可以被视为抽象(尽管我更愿意在这里使用术语建模),但抽象的形式还有很多。

定义2更好。

甄伟兆
2023-03-14

这两个定义都是有效的。定义之间的差异很大程度上是由于上下文。第一个是关于抽象在建模中的作用。第二个是关于抽象在编程中的作用。

我的建议是不要被寻找“正确”的定义所困扰。这些术语有一系列的含义和解释。没有官方仲裁者告诉你哪个定义是正确的。这不是数学...

 类似资料:
  • 我在研究面向对象的概念,那里的抽象概念基本上被描述为对用户隐藏实现。所以,如果一个类中有一个成员函数,我们为某个任务调用该函数,抽象表示用户不应该关心事情是如何完成的,而应该只知道做了什么。但即使是在非面向对象编程风格中,如果我们编写一个函数,整个任务也只需调用一个函数即可完成。它不也遵循抽象逻辑吗?或者,OOP中的抽象和函数式编程之间有什么区别吗?

  • 我正在阅读OOP的一些基本内容。我对封装和抽象感到困惑。根据我的理解,抽象是一种只暴露很少的东西而隐藏很少的东西的方式。封装帮助我们封装对象的状态,以便外部世界无法访问它,并且可以通过内部方法访问它。因此,它们都是相关的。但是我读过很多次,封装是通过使用getter和setter实现的,而抽象是通过使用抽象类和接口实现的。现在考虑下面的代码(C) 在上面的代码中,我没有使用接口或抽象类,但根据我的

  • 我想根据我使用 AbstractTableModel 指定的列从数据库中的表中提取数据。表中有 8 列,但只想显示 8 列中的 3 列。 例如: 数据库有以下列:ID、First_Name、Last_Name、…、Phone_Number。如果我指定要在表中显示First_Name、Last_Name和Phone_Number,它将显示ID、First_ Name和Last_ Name。我认为应该

  • 问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火

  • 问题内容: 什么是Java中的“抽象类”? 问题答案: 抽象类是无法实例化的类。通过创建可以实例化的继承子类来使用抽象类。抽象类为继承的子类做一些事情: 定义继承子类可以使用的方法。 定义继承子类必须实现的抽象方法。 提供一个公共接口,该接口允许子类与所有其他子类互换。 这是一个例子: 请注意,“ abstractMethod()”没有任何方法主体。因此,你不能执行以下操作: 没有实现的方法!因此

  • 问题内容: 什么是PHP中的抽象类? 如何使用? 问题答案: 抽象类是至少包含一个抽象方法的类,该方法中没有任何实际代码,只是名称和参数,并且已标记为“抽象”。 这样做的目的是提供一种模板,以从其继承并强制继承类实现抽象方法。 因此,抽象类介于常规类和纯接口之间。接口也是抽象类的特殊情况,其中所有方法都是抽象的。 有关更多参考,请参见PHP手册的这一部分。