功能,动态和面向方面编程的模式

时间:2009-11-13 09:32:58

标签: functional-programming design-patterns aop dynamic-programming

我们有一本非常好的GoF书(设计模式:可重复使用的面向对象软件的元素),关于面向对象编程中的模式,以及关于这个主题的大量文章和资源。

是否有关于函数式编程的模式(最佳实践)的书籍(文章,资源)?

用于Python和Ruby等语言的动态编程?

对于AOP?

6 个答案:

答案 0 :(得分:14)

以前曾问过一个相关的问题:"Does functional programming replace GoF design patterns",反响很好。

相当于“设计模式”在FP中非常模糊。通常,每次在代码中看到“模式”时,您都应该以统一的方式创建一些内容来覆盖它的所有用途。通常它将是一个更高阶的函数。

例如,以下C代码

for (int i = 0; i < n; i++)
  if (a[i] == 42)
    return true;
return false;

可以想到一些基本的“设计模式” - 检查列表中是否有一些特殊元素。此代码段可能会在具有不同条件的代码中出现多次。在FP中,您只需使用更高阶的函数几次。它不再是“模式”了。

函数式编程有自己的实践,但它们与OOP中的“设计模式”有很大不同。它们包括使用多态性,列表,高阶函数,不变性/纯度,懒惰[并非所有这些都是FP的必要或特定] ...另见 "what are core concepts of FP"。此外,键入类(Haskell),模块和仿函数(OCaml),continuationsmonadszippersfinger treesmonoidsarrowsapplicative functorsmonad transformers,许多purely functional data structuresbook)等。Functional pearls,兰德尔舒尔兹已经提到,形成了一个非常丰富的FP资源

要学习如何编写惯用代码,函数式编程语言中的任何书籍/资源都可以满足恕我直言(例如,RWHLYAH);在那里总是解释在命令性和功能性之间的差异。

在动态语言中,杰夫福斯特的链接是一个很好的收藏; here非常巧妙地使用JavaScript中的memoization,可以被视为“设计模式”。

答案 1 :(得分:6)

GoF中描述的设计模式列表是针对C ++和Java等语言编写的。它有时被认为是使灵活语言更具动态性的变通方法列表。例如,Ruby中并不真正需要访问者模式,因为您可以在运行时简单地将添加成员函数更改为您的类。如果你可以使用mixins,装饰器模式已经过时了。

根据我的经验,当我使用C ++实现解决方案时,我倾向于花费大部分时间编写脚手架代码。我首先创建一个允许我在应用程序的程序域中思考的平台。设计模式可能是为了对不同类型的脚手架进行分类而开发的。

我应该提一下,当我在Ruby编程时,我没有太多的支持代码。似乎没有必要。

我的理论是,其他语言并不强调设计模式的概念,因为它们的基本语言结构就足够了。为了防御Java和C ++:也许这是因为功能和AOP语言经常用于更具体的问题域或利基,而Java和C ++用于所有事情。

现在换一些不同的东西。如果您对OO设计感到有点厌倦,并且想要学习新内容,那么您可能会对Elements of Programming撰写的书Stepanov感兴趣。在本书中,他解释了如何从数学的角度来探讨编程。要预览,请查看他的Class notes for Adob​​e(在this page上找到)。您可能也对Adobe Collected Papers感兴趣。

答案 2 :(得分:2)

答案 3 :(得分:1)

功能性珍珠(功能性编程的设计模式的规范集合中不是其中之一)吗?

答案 4 :(得分:0)

Design patten in Ruby

除了GOF中提到的设计模式之外,它还列出了其他一些模式,如Convention over Configuration

答案 5 :(得分:0)

就个人而言,我最重要的动态语言模式 - 编写测试。它比静态类型的语言更重要。