面向对象和面向过程_浅谈面向过程与面向对象

2dbda24325e956369cbcd4973961c5e0.png

面向过程和面向对象到底是什么?又有什么区别?这是个编程界老生常谈的问题了;不理解的人觉得很可怕,理解的人又觉得很简单,包括写这篇文章之前我还觉得这是一个只可意会不可言传的概念,但读了众多资料之后,觉得有些比喻及示例确实能让一个几乎小白的人也能理解。

因为是“浅谈”,所以特别专业、工程上的东西就不说了,我们只来理解一下这两样东西到底是什么?浅层次上有什么区别?以及通过几个小比喻、小示例来深入浅出理解一下;不过首先我们需要清楚的是:无论是面向对象还是面向过程,它都只是一种编程思想。

一、概念的区别

1.面向过程的英文缩写为:pop(Process-oriented programming),“process”意为“过程”,“oriented”意为“面向”,“programming”在这里意为“编程”;面向过程是一种以过程为中心的编程思想,它是一种基础的顺序的思维方式。代表语言:C语言。

2.面向对象的英文缩写为:oop(Object Oriented Programming),“object”意为“对象”;是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。代表语言:C++,JAVA,Python。

二、把大象装进冰箱

看完上面的概念,你肯定依然云里雾里,那接下来我们从一个小比喻出发,我们想一下,把大象装进冰箱分为几步?

79a2aae7a8e6efd4d510e914b6e4f235.png

1.面向过程的思想
聪明的你肯定已经确定了三步:1.打开冰箱门;2.把大象放进冰箱;3.关上冰箱门;
你说的没错,这是一个完整的可以将大象装进冰箱的流程,而且这是一个彻头彻尾的面向过程的编程思想;因为我们在分析这个问题的时候是按照事件的流程来完成设计的,所以使用面向过程的C语言来表示的话,可能就如下:

int Open(){  "打开冰箱门";}int Put(){  "放入大象";}int Close(){  "关闭冰箱门";}int main(){  Open();  Put();  Close();  return 0;}

其实再补充一点的话,过程就是函数,我们把完成一个任务的流程分别定义为Open、Put、Close函数,然后在主函数中按照顺序调用,这样就是一个完成认为的一个完整流程,也是一种自上而下的编程思想。

2.面向对象的思想
打开冰箱,放入大象,关闭冰箱是面向过程的思想的话,那我们怎样以面向对象的思想来看待这件事情,其实很简单,就是把完成这个事件的对象当作主体,那这个事件的对象只有两个:大象和冰箱,因此我们可以这样完成把大象放入冰箱的事件:1.冰箱开门;2.大象走进冰箱;3.冰箱关门;
感觉没什么不同对吗?其实在编程思想上已经大不同了,这里我们把对象当作主体,每个动作都需要对象来完成,那这样我们再用python的代码来表示:

class Elephant():  #定义大象类    legs = 4    color = 'gray'    def move(self):        '走进冰箱'class Fridge():  #定义冰箱类    doors = 1    color = 'blue'    def open(self):        '打开门'    def close(self):        '关闭门'Fridge.open()  #冰箱开门Elephant.move()  #大象走进冰箱Fridge.close()  #冰箱关门

因此通过上面的代码,我们先将两个对象——大象和冰箱定义出来,然后通过大象和冰箱自身的动作来完成把大象放入冰箱的任务;这样一对比,面向过程和面向对象的区别也就基本呈现了;但是不是上面的代码还有点看不懂呢?

三、什么是过程?什么是对象?

接下来我们再来看一下过程和对象分别是什么?在上面的代码中又是怎样表示的?
在上文已经提过过程其实就是函数,这个是比较好理解的,包括在面向过程的代码中,我们通过函数把“大象放进冰箱”的事件分成了三个函数分别是:Open、Put和Close,并且在主函数中按照事件的顺序来自上而下的运行这三个函数,这个就是面向过程的编程思想。
那对象又是什么?在python中,我们定义了一个等式“对象 = 属性 + 方法”,这个怎么理解,我们不妨把上文中的冰箱(fridge)类搬出来进行分析:

class Fridge():  #定义冰箱类    doors = 1    color = 'blue'    def open(self):        '打开门'    def close(self):        '关闭门'

我们再看一下“对象 = 属性 + 方法”,我们通过class来定义了一个“冰箱”,通过“doors = 1 和 color = ‘blue’”定义了它的属性:“有一个门,颜色为蓝色”,然后定义了“open 和 close”定义了它所包含的方法:“开门和关门”,这样就完成了一个完整的对象的定义;然后我们在完成“把大象放进冰箱”的事件时,按照正确的顺序,分别让Elephant和Fridge完成相应的操作就可以了,这个就是面向对象的编程思想。
总之,面向过程和面向对象没有高低优劣之分,只不过是编程思想及解决问题的方式不同,这篇文章应该可以帮你在浅层次理解两者的区别,在这个基础上再去学习不同思想的编程语言也就不会在面向过程和面向对象的概念上纠结了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值