面向对象建模 = 面向宾语建模 != 主语思维


JavaScript和python不同写法。

“主语是什么”是一个重要的哲学课题。
“有无主语?”、
“什么是主语?”或“主语是什么?”、
“什么应该做主语?”、
“主语必须是真实存在吗?”、
“主语是代指哪个实体?”、
“主语涵括哪类实体?”、
“主语是否需要?”、
“主语存在意义?”
“主语如何命名?”
“主语从何而来?”
“主语的适用范围上下文是多大?”
“谓语能不需要主语独立存在吗?”
“为何人们心理中如此看重主语?”
“主语的宗教情节?”
“存在being能替代主语吗?”
“主语把节奏带向何方?”
等命题是一个关键哲学课题,会引向不同的节奏。

这种关注语法中主语的思维称为”主语思维“,面向对象思维中的对象是”宾语思维“,因此主语思维的人不容易做好面向对象编程,因为他们太关注主语了,忽视了发现宾语对象的敏感性。主语思维也和上帝思维类似,从上帝视角高高在上俯瞰万物,忘记自身也是处于当前上下文这个重要的预设,把自己当成上帝,变成了“主”。

例如:”小明借书“,对这个语句进行语法分析,”小明“是主语,”书“是宾语,那么进行面向对象建模时,对象是”小明“还是”书“?以谁为主?
如果你是”主语思维“,有可能认为主语”小明“是面向对象中的那个对象实体:首先建立”小明“这个用户对象,然后将”借书“这个动作作为”小明“对象里的方法。
好像很完美,这个对象设计表达了”小明借书“这个语义需求。
但这是主语思维遮蔽了自己眼睛:主语思维让你忽视上下文场景,将”小明借书“变成一个僵化的、脱离上下文的、抽象的、正确的”废话“。

那么,让我们用演绎方法对”小明借书“这个语句进行逻辑演绎,”小明“和”书“两个都是对象实体,因此有两个实体,那么,借书这个行为放在哪个对象中呢?面向对象中对象是”Object“,代表客观对象,其对应词语是”subject“,Subject/Object的意思是:主体/对象或主体/宾语,因此宾语常作为Object,那么如何设计宾语”书“作为一个主要对象实体?并将”借书“这个动作放入其中?

这时,上下文场景概念出来了:在”借书“这个场景中,宾语”书“是我们主要的面向的对象实体;而在”用户资料管理“这个场景中,”小明“作为一个用户(宾语)被管理,”资料系统管理小明用户“。

所以,”面向对象“实际是对”主语思维“的纯理性批判,需要从逻辑上推敲每个主语,这个主语是不是专有词语?还是存在一定上下文限制?如果是通用的名词术语是否已经经过科学论证的?不要让任何人物或事物随意占据自己心中的主语位置,当然也不要将自己作为自己的主语,每次说话都以”我如何如何“表述,存在感虽然很强,但...。

总之,对”主语“的考究是一个人理性怀疑精神的象征,是科学建模的第一步。