python面向对象还是过程_Python中面向对象和面向过程的区别

通过前面的一些文章,大家对Python应该有了基本的了解。但是,在之前所有的文章中,我们的代码都是面向过程的,并没有涉及到面向对象的思想。有句话说得好,Python中一切皆对象。

这时候,很多刚入门的小伙伴就要问了,什么是面向过程?什么是面向对象?2093ac614baec85771c185ef4c3c72813fae1b09.png

大家可能对这两个概念有点陌生。今天我就来给大家解释一下这两个的区别。直接说概念有点枯燥,我举一些生活中的例子~

面向过程

我们在日常的学习和工作中,为了更好地完成某项任务,在开始之前都会在纸上或者心中列出一个流程,然后按部就班地去解决问题,这实质上就是面向过程的思想。我们罗列的步骤就是过程,按照步骤解决问题就是面向过程。

因为我自己喜欢做好吃的,今天就以最简单的烤东西为例。假设我今天突然想用烤箱烤大虾。首先,准备好大虾,放入烤箱,设定好温度190℃和时间15分钟,时间到了,就可以吃啦。这就是一个简单的面向过程的思维。fc4431c8c855e5a08ba2eb982bda99a6ea28cd43.png

24c601053f1406182597f4f5d3402f7c4c879901.png

那么,如果我明天想烤扇贝,我还是要重复一下昨天的步骤,只是温度改为180℃,时间改为8分钟,整个流程还是一样的0041434734d22da36dd5ce2d5f29cf8488b74e81.png

5993f52ff1e6a37b273bcad9094fe094e6cebe32.png

当然,我们也可以定义一个函数f15a89f1f7de608e0b5310c24dfdab8b6015e015.png

用函数好像简化了代码操作,但是逻辑还是一样的,仍然是一个流程。

可以看到,面向过程的代码是按部就班,自顶而下的,流程非常清晰,要解决一些小问题的话代码写起来很容易。

但是在面向过程程序设计中,被操作的数据是嵌入在编程语句中的,并且与程序逻辑混合在一起。对于复杂的项目就很难维护,比如要修改数据,就要从上到下都要修改数据了,大大增加了维护成本。

面向对象

而面向对象,则是站在一个更高的角度,跳出这个问题本身,去以一种系统的思维去分析这个问题。现实世界中,任何一个操作或者是业务逻辑的实现都需要一个实体来完成,也就是说,实体就是动作的支配者,没有实体,就肯定没有动作发生!所以,我们需要分析问题中有哪些实体,这些实体应该有什么属性和方法,我们如何通过调用这些实体的属性和方法去解决问题。

还是刚才的烤食材。如果用面向对象的思想,我们来分析在这个过程中参与的有什么实体。很简单,一个是食材,一个是烤箱。那么食材有什么属性呢?对于这个问题来说,有三个属性,食材的名称、烤制的温度和时间。对于烤箱,它的属性我们暂不关心,但是烤箱必须有一个方法,那就是烤制。我们看看代码。43a85547f1c34184b3ae32fc5143843c37d00078.png

具体的代码为什么这么写,我在下一篇会给小伙伴们详细讲解,大家先看整个逻辑。

首先定义Food类和Oven类。Food类有三个属性,食材名称name,烤制温度temperature,烤制时间duration。Oven类有一个方法,bake方法,传入的是Food类的对象。

接下来,定义两个食材,都是Food类的对象。Prawn是大虾,scallop是扇贝,都有三个属性。

最后,我们调用烤箱类Oven的bake方法,分别烤制大虾和扇贝。

这时,小伙伴们就要问了,这个和上面的优点在哪呢?如果我们有第三种食材鸡翅,我们只需要再生成一个Food类的对象,然后使用Oven的bake方法就可以了。整个的逻辑很清晰,而且并不影响其它的代码。7207c8f6e30fd7b9cb02b86f41cb39255d184aff.png

所以说,面向对象是一种更抽象更高级的解决问题的方式。它利用类和对象来创建各种模型来实现对真实世界的描述,世界万物,皆可分类;世界万物,皆为对象。它主要有两个优点

1. 使程序的维护变得简单,并大大提高开发效率。

2. 基于面向对象的程序更加容易理解代码逻辑,有利于团队开发。

结束语

通过上述的对比,我们可以发现,面向过程就是分析出解决问题所需的步骤,面向对象则是把构成问题的事物分解成对象,抽象出对象的目的并不在于完成某个步骤,而是描述其整个解决问题的步骤中的行为。那么,我们在日常编程中应该怎么选择呢?到底是用面向对象还是面向过程呢~

结合我们上面提到的优缺点。建议小伙伴们在日常自己写点提高生产力的脚本或者小程序时使用面向过程。在一些比较复杂的程序或者要和别人协作的时候还是面向对象吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值