浅谈编程中的面向对象和面向过程
面向过程就是分析出解决问题所需要的步骤,就像我们做数学题一样,分析出解题的步骤,然后把这些步骤一步一步的去实现;面向对象是把大的问题分解成多个模块,每个模块就是一个对象,每个对象负责一部分功能,通过对这些模块的组合达到解决问题的结果。
做数学题时,我们需要知道第一步的结果,才能进行第二步操作,然后一步一步的走下去,直到最后解决问题,得出答案,这是典型的面向过程的思想。在借用博客中的一个例子:我们要设计一个五子棋的游戏,面向过程的设计思路如下所示:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用不同的方法来实现。
如果用面向对象的思想来设计这个游戏,那么设计可以分为三部分:1、黑白双方,这两方的行为是一模一样的;2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
优点与缺点
接着做题的例子,讲述一下面向过程的思想,例如高考中的物理大题,一版情况是第二问使用第一问的答案,第三问使用第二问的答案。那么解决一个大题的步骤如下所示:先解决第一个小问题,接着解决第二小问,然后解决第三小问,最后这个大题解决。不幸的是第一问写错了,然后第二问和第三问都错了,这时候要改错的话,需要把整个答题重新写一遍。这也就是面向过程的弊端,步骤相互之间的关联性太强(耦合度太高),牵一发而动全身。
还是做高考题的例子介绍面向对象的思想,物理的解答题有三道大题,解答题就像一个问题,每道大题就像一个对象,哪道题做错了,只修改哪一道题就好了,和其他题的关联性不强,不会产生致命性的影响。
这只是面向对象相对于面向过程的优点,面向过程也不是没有优点,面向对象编程有三大特点,封装、继承和多态。经过这一顿骚操作的包装,性能难免有所损失。
面向对象
- 优点:代码灵活,容易理解、代码复用性、扩展性好,由于面向对象有封装、可以设计出低耦合的系统,
- 缺点:性能比面向过程低
- 高级语言基本上都是面向对象的编程语言,如Java
面向过程
- 优点:性能比面向对象好,内存开销少,单片机用的比较多
- 缺点:耦合性高,不利于维护,扩展性,复用性没有面向对象好
- C语言就是典型的面向过程的语言