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

理解OOP中的抽象

楚德辉
2023-03-14

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

共有3个答案

蒋岳
2023-03-14

快速封装示例

type
    public class DateTimeClass
       private 
          Era: integer;
          Culture: integer;
          Year: integer;
          Month: integer;
          Day: integer;

      protected
           Integer function getYear ( );

           // other functions

           procedure setYear ( );

          // other functions
      public
          procedure AssignOccidentalDate
               (NewYear: integer; NewMonth: integer;
                    NewDay : integer);
   end;

   ...

   var Date: DateTimeClass;

  Date.AssignOccidentalDate (2019, 07, 27);
  ...

您只能访问“公共”声明。

锺离阿苏
2023-03-14

不是调用一个提供抽象的函数,而是调用它的庄园。例如,您可能有一个函数,它允许您编写一行文本:

void writeLine(string fileName, string value)

但这并不是从您正在向文件写入的事实中抽象出来的。抽象版本不需要调用方提供fileName参数,因为这是特定于函数的特定实现的。相反,你会:

void writeLine(string value)

文件名是使用另一种机制提供的,例如,如果您使用OOP并调用writeLine方法,则类的构造函数参数,或者在函数情况下,您可以使用原始函数创建抽象版本。

林英朗
2023-03-14

在面向对象编程中,我们通常从继承和多态性的角度来考虑抽象。

让我们考虑<代码>编写器>代码>界面

interface Writer {
    void write(byte[] bytes)
}

此界面允许用户写入。。。某物什么,我们并不特别担心。我们可以有多个版本:

class FileWriter implements Writer

class StringWriter implements Writer

class LogWriter implements Writer

class MySuperCustomWriter implements Writer

无论是文件字符串、套接字还是其他什么地方,我们在哪里写都不重要。我们想做的就是写信给什么人。这让我们可以编写如下代码:

public class MyBusinessLogic {

    private final Writer writer;

    public MyBusinessLogic(Writer writer) {
        this.writer = writer;
    }

    void someBusinessLogic() {
        // .. 
        writer.write(someStuff);
    }
}

我们这里有一些商业逻辑,想做一些写作。通过使用接口,我们的业务逻辑不再依赖于任何特定的编写方法。它只是得到一些能够写东西的对象。我们可以将它传递给我们的任何示例编写器,并确保它将正确工作,因为我们对编写的行为感兴趣,而不是实现。

这样,业务逻辑就不依赖于文件系统、网络或其他任何东西。

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

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

  • 我一直在研究OOP的概念,在试图理解抽象到底是什么的过程中遇到了一些问题。我已经浏览了很多关于这个主题的堆栈溢出帖子,但还没有找到一个令人满意的答案。 我已经看到了很多关于抽象和封装之间差异的讨论,并且很自然地开始从隐藏特定类的工作方式和通过类API提供抽象的角度来思考抽象。以下是一些引导我走向这个方向的帖子: 最佳投票答案是指函数是抽象的。下一个答案开始谈论抽象类... 最佳投票答案似乎是指通过

  • 本文向大家介绍深入理解Java的接口与抽象类,包括了深入理解Java的接口与抽象类的使用技巧和注意事项,需要的朋友参考一下  对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本

  • 本文向大家介绍Java的接口和抽象类深入理解,包括了Java的接口和抽象类深入理解的使用技巧和注意事项,需要的朋友参考一下 Java的接口和抽象类深入理解 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Ja

  • 学习OOP概念,特别对深入理解抽象和封装感兴趣。 已签出以下内容 抽象VS信息隐藏VS封装 抽象和封装之间的区别? 我发现如果没有一个真实的、简单的示例类/代码片段,很难理解这些概念。 我的一个同事说过,抽象就是创建抽象类和普通类,用作用域保护其成员变量,称为封装。 有没有一种简单的方法我可以理解并帮助别人理解他们到底是什么,而不是重复下面的内容? 抽象和封装是互补的概念:抽象关注对象的可观察行为