【发布时间】:2019-12-11 17:53:36
【问题描述】:
我正在研究面向对象的概念,抽象概念基本上被描述为对用户隐藏实现。因此,如果一个类中有一个成员函数,并且我们为某些任务调用该函数,抽象表示用户不应该关心事情是如何完成的,而应该只知道正在完成什么。但即使在非面向对象的编程风格中,如果我们编写一个函数,整个任务也只需调用一个函数即可完成。它不也遵循抽象逻辑吗?或者,OOP 中的抽象和函数式编程有什么区别?
【问题讨论】:
-
抽象是一个非常广泛的话题,但对于 oop,我会学习多态性。相同的概念在 FP 中以某种方式起作用,您的“接口”就是类型类或函数签名。
-
是的,抽象是为了让用户远离细节。您也可以在函数式编程中实现这一点。事实上,很多时候你可能不知道也不关心特定函数是如何派生的,例如,可能是由不同的其他函数组成的。因此,抽象在这两种情况下都成立——它是为了让细节远离调用代码。不同之处在于抽象与其他技术结合使用时 - 正如@AlexHart 所说,它在多态中发挥了很大作用。
-
“对用户隐藏实现”我称之为封装或information hiding。是的,函数/过程也可以做到这一点,你不一定需要对象——这个概念对 OOP 很重要的是对象是封装的单位。
-
是的,一个函数很自然地从一个表达式中抽象出来,它也概括了它。但它在没有状态的情况下完成这一切,并且除了将输入映射到输出之外没有其他影响。没有与数据的绑定,而只是对数据具有什么类型的期望。如果您正在寻找两种范式之间的区别,您应该研究相反的概念:具体化。 FP基本上是用值编程。函数就是值。甚至效果也由值表示并封装在值中。我认为 OOP 中没有对应物——不过我不是专家。
标签: oop functional-programming abstraction