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

作为定义的抽象

荆弘伟
2023-03-14

我正在努力理解被称为抽象的OOP基本概念。当我说“理解”时,我的意思不仅仅是学习一个定义,而是真正有一个深刻的理解。

在网上,我看到了许多定义,如:

隐藏底层实现并提供高层规范

注重基本品质,而不是具体的例子。

我知道iPhone按钮是一个很好的抽象例子,因为作为一个用户,我不需要知道屏幕是如何显示的,我所需要知道的就是按下按钮。

关于抽象,你认为以下结论如何:

抽象需要对象的许多具体实例,并通过提供一个单一的、概括的概念来提取它们的共同信息和功能。

基于此,类实际上是许多实例的抽象,对吗?

共有3个答案

拓拔弘厚
2023-03-14

面向对象编程的目标是尽可能地将现实世界的思维带入软件开发。也就是说,抽象意味着任何字典可能定义的东西。

例如,《牛津词典》中抽象的可能定义之一:

处理想法而不是事件的品质。

文字参考。com的定义更加雄辩:

把某物视为一般性质或特征的行为,而不是具体的现实、具体的对象或实际情况。

事实上,文字参考。com是一种可能的抽象定义,你应该感到惊讶,因为它不是抽象的编程解释。

也许您想要一个更类似于编程的抽象定义,我将尝试提供一个很好的总结:

抽象是将具体的现实转化为可以用作原型的对象表示的过程。通常,在大多数OOP语言中,原型由类型表示,而类型又可以由类、结构和接口定义。类型可以抽象数据或行为。

抽象的一个很好的例子是,橡木制成的椅子仍然是椅子。这就是我们的思维方式。你知道某些形式是许多事物最基本的定义。你的大脑看不到一张椅子的所有细节,但是它看到它满足了考虑椅子的要求。面向对象编程和抽象正好反映了这一点。

苏宾鸿
2023-03-14

实际上,这里有两个基本概念需要理解。

>

  • 抽象:只处理某物的“什么”而不是某物的“如何”的想法。例如:当你调用一个对象方法时,你只关心这个方法做什么,而不关心它是如何做的。有几层抽象,即上层只关心下层做什么,而不关心它是如何做的。另一个例子:当你编写汇编指令时,你只关心一个特定的指令做什么,而不关心中央处理器中的底层电路如何执行指令。

    泛化:比较一系列事物(对象、函数,基本上是任何事物)并找出它们之间的共性,然后提取共性的想法。一个具有一系列属性的类是这些类的实例的泛化,因为所有实例都具有相同的属性,但这些属性的值不同。

  • 姚高爽
    2023-03-14

    我不同意你的两个例子。苹果手机按钮不是屏幕的抽象,而是使用手机的界面。类也不是其实例的抽象。

    抽象可以被认为是将一个特定概念视为一个更一般概念的一种形式。

    重复一个被过度使用的例子:所有的车辆都可以移动。汽车转动轮子,飞机使用喷气式飞机,火车在轨道上行驶。

    给定一系列车辆,而不是背负着了解每辆车内部工作细节的负担,并且必须:

    car.RotateWheel();
    airplane.StartJet();
    train.MoveOnTrack();
    

    我们可以将这些对象视为更抽象的载体,并告诉它们

    vehicle.Move();
    

    在本例中,vehicle是一个抽象概念。它不代表任何特定对象,但代表汽车、飞机和火车的共同功能,允许我们与这些特定对象进行交互,而不知道它们是车辆的一种类型。

    在面向对象的上下文中,车辆很可能是更具体的车辆类型的基类。

     类似资料:
    • 问题内容: 是否可以在不添加抽象方法的情况下定义抽象类? 问题答案: 当然。 声明一个类抽象仅意味着您不允许自己对其进行实例化。 声明方法抽象意味着子类必须提供该方法的实现。 这两个是单独的概念,尽管很明显,您不能在非抽象类中使用抽象方法。您甚至可以使用带有方法的抽象类,但绝不能相反。

    • 不能定义 抽象类也不行 有什么其他的方法用来定义静态成员方法

    • 我正在将新的Jetpack Android导航与抽屉布局结合使用。当在抽屉XML中使用相同的ID并结合导航图中的片段时,一切都按预期工作。我设置了所有内容: 我现在还想触发自定义操作/代码,而不是在单击抽屉菜单中的项目时执行片段事务。我有一个菜单,单击“注销”时想注销用户:

    • 也许我跑错了方向,但我有一个元素列表,我想读。 我有一个抽象基类,让我们称之为: 现在我有两个可能的实现:

    • 我有这样一个类,它从application.properties获取配置,以创建连接到数据库的驱动程序(im使用jdbc连接到我的数据库): 我还有一个名为JdbcDao的抽象类来创建连接到数据库所必需的所有工具: 然后,我有了那个jdbc抽象类的具体表示: 但是当我做新的JdbcUserDao()时,我有一个NPE,因为应用程序上下文没有被注入,这会在尝试获取自定义bean时导致一个空指针。 堆

    • 我试图理解OOP中抽象的定义。 我遇到了几个主要的定义。它们都有效吗?其中一个错了吗?我很困惑。 定义1: 抽象是将现实世界的对象建模为编程语言的过程 抽象不是关于接口或抽象类<抽象是用编程语言对现实世界中的对象进行建模的过程<因此,接口和抽象类只是这一过程中使用的两种技术 在像Java这样的面向对象编程语言中,一切都是抽象的:接口、类、字段、方法、变量等等。 抽象是其他概念所依赖的基本概念:封装