“不对!不对!”
就在所有人都沉浸在“继承”所带来的巨大震撼中时,一个尖锐的声音,打破了这片狂热。
众人循声望去,说话的,是逻辑组的一位数学家,姓王,是国内顶尖的数理逻辑专家。
他此刻正紧锁眉头,死死地盯着黄建功写下的那个“狗继承自动物”的简单例子。
“黄老,您这个定义,有问题!”王教授毫不客气地指了出来。
黄建功一愣:“有什么问题?”
“问题大了!”王教授几步走到黑板前,用粉笔在“狗”的旁边,又写下了一个定义。
`定义 猫 : 继承 动物 {`
` 方法: 喵喵叫();`
`}`
“按照您的理论,‘狗’是一种‘动物’,‘猫’也是一种‘动物’。”王教授说道,“现在,我有一个新的需求,我要创造一个‘机器狗’。它会跑,会叫,甚至长得也像狗。请问,我该如何定义它?”
黄建功不假思索地回答:“那也简单。`定义 机器狗 : 继承 狗`,然后再给它增加一些‘充电’之类的方法。”
“错!”王教授断然否定,“‘机器狗’继承了‘狗’,而‘狗’继承了‘动物’。那就意味着,‘机器狗’也继承了‘动物’的‘呼吸’和‘进食’方法。请问,一个机器人,它需要呼吸和进食吗?”
黄建功的脸色一僵。
这……确实是个问题。
“这……我们可以重写‘呼吸’和‘进食’方法,让它们什么都不做。”有人在下面小声提议。
“那本质上,它还是拥有了这两个它根本不应该有的‘行为’!”王教授的声音变得严厉起来,“这破坏了模型的纯洁性!一个不严谨的、可以随意打补丁的模型,最终必然会走向臃肿和混乱!”
“再比如!”王教授不给众人思考的时间,又抛出了一个更尖锐的问题。
“我们有一个‘鸟’类,它继承自‘动物’,并且有一个‘飞翔’的方法。现在,我们要定义一个‘企鹅’。‘企鹅’是一种‘鸟’,所以它应该继承‘鸟’。但是,企鹅会飞吗?不会!那它继承来的‘飞翔’方法,该如何处理?是删掉?还是让它报错?”
“还有‘鸵鸟’!还有‘鸡’!”
“这著名的‘鸟-企鹅问题’,是面向对象继承体系中,一个经典的逻辑困境!”
王教授的这番话,像一盆冰水,浇在了刚刚还热情似火的众人头上。
大家瞬间冷静了下来。
是啊。
继承,听起来很美。
但现实世界,远比想象的要复杂。
这种简单的,树状的“is-a”关系,真的能完美地描述世界上所有事物吗?
“那……那该怎么办?”孙立国有些茫然地问道。
“这就是我想说的!”王教授的目光,扫过在场的每一个人,“我们不能满足于这种简单的‘is-a’关系!我们需要更灵活,更强大的武器!”
他擦掉了黄建功写的“狗继承自动物”,然后写下了两个新的定义。
`定义 飞行能力 {`
` 方法: 飞();`
`}`
`定义 哺乳能力 {`
` 方法: 喂奶();`
`}`
然后,他重新定义了“鸟”和“狗”。
`定义 鸟 {`
` 包含: 飞行能力;`
`}`
`定义 狗 {`
` 包含: 哺乳能力;`
`}`
“看!”王教授指着黑板,“我们把‘行为’,从‘对象’本身,给抽离出来!变成一个一个独立的‘能力模块’!”
“‘鸟’,不再是‘继承’了某个父类,而是‘包含’了‘飞行能力’这个模块。而‘企鹅’,它依然是一种‘鸟’,但它在定义的时候,可以选择不‘包含’‘飞行能力’模块,而是去‘包含’一个‘游泳能力’模块!”
“狗,包含了‘哺乳能力’。而‘机器狗’,它什么都不包含,它只是一台机器!”
“我们不再用‘是什么’(is-a)来定义世界,我们用‘能做什么’(has-a)来组合世界!”
“这,就是‘组合优于继承’!”
王教授的这番理论,再次颠覆了所有人的认知。
如果说,钱学敏的“继承”,是打开了一扇门。
那么,王教授的“组合”,就是直接拆掉了一堵墙!
它将继承带来的“强耦合”关系,彻底解开,变成了更灵活,更自由的“弱耦合”关系。
整个会议室,再次陷入了激烈的辩论。
一部分人,支持钱学敏和黄建功的“经典继承派”。他们认为,继承更符合人类对世界的直观认知,结构清晰,简单易懂。
而另一部分人,则被王教授的“激进组合派”所折服。他们认为,组合才是未来,它更灵活,更能应对复杂多变的需求。
两派人,就在这个由黑板构成的世界里,开始了最激烈的思想碰撞。
他们争得面红耳赤,从“动物”和“机器狗”,辩论到“菱形继承”的死亡陷阱,再到“接口”和“抽象类”的哲学思辨。
他们不再是同事,不是上下级。
在这里,没有权威,只有真理。
每个人,都将自己的智慧,燃烧到了极致。
黄建功和钱学敏,并没有去阻止这场“混乱”。
相反,他们的脸上,露出了欣慰的笑容。
这,正是他们想要看到的!
这,正是“问道”研讨组的意义所在!
让所有人的思想,都参与进来,相互碰撞,相互启发,相互证伪。
在这个过程中,“面向对象”的那些艰深晦涩的理论,不再是书本上的死知识,而是变成了他们每个人,用自己的思考和辩论,亲手构建起来的“真理大厦”。
他们,正在用自己的大脑,去亲身经历一遍,软件思想史上,最伟大的一次数百年进化!
然而,就在所有人都沉浸在这场思想的狂欢中时。
一个幽幽的声音,从角落里传来。
“那个……各位教授,我有一个问题。”
说话的,是团队里最年轻的一个实习生,他平时只负责端茶倒水,做会议记录。
“无论是‘继承’,还是‘组合’……”
实习生有些胆怯,但还是鼓起勇气说道。
“我们最终,都需要一个东西,来把这些‘对象’,这些‘能力模块’,给‘粘’在一起吧?”
“我们需要一个机制,来处理‘猫’和‘狗’收到‘发出声音’这个消息时,到底该调用哪个具体的代码。”
“钱老称之为‘多态’,黄老后来补充了‘虚函数表’的实现思路。”
“但……这个‘虚函数表’,它自己,是怎么来的?”
“谁来创建它?谁来维护它?谁来在发送消息的时候,去查询它?”
“我们好像……一直在讨论,世界应该是‘什么样子’的。”
“但我们,好像都忽略了。”
实习生咽了口唾沫,说出了那句,直击灵魂的拷问。
“创造这个世界的‘上帝’……”
“他,到底是谁?”