1.4-从“把⼤象装进冰箱拢共分⼏步”来理解⾯向对象编程思想
⼀、定义
⾯向过程
概念
⾯向过程是⼀种以过程为中⼼的编程思想,它是⼀种基础的顺序的思维⽅式,⾯向对象⽅法的基础实现中也包含⾯向过程思想。
特性:模块化 流程化
优点:性能⽐⾯向对象⾼,因为类调⽤时需要实例化,开销⽐较⼤,⽐较消耗资源;⽐如单⽚机、嵌⼊式开发、Linux/Unix等⼀般采⽤⾯向过程开 发,性能是最重要的因素。
缺点:没有⾯向对象易维护、易复⽤、易扩展
⾯向对象
概念
⾯向对象是按⼈们认识客观世界的系统思维⽅式,采⽤基于对象(实体)的概念建⽴模型,模拟客观世界分析、设计、实现软件的办法。通过⾯向对象的理念使计算机软件系统能与现实世界中的系统⼀⼀对应。
特性:抽象 封装 继承 多态
优点:易维护、易复⽤、易扩展,由于⾯向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能⽐⾯向过程低
⼆、举例说明⾯向过程开发与⾯向对象的区别
⽤“把⼤象装进冰箱”这个⽣动的例⼦分别做说明。
1. ⽅法⼀
⽤⾯向过程的开发的流程如下(拢共三步):
1.制作⼀个数组作为“冰箱”,冰箱做好了
2.制作⼀个数组作为“⼤象“,对对象的描述放在数组⾥(⼤象的头、⾝体、四条腿、尾巴)
3.写⼀个“把⼤象放进冰箱的函数”,函数把”⼤象“和冰箱做为参数,函数内部把”⼤象“数组复制到”冰箱“并清空”⼤象“数组。调⽤这个函数完成把⼤象装⼊冰箱的⼯作。
2. ⽅法⼆
⽤⾯向对象的开发的流程如下(拢共三步):
1.制作⼀个冰箱类,类⾥⾯放⼀个数组做为“冰箱的储存仓”。类⾥⾯制作⼀个“放置函数”,这个函数可以把给他的东西放到“冰箱的储存仓”。好冰箱做好了。
2.制作⼀个⼤象类,类⾥⾯⽤变量定义⼤象的描述(⼤象的头、⾝体、四条腿、尾巴),类⾥⾯制作⼀个“获取⼤象描述函数”,调⽤这个函数就可以把⼤象类⾥⾯的描述都收集起来并放到⼀个数组,然后返回数组,⼤象做好了。
3.使⽤冰箱类new⼀个“冰箱对象”,使⽤⼤象类new⼀个“⼤象对象”。
⼤象描述数组 = “⼤象对象”-调⽤->“获取⼤象描述函数”;
“冰箱对象”-调⽤->“放置函数”(⼤象描述数组);
3.下⾯通过多个⾓度来对⽐“⾯向过程”与“⾯向对象”的区别于特点
1.数据安全性
⾯向过程:所有数据对外开放,任何函数都可以对这个共有数据做修改
⾯向对象:“冰箱”的数据放在⾃⼰类⾥⾯,私有化了,⾃由⾃⼰类的函数可以操作
2.代码设计思路不同
⾯向过程:直接操作数据,不绕弯,简单快速
⾯向对象:对于数据都要到对应的拟物对象,模拟现实世界中处理数据的⽅法,凡事都要的谁和谁之间相互关系。
3.可扩展性不同
⾯向过程:直接处理数据,需要扩展的时候直接在数据上做更改,⽐如给⼤象新增加“象⽛”特征(导致数据增长),对象上⾯的⾯向过程例⼦,就需要对所有三步中对所以设计到数组的部分做代码修改。
⾯向对象:容易扩展并不影响其他对象的代码,⽐如同样给⼤象新增加“象⽛”特征,只需给⼤象类增加
⼀个“象⽛”描述成员变量,然后在“获取⼤象函数”中⾃动会分析数据⼤⼩并⽣成合适的数组,同时冰箱类也不⽤修改任何代码。(当然完成这样的效果需要,就增加了类⾥⾯函数的复杂度,好在这个虽然复杂了,但是通⽤)
4.耦合性不同
⾯向过程:把所有数据和功能函数放在⼀起,没有分成你的和我的,造成模块和模块之间耦合
⾯向对象:按照对象个你分成了你的或我的,我和你之间交互处理数据,都通过类的公共函数来处理
5.复⽤性和易维护
⽐如现在要做⼀个新冰箱,新冰箱⽐旧冰箱增加颜⾊的属性,并且颜⾊可以随时修改,看⾯向过程和对象分别怎样处理。
⾯向过程:再制作⼀个新的数组作为新冰箱,同时定义个全局变量⽤于描述冰箱的颜⾊,修改冰箱颜⾊直接修改这个变量即可。
⾯向对象:定义⼀个新冰箱类并继承旧冰箱类,然后在新冰箱类⾥⾯增加颜⾊描述变量,并对外提供修改颜⾊函数。
什么是编程举个例子
从两者对“新”冰箱的处理⽅法上来看,⾯向对象可以看到“⾯向对象语⾔”可以更好的利⽤现有的代码。且在功能增加中,以“物化”的冰箱对象来编写代码,使得这个代码直观易懂。
三、⾯向过程与⾯向对象的各⾃适⽤场合
⾯向过程语⾔适⽤于⼤多数的硬件芯⽚编程和部分软件核⼼功能库的编程。相对于⾯向对象编程语⾔,⾯向过程语⾔的优点如下:编译⽣成的⼆进制⽂件更⼩、执⾏效率更⾼、开发语⾔简洁、稳定性⾼。
⾯向过程语⾔适⽤于各类软件编程以及部分⾼级芯⽚编程。由于应⽤软件要实现⾮常多的功能,各个功能之间关系复杂。⼀般软件的总代码⾏数在1万到10万⾏之间。因此使⽤⼀个合适的⾯向对象编程语⾔⾮常必要,这⾥⾯向对象编程语⾔的优点就体现出来了,⽐如:以⾯向对象建⽴软件中的各个模型,使复杂逻辑关系变得清晰明了、代码易读易懂、易于维护和扩展等。
四、使⽤⾯向对象语⾔就真的是⾯向对象开发吗?(什么是⾯向对象思想)
如果你没有搞明⽩什么是⾯向对象编程,即便你⽤的是⾯向对象编程语⾔编写的代码,也不能完全算是⾯向对象编程,也只是停留在⾯向对象编程的表⾯。那么什么是⾯向对象编程思想呢?
1.什么是⾯向对象编程思想
“⾯向对象思想”:是采⽤模型(对象)来描述客观世界实际事物的⼀种思想。⼀般在软件开发中是指⽤代码建⽴客观世界中的各类事物的模型。并编写函数来实现模型本⾝的功能,以及模型与模型之间的关系处理代码。因此把软件开发中的所有逻辑关系分类并合并为了“代码模型”之间的逻辑关系。因此才使得⾯向对象编程中即便代码复杂但是逻辑关系清晰明了。在⾯向对象编程中“代码模型”可以创造出多个模型实例。这个模型实例被叫做“对象”。总结为⼀句话“⾯向对象开发就是对现实事物的建模”。
使⽤⾯向对象语⾔举例⾯向对象编程,这⾥⽤做⼀个“冰箱模型”来举例:
**fridge.h
class Fridge {//建⽴⼀个冰箱模型
public://模型对外提供操作接⼝函数
Fridge();//构造函数,功能是初始化模型中的数据
int put(int pos,char object);//把东西放到冰箱中的指定位置
char fatch(int pos);//从冰箱指定位置取东西
private://模型私有数据,只能⽤模型⾃⼰的函数来直接操作
char container[100];//冰箱容器
};
**fridge.cpp
Fridge::Fridge(){
memset(container,0,100);
}
int Fridge::put(int pos,char object){
container[pos]= object;
//这⾥可以判断是否可以存⼊,并返回处理结果编号
return0;
}
char Fridge::fatch(int pos){
char ret = container[pos];
container[pos]=0;//取出清零
return ret;
}
**main
#include"fridge.h"
int main(){
Fridge fridge;//建⽴⼀个模型对象,在建⽴的时候⾃动调⽤“构造函数”
fridge.put(0,'a');//使⽤模型实体对象,把‘a’存⼊冰箱
char temp = fridge.fetch(0);//使⽤模型实体对象,从冰箱位置0拿出东西
return0;
}
2.⽤C语⾔实现⾯向对象编程
了解了“⾯向对象编程思想”的实质以后可以发现,即便是c语⾔也可以⾯向对象开发。虽然c语⾔中没有class这样的⾯向对象构架语法,但是可以使⽤c语⾔的开发知识来构建相应的功能。可⽤⽅法如下:
⽅法1:
使⽤结构体作为⼀个“代码模型”,在结构体中实现模型所具有的变量和函数。
⽅法2:
使⽤单个c语⾔⽂件作为⼀个“代码模型”,⼀个c语⾔⽂件包含⼀个h⽂件和⼀个c⽂件。⼀个c语⾔⽂件中的c⽂件定义模型的私有变量(static)和功能函数。在c语⾔⽂件中的h⽂件中声明(extern)模块对外提供的函数接⼝。不⽤担⼼浪费c语⾔⽂件,实际开发中⾯向对象语⾔中的模型class⼀般也单独占⽤⼀个⽂件。为了在调⽤模型函数的时候,能明确表明这个函数是这个模型的,⼀般在模块的成员函数名字前⾯加上特定的标注字符。(因为c语⾔中没法建⽴模型的“对象”)。软件图形界⾯开发库GTK+就是⽤
C语⾔以这样的⾯向对象思想实现⽅法来建⽴的。同样使⽤“冰箱模型”来举例做⼀个c语⾔版本的⾯向对象设计:
**fridge.h
extern void fridge_init();
extern int fridge_put(int pos,char object);
extern char fridge_fetch(int pos);
**fridge.c
static char container[100];//冰箱容器
void fridge_init(){
memset(container,0,100);
}
int fridge_put(int pos,char object){ container[pos]= object;
return0;
}
char fridge_fetch(int pos){
char ret = container[pos];
container[pos]=0;//取出清零return ret;
}
**main
#include"fridge.h"
int main(){
fridge_init();
fridge_put(0,'a');
char temp =fridge_fetch(0); return0;
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论