人们常常可以听到,OOP自然对应于人们对世界的思考方式。但是我强烈不同意这种说法:我们(或者至少我)根据我们遇到的事物之间的关系来概念化世界,但是OOP的重点是设计各个类及其层次结构。
注意,在日常生活中,关系和动作主要存在于对象之间,这些对象本来是OOP中无关类的实例。这样的关系的示例是:“我的屏幕在桌子的顶部”;“我(一个人)坐在椅子上”;“道路上有汽车”;“我正在键盘上打字”;“咖啡机煮水”,“文本显示在终端窗口中”。
我们以二价(有时是三价,例如“我给你送花”一词)动词来思考,其中动词是对两个对象进行操作以产生某种结果/动作的动作(关系)。的焦点是关于动作,两个(或三个)[语法]对象具有同等的重要性。
与OOP相反,在OOP中,您首先必须找到一个对象(名词),并告诉它对另一个对象执行某些操作。思维方式从对名词进行操作的动作/动词转变为对名词进行操作的名词-好像一切都是被动或反身的声音所说的,例如,“文本正在终端窗口中显示”。或者也许是“文本在终端窗口上绘制自身”。
不仅焦点转移到了名词上,而且一个名词(我们称其为语法主语)比另一个名词(语法对象)具有更高的“重要性”。因此,必须决定是说terminalWindow.show(someText)还是someText.show(terminalWindow)。但是,当一个人真正表示show(terminalWindow,someText)时,为什么要给这些琐碎的决定加重负担却又没有任何操作后果呢?[结果在操作上无关紧要-在两种情况下,文本都显示在终端窗口上-但是在类层次结构的设计中可能非常严重,并且“错误”的选择可能导致复杂的代码和难以维护的代码。]
因此,我要指出,进行OOP(基于类,单派遣)的主流方法很困难,因为它是不自然的,并且与人类对世界的看法不符。CLOS的通用方法更接近于我的思维方式,但是,可惜,这不是普遍的方法。
鉴于这些问题,为什么/为什么发生当前流行的OOP方式如此流行?可以采取什么行动来废除王位呢?