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