oop - 理解 OOP 中的抽象

标签 oop functional-programming abstraction

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

最佳答案

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

让我们考虑一下 Writer 接口(interface)

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

此接口(interface)允许用户写入...某物。什么,我们并不特别担心。我们可以有多个版本:

class FileWriter implements Writer

class StringWriter implements Writer

class LogWriter implements Writer

class MySuperCustomWriter implements Writer

我们在哪里写并不重要,可以是 FileString、socket 或任何地方。我们想要做的就是写一些东西。这让我们可以编写如下代码:

public class MyBusinessLogic {

    private final Writer writer;

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

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

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

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

关于oop - 理解 OOP 中的抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57337727/

相关文章:

function - 我什么时候应该使用函数与方法?

java - 使用 List 还是 Collection 更好?

opengl - 如何设计 OpenGL DirectX "Abstraction Layer"

oop - 在Dart中扩展抽象类是否为子类提供了另一个构造函数

函数内的 JavaScript 函数

php - 将数据连接传递给 PHP 类/方法的推荐方法?

functional-programming - 将文本解析为 Racket/Scheme 中的树

C++:抽象类中需要静态函数

javascript - 任何 IDE 中的 Oo javascript 代码补全

design-patterns - 如何在不过度设计的情况下开始在纸上设计我的程序?