几个生动的例子
-
面向对象如活字印刷,面向过程如雕版印刷,面向过程的时候你需要从头到尾考虑每一个细节,比如你要刻下学而时习之,不亦说乎这几个字,如果是雕版印刷,你肯定要一环扣一环,“学”后面要刻“而”,“而”后面要刻好“时”,一旦你想改成学而时习之,我不亦乐乎。则原来那一块雕版就得作废,重头改。
而面向对象则把每一个字看作一个对象,类似于活字印刷,你如果想加字,你只要再多刻一个“我”就可以了,其它写好的就不用改了。并且在这里我引申出以下几个概念
一、要改,只需更改要改之字,此为可维护;
二、这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;
三、此诗若要加字,只需另刻字加入即可,这是可扩展;
-
类似于过去的老作坊和流水线的对比,面向过程是老作坊,面向对象是流水线。以前的老作坊生产一辆汽车是一个小组,从头到尾负责一辆车的生产,这样效率就很低,亨利福特发明了流水线以后,每一个组的人从生产一辆车改为,一部分人生产一辆车的一个零件,另外一部分人生产一辆车的另外一个零件。
这样比如我现在有一辆车T1,需要零件A B C D E,为了顺应市场需求,我现在要研发一辆新的车T2他需要的的零件为A B C D **F,如果是传统的老作坊模式(面向过程),那么我所有的组都要进行整改,所有的组都要学习从造一辆T1改变为学习造一辆T2**,而面向对象则只用改变最后一个组,只要他们学习从造E,改变成造F就可以了,其它组不受影响,这样汽车生产工作效率(软件研发效率)便大大提升了。
说到这里插一句题外话,《枢纽》的作者,外交学院的教授施展老师说过,中国为什么能成为世界工厂的很大一部分原因就是因为中国拥有强大的供应链,那为什么中国拥有这么强大的供应链呢?施展老师说那是因为中国的供应链具备了两个互为矛盾的因素,效率和弹性
我们知道《国富论》作者亚当斯密说过,分工产生效能,所以对于供应链而言,越细的分工,效率越高,但是越细的分工,会造出弹性的下降,这自然显而易见,就如同现在很多人段子吐槽医疗体系一样,分工太细,一个病要跑很多部门才能看好。
所以看来效率很弹性天然是一对敌人,效率高自然需要分工分到很细,而越细则越容易僵化,因为你只会这一件事,但是中国供应链有一个很奇特的点,就是分工太细了。
比如有的小作坊只负责生产打火机里面的一个铁片,我们可以预见,如果有一天人类不再需要打火机了,他也不会失业,因为人类总还有别的工业品种需要生产别的铁片,他从生产打火机的铁片到生产比如钥匙扣的铁片,这一转变不是很困难。
好了,题外话说完了
我说这个题外话的时候是想告诫自己,在定义类的时候一定要让自己的类足够灵活,不要像我使用了活字印刷,但我把“学而”两个字作为一个印刷块,这样的活字就很没有用,这用专业术语就叫做复用性不佳我们在定义类的时候也要充分注意这一点。因为编程业最主要的一个核心思想就是不要重复造轮子。如果我们在面对相似的功能时,每次都要重新写一个函数,那么我们的工作效率就会大大降低。
参考文献
[1] (https://www.zhihu.com/question/27468564/answer/757537214)