【发布时间】:2010-09-24 14:02:58
【问题描述】:
自从我去年开始学习F# 和OCaml 以来,我已经阅读了大量文章,这些文章坚持认为设计模式(尤其是在Java 中)是命令式语言中缺少的功能的变通方法。我找到的一篇文章makes a fairly strong claim:
我遇到的大多数人都读过 the Design Patterns book by 帮派 四(GoF)。任何自尊的程序员 会告诉你这本书是 语言不可知论者和模式 申请软件工程 一般,无论哪种语言 你用。这是一个崇高的主张。 不幸的是,它远离 真相。
函数式语言非常 富有表现力。 使用函数式语言 不需要设计模式 因为语言可能很高 水平,你最终编程在 消除设计的概念 模式都在一起。
函数式编程 (FP) 的主要特征包括函数作为一等值、currying、不可变值等。对我来说,OO 设计模式似乎并不明显接近这些特征中的任何一个。
此外,在支持 OOP 的函数式语言(例如 F# 和 OCaml)中,对我来说,使用这些语言的程序员显然会使用与所有其他 OOP 语言相同的设计模式。事实上,现在我每天都在使用 F# 和 OCaml,我在这些语言中使用的模式与我在 Java 中使用的模式之间没有显着差异。
函数式编程消除了对 OOP 设计模式的需求的说法是否属实?如果是这样,您能否发布或链接到典型 OOP 设计模式及其等效功能的示例?
【问题讨论】:
-
你可以看看 Steve Yegge (steve-yegge.blogspot.com/2006/03/…) 的文章
-
“这本书与语言无关,模式通常适用于软件工程” - 应该注意的是,这本书不同意这种说法,因为某些语言不需要表达某些诸如设计模式之类的东西:“我们的模式假设了 Smalltalk/C++ 级别的语言特性,而这种选择决定了哪些可以轻松实现,哪些不能轻松实现 [...] CLOS 有多种方法,例如,这减少了对此类模式的需求作为访客(第 331 页)。” (第 4 页)
-
另外请记住,许多设计模式在足够高级的命令式语言中甚至不是必需的。
-
@cibercitizen1 鸭型语言,支持高阶函数和匿名函数。这些功能提供了许多设计模式本应提供的大部分功能。
标签: oop design-patterns functional-programming