python中面向对象的缺点_小疯谈python:浅谈面向过程和面向对象

本文通过举例说明了面向过程和面向对象两种编程思想的区别。面向过程是按步骤解决问题,而面向对象则是通过对象描述行为。在解决简单问题时,面向过程可能更直观,但在处理复杂问题时,面向对象可以提高开发效率,但可能降低运行效率。面向对象具有更好的代码复用性和维护性,适合大型项目开发,而面向过程则更适合简单的任务。
摘要由CSDN通过智能技术生成

上一篇文章我简单的介绍来一下计算机语言,在计算机语言发展的第三个阶段诞生了高级语言,而在高级语言发展的过程中出现了两种不同的编程思想——面向过程和面向对象,这也是小白在学习一门高级语言的时候很难理解的地方,老实说,如果仅仅只学一门语言,那么是很难深刻理解这两种思想的,不过今天既然是浅谈,所以斗胆来说一说我个人对着两种思想的理解。

d058ccbf6c81800ab65b5c8f8cb5ecff838b477f.jpeg?token=8bfd0869dfdadec6ef36b5748d91f6ea&s=00235D325B4474C8817151C80300E030

首先我从专业的角度来解释一下面向过程和面向过程(其实就是我从资料上抄的)

面向过程:是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用则可。

面向对象:是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。

上面的解释是什么意思呢?老实说我也不是特别的能解释得清楚,而且就算解释清楚了,对于没有编程基础的小伙伴来说多半也听不懂,所以接下来我将一个例子来向大家阐述我对着两种思想的理解。

宋丹丹在春晚《钟点工》中问赵本山把大象装进冰箱分几步,这个故事我想大家还记得吧,把大象装进冰箱一共分三步,第一步把冰箱门打开;第二步把大象装进冰箱;第三部把冰箱门关上。以上就是一种面向过程的思维方式,我们在解决一个问题的时候首先把这个问题的解决步骤分析出来,然后按照这个步骤写出对应的代码,然后调用这些代码,最终实现问题的解决。

这种思想在现实生活中很常见,例如洗衣服,我们一般都是先放水,然后放洗衣液,然后放衣服,然后洗衣服,然后晒衣服。通常我们在描述解决一件问题的方法的时候,经常用到“然后”,“再”,“第一,第二……”等表示先后顺序的词的时候,我们往往都是利用面向过程的思想。

这时候有的小伙伴会说,“对啊对啊,我基本上都是用这种方法解决问题的啊?有什么问题吗?”这种方法之所以能够解决我们在日常生活中的绝大多数问题,是因为对于我们个人来说遇到的绝大多数问题是简单的,单一的。但是一旦我们遇到复杂,多样的问题的时候这样的方法就显得低效率了。

还是之前的装大象的问题,如果现在我不是把一头大象装进一台冰箱,而是把一百头大象装进一百台冰箱,该怎么装?如果我们还是按照面向过程的思想,那么应该是:先把第一台冰箱的门打开,把第一头大象装进冰箱,最后把第一台冰箱的门关上,然后把第二台冰箱的门打开……这样的一个过程。

但是有小伙伴会说,“不对,应该是把冰箱门打开,把大象装进去,把冰箱门关上,然后对后面的大象进行重复操作,直到所有大象装进冰箱。”如果你是这么想的,那么恭喜你,你已经有了面向对象的思想了,因为你之所以认为后面的大象可以用第一个大象的步骤,是因为你默认了把所有的大象和冰箱都归为一类,既然第一个大象可以用把门打开,把大象装进去,把门关上,那么之后的大象都可以这么做。但是对于面向过程编程却不行,因为在它们眼中,第一个大象和后面的大象是完全不同的东西,第一台冰箱也和后面的冰箱不同,所以利用面向过程编程写的话只能按照第一个的方法,一个一个的把大象装进冰箱。很显然,对于我们来说这种方很繁琐也很不适用。

这时候,如果我们采用面向对象变回显得简单很多。首先这我们可以定义一个名为象的类,在这个类中我们描述一下大象的特征,有四条腿,长鼻子,大耳朵的动物。然后再定义个名为箱的类,同样我们描述一下特征,可以制冷的电器。最后我们定义一个名为装大象方法:把箱门打开,把象放进箱中,把箱门关上。这时候我们只要把这一百头大象归为象的类,把一百台冰箱归为箱的类,然后调用装大象的方法。这样我们就解决了把一百头大象装进一百台冰箱的问题了,这里的象其实就是对大象这种事物的高度抽象,而把大象归为象这个类在编程的过程中叫做实例化。

