例如存在一些容器,里面放了苹果,梨之类的玩意,有人从一个容器中取出物体放入另一个容器中,这种过程使用面向对象如何做呢?
取出物体这种操作,是放在人这个对象中,还是放在容器这个对象里面呢?
如果放在人这个对象中,则有:
Person1.pick(Container1,Index).
如果放在容器这个对象中,则有:
Container1.pick(Person1,Index).
这两种方法其实都不好,第一个方法要求实现人的对象时,认识Container这样的对象类型,第二个方法问题一样。
其实,仔细分析起来,应该把pick这个行为独立出来,实现如下的句型:
Person1 pick(Index) Container1
这看上去是回到了过程式语言,但在Zero中,Pick关联到了两种对象,因而,在键入Person1 的时候,就会列出适合Person1的句型,实
际上还是把Pick与Person关联到了一起。
Pick和Person关联在一起的方式是概念式的,而不是捆绑式的,Pick的概念是独立的,但通过类型推断加上智能提示和Person实现了操作上
的关联。这种方式是最好的。
在这种方式下,我们可以发现,原本被捆绑在对象中的方法很多都可以以这种方式解耦,形成独立的概念,但又与原对象保持某种程度的关联。