《手把手陪您学Python》39——面向对象

在上一篇《手把手陪您学Python》38——第二阶段小结中,我们对之前所学的内容进行了总结,接下来,我们将会用几篇文章,为大家介绍一种Python中非常重要的编程方法,或者说编程思想。

为什么说是编程思想呢,因为他并不涉及新的语法、命令、函数等,只是在之前我们学习过的知识的基础上,通过改变程序的结构、运行逻辑、执行顺序,甚至是改变程序的核心主题,来实现一种全新的思维方式和编程逻辑,也就是面向对象编程。

上面这段话可能不是很好理解,甚至可能不是很准确,因为他只是我对于这种全新的编程思想的描述。

说实话,这一部分的内容要理解起来可能会比之前我们学习的内容要难得多,包括我自己,也是好几次准备开始学习这个主题,看不懂,放下,过一段时间,再重新拿起来,还是无法理解,又放下。就这么反反复复的有了大半年的时间,最近才终于有了顿悟的感觉,理解了其中的含义,也才敢继续更新《手把手陪您学Python》这一系列文章。这也是除了疫情和工作原因,断更半年多的一个重要原因。

因为如果不把这点吃透了,实在不敢违心地继续陪大家一起学Python。虽然也可以把这块隔过去,但是从整个学习的逻辑性和完整性上来说,就是不那么完美了。

所以,我也会尽可能地在接下来的几篇文章中,把面向对象的编程方法和编程思想,用最为通俗(有可能会比较啰嗦)的方式介绍给大家,希望大家也能够尽快地理解和掌握。

当然,刚才也说了,对于面向对象我也是刚刚才学习有所了解的,如果在介绍过程中,有什么不准确的地方,还希望大家能够多多包涵,并提出宝贵建议,我也会在后面的文章中,及时勘误,并把我新的学习体会再分享给大家。

因为这块内容确实有点难,如果大家在学习的过程中有什么理解不了的,欢迎随时留言一起讨论,希望可以帮助大家尽快攻克这个难关。

也可以像我之前一样,先放一放,继续学习后面的内容,也不会有什么影响,过一段时间再回过头来看看,相信最多有几次反复,大家肯定就能理解了。

以上就是我的一点经验和建议,在开始学习面向对象前与大家分享一下,希望能够对大家后面的学习有所帮助。

下面,就正式开始面向对象编程的学习,大家加油!

1、编程的两种方法:

刚才说,面向对象是一种新的编程方法或者说编程思想,那么原来我们是用什么方法和思想在编程呢?

那就是面向过程,包括我们之前在学习基础知识的过程中所列举的实例,以及“石头剪刀布”和“猜数字”两个比较大型的(相对于其他实例来说)程序,都是基于面向过程的方式在编写程序。

那么什么是面向对象,什么是面向过程,两者之前的差别又是什么呢?

2、面向过程

首先,从字面上看,面向过程更为容易理解,就是以过程为中心。要实现什么目标,需要先怎么样,再怎么样,才能怎么样。更通俗一点就是,要到D点,要从A出发,经过B,再到C,最后到达D。

如果以我们之前的“石头剪刀布”做例子,就是要知道谁赢,需要先设定比赛规则,然后让用户出拳,再让计算机出拳,最后根据规则判断输赢。

整个程序设计的出发点,和我们考虑一件事的发生顺序是一致的,这就是以过程为中心的编程思想,也就是面向过程。

3、面向对象

由此可知,面向对象就是以对象为中心。

这个对象就是我们大千世界中的万事万物,可以是我们桌面上的一个水杯,也是可以是海里的一条鱼,还可以是一次漂亮的投篮,或者是说不清道不明的爱。

总之,一切可以言说、不可以言说、具体的、抽象的东西,最终都可以称之为“对象”。

所以,面向对象的编程就是以这些“对象”为核心的编程方法。

4、区别

当我们采用面向对象的编程方法时,要考虑的问题就不再是“先怎么样再怎么样”了,而变成了“什么(即对象)是什么(属性)能干什么(方法)”。

括号里的解释是为了区分几个“什么”的含义,后面会具体讲到,这里可以先不用理会,关键要体会“什么是什么能干什么”这段话。

再和“先干什么、再干什么、最后干什么”比较一下,是否能感觉到一些差别了?

前者在介绍这个什么(对象),而后者在关心怎么做(过程)。

这就是面向对象和面向过程的差别。

例1、石头剪刀布

如果不理解,我们再以“石头剪刀布”为例,看看如果从面向对象的角度出发,这个程序有哪些对象,又应该如何设计。

首先,最重要的对象就是参赛选手(对象)了,用户是参赛选手(实例化),电脑是参赛选手(实例化)。参赛选手能干什么呢?能“出拳”(方法)。

这里的括号同样先不需要关注,等后面讲过这些概念后,再返回来看就能明白其含义了(下同)。

另外一个对象是规则(对象),规则是什么呢?是“石头赢剪刀,剪刀赢布,布赢石头”(属性)。规则能干什么呢?“判断输赢”(方法)。

好了,现在所有的对象都已经就位了,对象是什么、能干什么也清楚了,下面就是我们组织程序的过程了。

首先,用户出拳(用户.出拳);其次,电脑出拳(电脑.出拳);最后,规则判断输赢(规则.判断)。

看到这,大家是不是就会问了,这看上去这也是个过程啊,和之前没有什么两样啊?

没错,这确实是个过程,毕竟我们比这个“石头剪刀布”的本身就是一个过程,不可能改变其先出拳后判断输赢的顺序。