有细心的小伙伴可能已经发现了,为什么我定义的名称是象,而不是大象呢?这是因为我要区别一下,当然你也可以定义类的名称是大象,或者其他的任何名字。为什么要区别,因为对于小白来说如果直接定义类的名称为大象,他们会很容易默认的这个大象就是我们要装的一百头大象,这其实是一种错误的认知。对于编程语言来说,一旦我们确定了一个类并定义了相应的特征,方法等,那么计算机就会把所有归为这个类的东西都当作同一种事物,例如如果我们在一个名为大象的类的下面写老虎的特征,计算机就会把这一百头大象认为是老虎,而不是大象,这就会导致我们产生错误的结果,因此这个类的名称只是一种代称罢了,没有任何的实际意义。

好的,如果你明白了上面的话,那么我们便继续。上面我们说到了实例化,这里简单的和大家解释一下,所谓实例化就是把类这个抽象的概念具体到某一特定的事物中来,如果不对类进行实例化,那么类中的方法是不能运行的。具体来说,只有我们把一号大象和一号冰箱归为象和箱这两个类中的时候,装大象这个方法才会运行,并将里面的方法具体化为:把一号冰箱门打开,把一号大象放进箱中,把一号冰箱箱门关上。后面所有的大象都是按照这个流程,唯一的却别就在于大象和冰箱的编号不同。所以类和他的实例就相当于函数的形参和实参。

f9dcd100baa1cd118d32ed93849217f9c2ce2d07.jpeg?token=1710042b37e349d1461a3248222abc80&s=A953CC12AF926AD80CC925D60300C0B2

最后,便是这两种思想的优缺点了,一谈到面向对象和面向过程编程的优缺点的时候,我们常常会说面向对象的开发效率高,运行效率低等;面向过程开发效率低,运行效率高等;但是我个人认为这应当有个前提,就是在开发一个比较复杂的程序的时候。为什么这么说,我们可以回到最初的原点,当我们只将一头大象装进一个冰箱的时候,无疑我们采用面向过程的方式是最为简单的,开发效率也是最高的,如果采用面向对象的方式无疑显得鸡肋了。同样的在运行的效率来说,两者其实也没有太大的差别,虽然面向对象在实例化的过程中需要占用大量的资源,但是如果我们只是实例化一个或者几个对象的话,这其中的时间是很短的,与面向过程运行的时间几乎没有差别。(PS:虽然这里说没有差别,但实际上还是有的,因为对于计算机来说0.01秒和0.1秒之间其实时间已近相差很久,但是对于人来说却很难捕捉到这微不足道的时间差。)

不过,如果是开发一个复杂的程序,则差别就开始体现了。首先是开发效率上,在之前我们已近很清晰的看到,当我们装的大象的数量越来越多的时候,用面向过程的模式需要写大量重复的代码,而面向过程只要把类和方法定义好,然后把大象放进类中,就可以了,所以后者无疑要比前者所用时间要少。同时在维护和可移植性上,面向过程无疑要比面向对象差很多。还是刚才把一百头大象装进一百个冰箱的例子,如果我要把大象变成老虎,在面向对象中,我只需要打象这个类从新定义一下就可以了,但是对于面向过程来说,这需要把所有的大象改成老虎,也就是说我要改一千个代码,这对于开发者来说无疑是不能接受的。

同样的,在运行效率上来说,由于复杂的程序所需要的实例化的对象很多,因此在实例化的过程中占用的资源会很多,因此在运行效率上要往往比面向过程所写的程序要差,不过在很多情况下,牺牲一定运行效率换取一定的开发效率是开发者所能接受。(因为开发效率越快往往能使程序或软件更快抢占市场份额,而且还能减轻开发者的工作量,至于运行效率嘛,市场份额占多了,没有竞争者了,自然就有时间慢慢改进了呗。)

所以目前绝大多数的软件开发都是以面向对象的思维开发的,面向过程主要应用于底层的开发。但是不能说面向过程不好,说道底,我认为这只是两种思维模式,在面向对象的编程中我们仍然可以写面向过程的代码,例如我们在定义装大象的方法的时候其实就用到了面向过程的思维方式。而在面向过程的编程中我们仍然可以使用面向对象的思维方式。而且从某种意义上来说,面向过程的思想仍然是初学者优先掌握的思想,只有当你的水平达到一定境界了,才需要掌握面向对象的方法,因为如果你以后的只能写出一些解决简单问题的程序,那么面向过程的思维方式就已经足够了。

以上便是我对面向过程和面向对象的一些个人简介,下一篇文章我将正是开始我的python学习的一些知识的分享。希望大家多多支持与分享。

10dfa9ec8a1363274b7111bdac0f7fe909fac722.jpeg?token=d1a0039eb48d8403a2d51989af80e107&s=9211616CC40324FC57FE58120300D0DA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值