前言:
该博文仅讲述我对面向对象与面向过程中的学习探究,及一些个人对于两者的理解。
1.面向对象与面向过程的区别
面向过程编程(procedure-oriented programming)就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象编程(object-oriented programming)是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例:假设要设计一个五子棋游戏。
面向过程的思想就是首先分析问题的步骤::1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2。将上面每个步骤用不同的方法去实现。
面向对象的思想是根据问题抽象处不同的对象:1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等
可以明显的看出,面向对象是将实际问题按照具体的功能职责划分分类,而不是具体的步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了多个步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。
2.面向对象具有三大特性
封装性(安全)
继承性(复用性)
多态性(扩展性)
3.面向过程与面向对象的优缺点
这是我看到网上的一个比喻,使用面向过程写出来的程序是一碗蛋炒饭,面向对象写出来的程序是一碗盖浇饭。所谓盖浇饭,北京叫盖饭,东北叫烩饭,广东叫碟头饭,就是在一碗白米饭上面浇上一份盖菜,你喜欢什么菜,你就浇上什么菜。
蛋炒饭的制作简单,也十分美味。但是如果顾客不想要加炒蛋,想换个菜。那就必须要重新在做一份,因为他们是放在一起炒的,不可能在去将蛋单独剔出来。而盖浇饭不一样,顾客想吃什么菜就可以加什么菜,因为它的饭和菜都是分离的,可以随意组合。如果放错了,还可以剔掉,放另一份菜。且可以选择的样式更多。这就体现了面向对象的优势,用专业术语说就是程序之间"耦合性"低,具有很高"可维护性"与"可扩展性"。 软件工程追求的目标之一就是可维护性,可维护性主要表现在3个方面:可理解性、可测试性和可修改性。面向对象的好处之一就是显著的改善了软件系统的可维护性。
4.面向对象中类与对象的关系
类是对象的抽象,对象是类的具体实例。
在现实生活中是先有对象,再有的类。就比如小明,小红,小丽,是具体的对象,他(她)们又都是人。
而在我们的程序中,是先有类再有的对象。
最后,加深理解。
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低