我眼中的“面向过程”与“面向对象”

前几天面试,被问到面向过程和面向对象的意义与区别。
既然提到了对象一词,不妨就从“对象”说起。
首先,我们营造一个面向“对象”的氛围。
码猴和他的女朋友对面而坐,在一个温馨的西餐厅,码猴打算浪漫一把,让她知道码猴并不是一个不浪漫的程序员,码猴仅仅是不浪漫而已。
所以码猴来餐厅之前,就准备好了一个流程:
步骤一:码猴打算在等餐的时候,假装无聊,掏出电脑,开始coding。
步骤二:约会的时候coding,码猴觉着她的女朋友一定很生气,然后她准备发火,码猴开始哄她。
步骤三:码猴把电脑屏幕转到她面前,让她看到码猴提前准备好在电脑屏幕上显示的会自动变换颜色和字体的“我爱你”。
步骤四:餐厅上菜,码猴笑眯眯得看着他的姑娘多云转晴,静待一个浪漫的夜晚。
然而,当码猴执行步骤一的时候,她的女朋友心想,他为了我们的未来,这么拼,真是辛苦他了,我坐在一旁,默默陪伴他吧。
码猴蒙圈了,没反应,这怎么办,提前没设计这个流程啊。
于是乎,码猴在流程中又加了一步:
步骤一又二分之一:如果她没反应,就给她看电脑上的“我爱你”。
突然码猴发现,如果在这一步就给她看“我爱你”,那么步骤三是不是重复了,要删除掉…………
想必写到这里,大家都知道我是一个很啰嗦鸡婆的人了,明明我就是想描述一下“面向过程编程”以及其弊端嘛,扯着么多没用的。
对,这就是面向过程编程,按照既定流程把程序写出来,优点简单粗暴直接明了占用资源少。但是整个程序都是耦合在一起的,如果某些步骤需要改变,可能会涉及到整个程序的修改,这就比较麻烦了。
于是乎,针对这种情况,码猴打算想想自己会做什么事情,码猴会“打开电脑”,“打开‘我爱你’程序”,“哄女朋友”,“点菜”,“度过一个浪漫的夜晚”等等技能,他发现他会的这些,是属于一类人通有的技能,他勤学苦练,想不到只是一个类的实例而已,真是可悲。
这就是“面向对象编程”了。
码猴和她女朋友都可以看成是某个对象,这个对象拥有的技能是可以随意使用的。所以码猴可以在一开始把自己会的技能都准备好,当女朋友使用“发怒”这个方法的时候,马猴调用“哄女朋友”这个方法,需要表白的时候,码猴调用“打开‘我爱你’程序”的方法,如果发现有些新情况要处理,那么给自己添加新技能就可以了(给自己的类添加新的方法)这就是面向对象了。
这就是我理解的面向过程和面向对象,不知道这么解释能不能理解起来更方便一些。当然,说来惭愧,开头说的面试我没过,我这个“对象”能调用的方法太少了,不过我在努力添加新的方法进去。
2018过去快三分之二了,加油。尽管现在大环境不太好,但是只要肯努力,自身应该不会太差。