前面一篇文章探讨了C++、OC以及C语言之间的关系,其中C++和OC作为面向对象的程序设计语言,而C作为面向过程的设计语言。或许我们的脑海中隐隐出现到底什么是面向过程设计,什么是面向对象设计呢?
其实这个问题,可以认为是一个哲学的问题。我个人问题,两者之间的区别就类似与到底机器人与人的差别的什么呢?机器人就是按照某种规则在做事情,而人就是在规则的指导下会加上自己的思维,从而以一种更加智能化的方式去处理问题。从这里可以看出,面向过程设计是一种按照固定的思维,以事物为中心,按照事物发展的时间顺序或者是逻辑顺序来完成某个任务;而面向对象设计则是按照人的思维,强调直接以现实世界中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征和要解决的问题实际语境,解决问题。简而言之,面向过程设计只是简单的处理问题,而面向对象设计语言不仅要处理问题,还要强调思考问题、认识问题。下面列举出两种程序设计思想的差异:
1.面向过程是是一种以过程为中心的编程思想,其思想体现在:
2.面向对象主要是把事物给对象化,它的思想体现在:
从上面的思想可以看出面向对象的三大基本特征:
说了这么说,还是借用百科中的例子来说明两者的差异吧!
学生早上起来的事情来说说这种面向过程吧.粗略的可以将过程拟为:
(1)起床
(2)穿衣
(3)洗脸刷牙
(4)去学校
那么面向过程设计的思路为,将四个过程分为四个子程序,然后在主程序中按照这四步一步步的顺序调用子程序完成即可。而如果是用面向对象的方法的话,可能就只抽象出一个学生的类,它会包括这四个方法,但是具体的顺序就不需要体现出来。
如果学生又可分为文科生、理科生的话,他们的上课科目不一样。那么面向过程就需要重新分情况来设计子模块,使得维护成本大大增加。而面向对象设计则在重用学生类的基础上只需要采用将学生类特殊化为理科生和文科生,可扩展性和维护性较高。
从这个例子中可以看出,面向对象的代码更加支持重用,能降低软件开发和维护的成本,提高软件的质量。因此面向对象在实际的软件设计中应用广泛——这就是思维高度发展的必然趋势吧!