15

如果您最近观看了 Channel9 的 Going Deep 节目,那么经常提到的一个话题是编程中的数学对偶性。TomasP 有一篇关于面向对象编程中的二元性的很好的博客文章。

这是因为微软研究院发现观察者设计模式实际上是迭代器模式的数学对偶。从那时起,他们以各种方式使用了二元性概念。

我的问题是:

编程中有哪些数学对偶?

面向对象编程是一个好的开始。主要的 GoF 设计模式有:装饰器、状态、迭代器、外观、策略、代理、工厂方法、适配器、观察者、模板方法、复合、单例、抽象工厂和命令。是一个很好的对象图海报。

4

4 回答 4

2

我想说编程中的主要二元性是代码数据二元性,在 Lisp 中最清楚地暴露出来,但在大多数提供自省功能的现代语言中也很清楚。

于 2010-08-04T23:43:57.967 回答
1

不确定它是否完全是您正在寻找的,因为它比 OO 更 FP,但当然有Curry-Howard Correspondance(又名 Curry-Howard 同构)将程序与证明“等同”,将类型与公式“等同”。

于 2010-08-04T21:24:48.297 回答
1

您可能会争辩说,观察者/迭代器的二元性(有点,在这里与我一起工作:-))是更一般的 OO 继承范式以及委托和聚合的替代范式的表现。在前者中,更专业的对象使用基本功能(指向上)来继承通用功能,而在后者中,更通用的对象使用委托来访问更专业的功能(指向下/下) - 关于 oo 的事实有很多学术讨论设计可以用任何一种形式表达,并且由于形式之间的差异是(合理地)严格和定义的,我会说它可以被归类为双重

有关更多信息,请参阅奥兰多条约 2

于 2010-08-05T12:38:37.513 回答
1

我认为对象和闭包/匿名函数是对偶的。

一个对象是一堆数据,带有一组“附加”到它的例程(即它的方法)。

闭包,在函数式编程的意义上,是对函数的(可调用的)引用,附加了一组数据(以其绑定的自由变量的形式)。

于 2010-08-05T13:29:23.003 回答