但大家注意没有,这个过程却是以对象为中心的,这是和面向过程的过程的最大差别。

大家可以回过去看看面向过程里的这段游戏是如何描述的,是“设定”比赛规则,然后“让”用户出拳,再“让”计算机出拳,最后根据规则“判断”输赢。

每一个过程都是以引号中的过程为核心的。

而面向对象的描述方法呢,是“用户”出拳,然后“电脑”出拳,最后,“规则”判断输赢。

每一个过程都是一个对象(用户、电脑、规则)发起的,都是在描述对象做的事(出拳、判断),最后把所有对象做的事情按照先后顺序连起来,形成一个完整的程序。

讲到这,不知道大家有没有理解了一些。下面我们再用一个例子,继续体会面向对象和面向过程的区别。

例2、洗衣服

如果我们有衣服要用洗衣机洗,这个过程应该是什么样的?

我们最先想到的,应该就是面向过程的方式:

1、打开洗衣机门

2、把衣服放进去

3、关上洗衣机门

4、启动电源

5、清洗衣服

6、甩干衣服

7、烘干衣服

和“石头剪刀布”中的过程一样,都是一个个动作按照先后顺序组合起来的,谁开门,谁洗衣服在这里不重要。

如果是面向对象,我们首先要想到的不是先干什么后干,而是什么(对象)能干什么(方法)。

这里的对象显然就是人和洗衣机,分别地,人能开门、放衣服、关门、启动电源,洗衣机则能清洗、甩干和烘干。

之后才是洗的过程,而且这个过程是以对象为核心的,或者说要以对象为出发点去执行:

1、人打开洗衣机门(人.打开洗衣机门)

2、人把衣服放进去(人.把衣服放进去)

3、人关上洗衣机门(人.关上洗衣机门)

4、人启动电源(人.启动电源)

5、洗衣机清洗衣服(洗衣机.清洗衣服)

6、洗衣机甩干衣服(洗衣机.甩干衣服)

7、洗衣机烘干衣服(洗衣机.烘干衣服)

虽然还是同样的过程,但每一个动作都是由对象去执行的,“谁”干了什么的“谁”才是最重要的。

以上分别从字面理解和两个例子,向大家介绍了面向过程、面向对象以及他们之间的差别。

就像我一样,第一次接触这些概念一定会很蒙的,尤其是没有看到太多这样的例子,所以很难体会到他们之间的差别。

好的是,根据我的理解,给大家通俗地解释了两个概念的异同,并用例子作为对比说明,可能理解起来就会更加容易一些了。

但如果初次接触可能依然比较难以理解,不过没关系,就像我们开头说的,可以先放一放,过两天再来看一遍,或者继续学习后面的内容,再返回来学习,可能就会有不一样的认识了。

后面我们还会继续讲解面向对象的编程方法,只不过就不像这篇文章一样都是通俗的概念讲解了,而是要进入到面向对象编程的具体结构和编写规则了,同时也就能明白今天文章中很多括号里的文字的意义了,敬请关注。

 

《手把手陪您学Python》39——面向对象

 


感谢阅读本文!如有任何问题,欢迎留言,一起交流讨论^_^

要阅读《手把手陪您学Python》系列文章的其他篇目,请关注公众号点击菜单选择,或点击下方链接直达。

《手把手陪您学Python》1——为什么要学Python?

《手把手陪您学Python》2——Python的安装

《手把手陪您学Python》3——PyCharm的安装和配置

《手把手陪您学Python》4——Hello World!

《手把手陪您学Python》5——Jupyter Notebook

《手把手陪您学Python》6——字符串的标识

《手把手陪您学Python》7——字符串的索引

《手把手陪您学Python》8——字符串的切片

《手把手陪您学Python》9——字符串的运算

《手把手陪您学Python》10——字符串的函数

《手把手陪您学Python》11——字符串的格式化输出

《手把手陪您学Python》12——数字

《手把手陪您学Python》13——运算

《手把手陪您学Python》14——交互式输入

《手把手陪您学Python》15——判断语句if

《手把手陪您学Python》16——循环语句while

《手把手陪您学Python》17——循环的终止

《手把手陪您学Python》18——循环语句for

《手把手陪您学Python》19——第一阶段小结

《手把手陪您学Python》20——列表

《手把手陪您学Python》21——元组

《手把手陪您学Python》22——字典

《手把手陪您学Python》23——内置序列函数

《手把手陪您学Python》24——集合

《手把手陪您学Python》25——列表推导式

《手把手陪您学Python》26——自定义函数

《手把手陪您学Python》27——自定义函数的参数

《手把手陪您学Python》28——自定义函数的返回值

《手把手陪您学Python》29——匿名函数

《手把手陪您学Python》30——模块

《手把手陪您学Python》31——文件的打开

《手把手陪您学Python》32——文件的读取

《手把手陪您学Python》33——文件的关闭

《手把手陪您学Python》34——文件的写入

《手把手陪您学Python》35——数据的存储

《手把手陪您学Python》36——错误和异常处理

《手把手陪您学Python》37——程序的重构

《手把手陪您学Python》38——第二阶段小结

 

For Fans:关注“亦说Python”公众号,即可免费下载本系列文章所用示例语句。

《手把手陪您学Python》39——面向对象
亦说Python——Python爱好者的学习分享园地
上一篇:leetcode-39


下一篇:第39期:小白一看就会的 BST 删除!