1. 什么是面向对象?
2. 什么是面向过程?
3. 面向对象和面向过程有什么联系和区别?
ps:以上问题经常在面试中被问到,下面,就个人理解以大白话简单做个介绍,不到之处望指正。
举例子说明:
今天午餐你想吃湖南菜,辣椒炒肉。
面向过程 做法:【亲力亲为】 买辣椒、肉,洗菜,切菜,下锅翻炒,出锅。
面向对象 做法 【指挥别人】 老婆,我想吃辣椒炒肉,然后,老婆去买辣椒、肉,洗菜,切菜,下锅翻炒,出锅。
菜做好了,突然不想吃辣椒炒肉,想吃酸菜鱼。
面向过程 做法:【亲力亲为】 再去买酸菜、鱼,洗菜,切菜,下锅翻炒,出锅。
面向对象 做法: 【指挥别人】 老婆,我不想吃辣椒炒肉,想吃酸菜鱼,然后,老婆又出门去买酸菜、鱼,洗菜,切菜,下锅翻炒,出锅。
当你换菜的时候,如果是 面向过程 的做法,又得重新再来一遍,你很累。
而 面向对象 的做法,只需要跟老婆说一声即可,你全程很轻松。
本质上,事情都有人在做,面向过程,亲力亲为,面向对象 是在 面向过程的基础上,加了一层,让别人去做。
换句话说,面向对象 是在 面向过程的基础上进行抽象、封装后的结果。
面向过程:具体化,流程化,一步步分析问题,一步步解决问题;
面向对象:模块化,抽象封装成类,让各个对象去解决问题。它的底层还是面向过程的。
再举个例子:
某天,曹操打了胜仗,诗兴大发,在庆功宴上道:“喝酒唱歌,人生真爽”,饭后,文官去一个字一个字印刷记录了下来。
第二天,曹操觉得昨天的诗得改改,命文官改成:“对酒当歌,人生真爽”,当时,还没有活字印刷,文官又得去一个字一个字印刷。
第三天,曹操又喊来文官,让他改成:“对酒当歌,人生几何”,此时,曹操非常满意。文官又得去一个字一个字印刷。
通过上面的例子发现,每次更改,文官都需要去把文字一个个重新印一遍。这种就是面向过程的做法,不易维护,也不能复用。
当活字印刷出现后,第一次文官印刷出后,第二次改的时候,不用再全部重新印刷,大部分可以复用,只需要改对酒2个字即可。
第三次要求修改时,再第二次的基础上,只需要把 真爽 改成几何 即可。当然活字印刷,也可以重新排版,灵活性好,易维护,也可以复用。
实际上,活字印刷 有 面向对象 的优点。
【面向过程】 【面向对象】
不易维护 易维护
不可复用 可复用
不可扩展 可扩展
灵活性不高 灵活性高
先讲到这,有时间在补充。