面向对象编程中有哪些数学对偶?

时间:2010-07-28 12:44:35

标签: oop design-patterns category-theory

如果您最近看过Going Deep shows of the Channel9,那么在编程中经常提到的一个主题是mathematical duality。 TomasP在面向对象编程方面具有良好的blog post二元性。

自从Microsoft Research发现观察者设计模式实际上是迭代器模式的数学对偶以来。从那以后,他们在various ways中使用了二元概念。

我的问题是:

编程中有哪些数学上的双重性?

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

4 个答案:

答案 0 :(得分:2)

我认为编程中的主要二元性是代码数据二元性,最明显地暴露在Lisp中,但在大多数提供内省功能的当代语言中也很清楚。

答案 1 :(得分:1)

不确定它是否完全是你所寻找的,因为它比OO更多FP,但当然有Curry-Howard Correspondance(又名Curry-Howard Isomorphism)将程序与样张和类型“等同”公式。

答案 2 :(得分:1)

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

有关详细信息,请参阅Treaty of Orlando 2

答案 3 :(得分:1)

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

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

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