第8章 面向对象

第8章 面向对象

问题导向

·如果面向过程的函数中用到较多的全局变量,如何优化?

·问题复杂度高且要重复利用,如何更好地解决?

·一个项目如何分配任务、定义接口?

重点与难点

·类与对象的关系。

·类方法与类属性,对象方法与对象属性。

·单重继承与多重继承。

·装饰器的应用。

知识导图

Python之旅——旅游攻略

前人栽树,后人乘凉。每次旅行之前,大家都会参考前人的旅行体验和攻略,做出自己的旅行规划。Python提供了一种新的旅游攻略:面向对象程序设计。不同于以往面向过程编程中直白地表示变量、定义函数,在面向对象编程的方法中,将所有的实际事物看成对象,将对象相应的特性看成属性——对应变量,将对象相应的动作、行为看成方法——对应函数。具有相同特征的事物又统一称为一个类,所有的方法属性都封装在类中。

在这一站,让我们来体验这种全新的攻略方法面向对象程序设计吧。

现实世界中存在各种不同形态的事物,这些事物之间存在着各种各样的联系。在程序中通过对象来映射现实中的事物,用对象之间的关系来描述事物之间的联系,这种思想就是面向对象。

面向对象程序设计(Object Oriented Programming,OOP)对现实世界事物所包含的属性和行为进行概念化建模,以反映其特征,通过编程“虚拟”地将它们实现在计算机系统中。

前面章节都是面向过程的程序设计,即把计算机程序看成一系列的命令集合,即一组函数的执行。面向过程的思想是分析出解决问题的步骤,然后用函数把这些步骤一一实现,使用的时候依次调用即可。只考虑在函数中封装代码逻辑,而不考虑函数的归属关系。

面向对象则把解决问题的事物提取为多个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。面向对象是一个更大的封装,根据对象职责明确函数的归属关系。

比如如何把一头大象装进冰箱,如图8-1所示。谁来开门?这正是面向过程和面向对象的根本区别。

图8-1 把大象放进冰箱

面向过程的解决思路是:一是打开冰箱门,二是把大象装进去,三是关上冰箱门。过程由程序员来控制,当需要放很多头大象进去时,就需要程序员逐个打开冰箱的门,每增加一个冰箱,就需要去打开一次门。

面向对象的思想是:冰箱会自己把门打开,自己把大象装进去,自己把门关上。人们不需要了解这一过程是如何实现的,只需要在把大象装进冰箱的时候,跟冰箱说一句:“嘿,你把大象装进去吧。”在此过程中,分析出每个参与解决问题的对象(冰箱),并确定这些对象的行为(开门,装大象,关门),最终由这些对象完成问题的编程思想。在面向对象编程中,冰箱设计图纸被称为类,而按照这张图纸生产出来的一个个冰箱,则被称为类的实例或者对象,这一生产过程就被称为类的实例化。