Clojure 语言的创造者 claims “开放的、大型的函数集在开放的、小型的可扩展抽象集上运行是算法重用和库互操作性的关键”。显然,它与典型的 OOP 方法相矛盾,在这种方法中,您创建大量抽象(类)和相对较小的一组操作它们的函数。请推荐一本书、书中的一章、一篇文章或您的个人经历来详细说明这些主题:
*MFUFA:“在很少的抽象上有很多功能”
最佳答案
编程中有两个主要的“抽象”概念:
[编辑:这两个是双重的。第一个是客户端抽象,第二个是实现方抽象(如果你关心这些事情:在形式逻辑或类型理论方面,它们分别对应于普遍和存在量化)。]
在 OO 中,类是实现这两种抽象的厨房水槽功能。
广告 (1),对于几乎每个“模式”,您都需要定义一个自定义类(或多个)。另一方面,在函数式编程中,您通常有更多轻量级和直接的方法来实现相同的目标,尤其是函数和元组。例如,经常有人指出,GoF 中的大部分“设计模式”在 FP 中都是多余的。
Ad (2),如果您没有可变状态徘徊在需要检查的任何地方,则需要较少地进行封装。您仍然在 FP 中构建 ADT,但它们往往更简单和更通用,因此您需要的它们更少。
关于oop - "Many functions operating upon few abstractions"原理 vs 面向对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10565116/