一、定义
面向过程
概念
面向过程是一种以过程为中心的编程思想,它是一种基础的顺序的思维方式,面向对象方法的基础实现中也包含面向过程思想。
特性:模块化 流程化
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开 发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展
面向对象
概念
面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
特性:抽象 封装 继承 多态
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
二、举例说明面向过程开发与面向对象的区别
用“把大象装进冰箱”这个生动的例子分别做说明。
1. 方法一
用面向过程的开发的流程如下(拢共三步):
1.制作一个数组作为“冰箱”,冰箱做好了
2.制作一个数组作为“大象“,对对象的描述放在数组里(大象的头、身体、四条腿、尾巴)
3.写一个“把大象放进冰箱的函数”,函数把”大象“和冰箱做为参数,函数内部把”大象“数组复制到”冰箱“并清空”大象“数组。调用这个函数完成把大象装入冰箱的工作。
2. 方法二
用面向对象的开发的流程如下(拢共三步):
1.制作一个冰箱类,类里面放一个数组做为“冰箱的储存仓”。类里面制作一个“放置函数”,这个函数可以把给他的东西放到“冰箱的储存仓”。好冰箱做好了。
2.制作一个大象类,类里面用变量定义大象的描述(大象的头、身体、四条腿、尾巴),类里面制作一个“获取大象描述函数”,调用这个函数就可以把大象类里面的描述都收集起来并放到一个数组,然后返回数组,大象做好了。
3.使用冰箱类new一个“冰箱对象”,使用大象类new一个“大象对象”。
大象描述数组 = “大象对象”-调用->“获取大象描述函数”;
“冰箱对象”-调用->“放置函数”(大象描述数组);
3.下面通过多个角度来对比“面向过程”与“面向对象”的区别于特点
1.数据安全性
面向过程:所有数据对外开放,任何函数都可以对这个共有数据做修改
面向对象:“冰箱”的数据放在自己类里面,私有化了,自由自己类的函数可以操作
2.代码设计思路不同
面向过程:直接操作数据,不绕弯,简单快速
面向对象:对于数据都要找到对应的拟物对象,模拟现实世界中处理数据的方法,凡事都要找的谁和谁之间相互关系。
3.可扩展性不同
面向过程:直接处理数据,需要扩展的时候直接在数据上做更改,比如给大象新增加“象牙”特征(导致数据增长),对象上面的面向过程例子,就需要对所有三步中对所以设计到数组的部分做代码修改。
面向对象:容易扩展并不影响其他对象的代码,比如同样给大象新增加“象牙”特征,只需给大象类增加一个“象牙”描述成员变量,然后在“获取大象函数”中自动会分析数据大小并生成合适的数组,同时冰箱类也不用修改任何代码。(当然完成这样的效果需要,就增加了类里面函数的复杂度,好在这个虽然复杂了,但是通用)
4.耦合性不同
面向过程:把所有数据和功能函数放在一起,没有分成你的和我的,造成模块和模块之间耦合
面向对象:按照对象个你分成了你的或我的,我和你之间交互处理数据,都通过类的公共函数来处理
5.复用性和易维护
比如现在要做一个新冰箱,新冰箱比旧冰箱增加颜色的属性,并且颜色可以随时修改,看面向过程和对象分别怎样处理。
面向过程:再制作一个新的数组作为新冰箱,同时定义个全局变量用于描述冰箱的颜色,修改冰箱颜色直接修改这个变量即可。
面向对象:定义一个新冰箱类并继承旧冰箱类,然后在新冰箱类里面增加颜色描述变量,并对外提供修改颜色函数。
从两者对“新”冰箱的处理方法上来看,面向对象可以看到“面向对象语言”可以更好的利用现有的代码。且在功能增加中,以“物化”的冰箱对象来编写代码,使得这个代码直观易懂。
三、面向过程与面向对象的各自适用场合
面向过程语言适用于大多数的硬件芯片编程和部分软件核心功能库的编程。相对于面向对象编程语言,面向过程语言的优点如下:编译生成的二进制文件更小、执行效率更高、开发语言简洁、稳定性高。
面向过程语言适用于各类软件编程以及部分高级芯片编程。由于应用软件要实现非常多的功能,各个功能之间关系复杂。一般软件的总代码行数在1万到10万行之间。因此使用一个合适的面向对象编程语言非常必要,这里面向对象编程语言的优点就体现出来了,比如:以面向对象建立软件中的各个模型