功能性,动态性和方面性的模式

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

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

用Python和Ruby等语言进行动态编程?

对于AOP?


之前有人提出了一个相关的问题:“函数式编程是否取代GoF设计模式”,并做出了很好的回应。

FP中的“设计模式”相当模糊。 一般来说,每当你在你的代码中看到一个“模式”时,你应该创建一些东西以统一的方式覆盖它的所有用途。 通常它会是一个高阶函数。

例如,下面的C代码

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

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

函数式编程有自己的做法,但它们与OOP中的“设计模式”有很大不同。 它们包括使用多态性,列表,高阶函数,不变性/纯度,懒惰[并非所有都是FP必不可少或特定的] ......另请参阅“什么是FP的核心概念”。 此外,类型类(Haskell),模块和函子(OCaml),延续,单子,拉链,手指树,monoids,箭头,应用函子,monad变换器,许多纯粹功能的数据结构(书)等功能性的珍珠,已经提到Randall Schulz最好地形成了非常丰富的FP资源。

要学习如何编写惯用代码,任何书籍/功能编程语言资源都足以满足恕我直言(例如,RWH和LYAH); 那里总是解释思考必然性和功能性之间的差异。

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


GoF中描述的设计模式列表是针对C ++和Java等语言编写的。 它有时被认为是使僵化的语言更具动态性的解决方法列表。 例如,Visitor模式在Ruby中并不是真的需要,因为您可以在运行时简单地将添加成员函数更改为类。 如果你可以使用mixin,Decorator模式已经过时了。

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

我应该提到,当我在Ruby中进行编程时,我没有太多的支持代码。 似乎并不需要它。

我的理论是其他语言不强调设计模式的概念,仅仅是因为他们的基本语言结构足够。 为了保护Java和C ++:也许这是因为函数和AOP语言经常用于更具体的问题域或壁龛,而Java和C ++则用于一切。

现在换一种不同的东西。 如果您对面向对象设计感到有点无聊,并且想要学习新的东西,那么您可能对Stepanov编写的“编程元素”一书感兴趣。 在这本书中,他解释了如何从数学的角度来看待编程。 有关预览,请查看他的Adobe课堂笔记(在本页中可以找到)。 您也可能对Adobe的收集论文感兴趣。


以下是动态编程中设计模式的链接

链接地址: http://www.djcxy.com/p/42881.html

上一篇: Patterns for functional, dynamic and aspect

下一篇: Haskell style & typeclass design (should typeclasses be minimized?)