如果您最近看过Going Deep shows of the Channel9,那么在编程中经常提到的一个主题是mathematical duality。 TomasP在面向对象编程方面具有良好的blog post二元性。
自从Microsoft Research发现观察者设计模式实际上是迭代器模式的数学对偶以来。从那以后,他们在various ways中使用了二元概念。
我的问题是:
编程中有哪些数学上的双重性?
面向对象编程是一个好的开始。主要的GoF设计模式是:装饰器,状态,迭代器,外观,策略,代理,工厂方法,适配器,观察者,模板方法,复合,单例,抽象工厂和命令。 Here是一张很好的对象 - 海报。
答案 0 :(得分:2)
我认为编程中的主要二元性是代码数据二元性,最明显地暴露在Lisp中,但在大多数提供内省功能的当代语言中也很清楚。
答案 1 :(得分:1)
不确定它是否完全是你所寻找的,因为它比OO更多FP,但当然有Curry-Howard Correspondance(又名Curry-Howard Isomorphism)将程序与样张和类型“等同”公式。
答案 2 :(得分:1)
你可能会认为观察者/迭代者的二元性(在某种程度上,与我一起在这里工作:-))是更为一般的OO范式的继承和代表和聚合的替代范式的表现。在前者中,更专业的对象使用基本功能(向上)来继承一般功能,而在后者中,更通用的对象使用委托来访问更专业的功能(指向下/向外) - 关于oo的事实有很多学术讨论设计可以用任何一种形式表达,并且由于形式之间的差异是(合理)严格和定义的,我会说它可以被归类为双重
有关详细信息,请参阅Treaty of Orlando 2
答案 3 :(得分:1)
我认为对象和闭包/匿名函数是双重的。
一个对象是一堆数据,带有一组“附加”它的例程(即它的方法)。
在函数编程意义上,闭包是对函数的一个(可调用的)引用,附加了一组数据(以其绑定的自由变量的形式)。