封装(容易找出来修改)
为什么要封装,大家都能想到封装是为了把一个庞大的代码分成若干个小块容易维护,那么具体点的例子呢?
比如一个控制台界面的运算器,用面向过程的代码写,首先输入两个数,然后输入运算符这样。很容易就搞定了,但是如果要修改输入的过程呢?
那么你就会想,把输入的数字和运算符的顺序改一改就可以了也很简单。当然简单这是因为程序小嘛,如果这个运算器是一个庞大的用于科学计算的运算器呢?
那么这个运算器肯定要先输入一部分数据然后先计算,得出结果再之后再运算再次输入和再次运算。这时候用面向过程的设计来写就发现,一大段少则几百行多则几千几万行的代码,其中夹杂着输入的代码和运算的代码。
这时候你要修改输入的过程那么,那就在这几千几万行的代码中找到输入的代码把他们调换顺序,这时候就会眼花缭乱及其容易出错。
那么面向封装在大型程序的以维护的特点和价值就体现出来了。
用面向对象的封装的思想具体的做法就是:
把界面输入的代码放在一个类方法里面,把运算的代码放在另外一个类里面。
这时候我们如果要修改界面的输入顺序的时候,只需要找到输入代码的界面这个类就可以了。
最大的好处就是直接少看了一半的代码,而且不单单少看了一般,这个要看的代码里面就不会夹杂这运算的代码,不会让人看得头皮发麻。
这就是为什么现代大型系统要用面向对象的很重要的原因,因为代码多了。
继承(很少修改原有代码的情况下,扩展)
那么封装解决了修改的问题,那么如果甲方要你继续做第二期工程
在原有的结果上继续以下一步的运算,那么要你添加继续运算的代码怎么办呢?
用面向过程的方法就是在运算的类里面的方法得出结果后面继续添加代码就可以了。
看上去好像很对,可是放在工程上就不对了。
- 如果你一不小心修改了原有的运算代码,而且刚好不报错,而你不知道,你继续再最后面添加代码,那么这个重大的科学实现的运算就会出现错误,后果很严重,很危险。
- 而且如果第一期的工程不是你做了,甲方为了保护商业机密不想让你知道第一期的运算类里面的代码,这用面向过程就很难了?
你肯定会说不难啊,直接把那个结果给我,我再搞一个类继续二期的运算不就好了吗?
好像解决了问题
那个界面的代码都要改了,因为要在main方法这个界面里添加你二期运算的代码的类方法。
而毕竟是商业机密,他们甚至不想让你知道他们是如果收集数据的,和你也不想看太多代码,又不想担这个不必要的责任,到时候出了问题,无论是代码问题还是商业问题,最后对双方都不好。
所以这时候面向对象的继承的作用就出来了,因为用继承的话,直接把原有的第一期运算类继承过来,我没有修改原来的类,调用原有类的方法然后得出数据继续执行得出结果。只要对方的工程师把我继承的这个子类在界面的代码中换上去就可以了,不需要对原来的代码又多大的影响。
继承最大的作用是扩展,而很少对原有的代码改动(只把原有的调用类方法这个换成子类方法)