如何回答“为什么要用委托,而不用方法”?

14-12-03 liangshan
              

因为函数的父节点是CLR运行时或者JVM运行时,函数的标识是它们的父节点定义的。面向对象中的方法是绑定在类型系统上的函数。类型系统是什么?类型系统就是有组织有纪律有偏移地一层一层的进行分类,组织结构是棵树,每一节点都不交叉,任何两节点的通信必定经过了它们共同的父节点。

方法被绑定在了类型系统上了,于是就不能方便的传来传去了,但是现在我们想要将方法传来传去,于是委托就出场了。

类型约束了方法的上下文,面向对象中的类型就如同函数式中的函数的作用域链或闭包(它也是组织结构)。面向对象和函数式没有本质差别。

面向对象这套方法的适用范围可能更大,因为面向对象的方法论比较有形,有形的东西比较利于管理,比较利于构建出庞大的系统,而函数式中的作用域链和闭包的形比较若,不利于管理,但在人脑+工具可以管理的范围内是可以发挥它的组合优势的。

委托、递归、重定向的定义我是从《元素模式》上学到的:

什么是委托?

委托是这样定义的:两个若相似性的对象,一个对象完成某件事情的时候调用了另一个对象叫委托。(“无相似性”的对象跟“同一类型”的对象是两个极端)

两个相似的对象,一个对象干一件事情的时候将这件事情委托给了另一个对象叫重定向。

同一个对象,这个对象在干一件事情的时候调用自身的同一个方法叫递归。

              

8
liangshan
2014-12-03 10:20

将函数绑定在运行时之前构建出的组织结构上就是OO的方法论,将函数的实例在运行时绑定在组织结构上的是函数式的方法论。

一个绑定的早,一个绑定的晚,但两者都要符合构造定律去构建出那棵树整个系统才能运行下去。

banq
2014-12-03 15:52

2014-12-03 10:20 "@anycmd"的内容
一个绑定的早,一个绑定的晚,但两者都要符合构造定律去构建出那棵树整个系统才能运行下去 ...

同意,面向对象的实体聚合根是在设计阶段很早就确定,以聚合根实体为树根节点,围绕树根有一批值对象和实体,所以,这些对象并不如一些人形容像烧汤soup一样混合在一起,而是有血以树形结构关系排列,缺点是一旦确定,不能修改,必须能真正反映现实世界的模型。

而函数编程则灵活多,是一种面向数据驱动思路下灵活的编程,没有假设已经存在一个树形结构,根据需求随时随地像接管道一样组合。

liseri
2014-12-21 16:55

其实就是绑定的问题, 述说其它的一些反而让人感觉不知所云