在软件开发中,使用面向对象编程方法是一种放长线吊大鱼的策略,首先要高瞻远瞩,然后精耕细作,最后全面开花完成软件开发任务。
面向对象编程思想是适应当前软件开发规模原来越大,复杂度越来越高的情况。软件开发的工作量随着软件规模的增加而呈非线性增长,软件规模越大,软件开发工作量增长的速度越来快。而使用传统的面向过程的编程方法,开发人员的工作量和软件开发工作量是成正比的,因此当软件规模很大时,开发人员的工作量将非常巨大,从而导致软件开发成本急剧上升,这对于商业软件开发是不可行的。而软件客户的复杂的需求是客观存在的,是需要满足的,因此业界开始使用面向对象的编程方法来降低软件开发成本。【袁永福 】
从宏观上看,面向对象编程思想的最大的作用就是将一个整体上复杂的软件功能拆分成多个功能简单的软件功能,然后以较低的成本实现各个简单的软件功能,最后进行模块集成形成一个完整而复杂的软件功能来满足用户需求。采用的是分割包围,各个击破的策略。
如上图所示,阴影部分的面积就是软件开发工作量。当采用面向过程的软件开发方法,当客户需求很复杂时,软件开发工作量将非常大,而采用面向对象的软件开发方法时,开发人员可以将复杂的客户需求拆分成两个较为简单的客户需求,然后逐一开发,最后进行集成实现所需的功能,此时软件开发工作量降低了一半,是否采用正确的方法,效果的对比是惊人的。因此采用面向对象的软件开发方法,以较低的成本开发客户需求复杂的商业软件成为现实。
从软件开发过程看,面向对象编程思想强制添加了一个软件抽象的步骤,迫使软件开发人员需要跟深入的了解和分析用户需求,从而增加了软件开发流程的稳定性和正规性。
从实现方法上看,面向对象编程思想更加符合人们对客观事物的理解方法。考察人们在理解客户事物的过程,人们会有意无意的将诸多事物进行分类整理和对比。【袁永福 】
比如人们经过大量的认识,把汽车抽象理解为有至少4个轮子和2个车轴的机动车辆,而客车就是专门运输人员的汽车,公交车就是任何人交费就可以乘坐的客车。于是形成了“机动车—汽车—客车—公交车”这4种客观事物和3个派生关系构成的关于汽车的认识。这个认识方式学习成本低,速度快,知识能重复利用是其最大的优点。
若不用这种分类比较的方法,则汽车就定义为至少4个轮子2个车轴的机动车;客车就是专门运输人员的至少4个轮子和2个车轴的机动车;公交车就是任何人交费就可以乘坐的专门用于运输人员的至少有4个轮子和2个车轴的机动车。对于两种认知方式可以进行如下对比【袁永福 】
事物 | 分类对比 | 不分类对比 |
汽车 | 至少有4个轮子和2个车轴的机动车。 | 至少有4个轮子和2个车轴的机动车。 |
客车 | 专门运输人员的汽车。 | 专门运输人员的至少4个轮子和2个车轴的机动车。 |
公交车 | 任何人交费就可以乘坐的客车。 | 任何人交费就可以乘坐的专门用于运输人员的至少有4个轮子和2个车轴的机动车。 |
显而易见,若不采用分类对比的认知方式,人们认知事物的成本就大为增加,相信任何人都没能力能认识这个世界的繁杂事物的。但事实上,智力正常的人都自觉地采用这种分类对比的认知方法,从而轻易的认知周围所有的事物。
软件开发也一样,软件是开发人员对客户需求的认知的表述。不理解功能需求就不可能开发出正确的软件。就像汽车一样,用户需求也是客观存在的事物,面对复杂的客户需求,采用分类对比的方式是明智之举。因此面向对象的编程方法就是分类对比的方法在软件开发中的具体实现。
分类对比的认知方式最大的优势就是知识的重复利用,于是面向对象编程思想最大的优势就是代码的重复利用。代码的重复利用有两大好处,一个就是代码寿命明显变长,能很大的保护客户的投资,另外一个就是能层层积累,降低对新知识的学习量。【袁永福 】
代码就是客户已有的投资的结果,商业软件开发人员应当要充分的考虑到对客户已有投资的保护,在成本允许的情况下旧代码应当尽量保存。
代码是软件的细胞,代码的长寿是软件长寿的基础,也是客户的投资价值最大化的基础。