11.1 面向对象的三大特征
1. 封装
封装是面向对象程序设计的核心思想。它是指将对象的属性和行为封装起来,其载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想。
2. 继承
继承是面向对象程序设计提高重用性的重要措施。它体现了特殊类与一般类之间的关系,当特殊类包含了一般类的所有属性和行为,并且特殊类还可以有自己的属性和行为时,称作特殊类继承了一般类。一般类又称为父类或基类,特殊类又称为子类或派生类。
3.多态
多态是面向对象程序设计的重要特征。
11.2 封装
类的封装可以隐藏类的实现细节,迫使用户只能通过方法去访问数据,这样就可以增强程序的安全性。接下来演示未使用封装可能出现的问题,如例所示。
在定义类时,可以将属性定义为私有属性,这样外界就不能随意修改。Python中通过在属性名前加两个下画线来表明私有属性,如例所示。
当属性设置为私有属性后,经常需要提供设置或获取属性值的两个方法供外界使用,如例所示。
此外,私有属性在类外不能直接访问,但程序在测试或调试环境中,可以通过“对象名._类名”的方式在类外访问,如例所示。
11.3 继承
在程序设计中,继承是面向对象的另一大特征,它用于描述类的所属关系,多个类通过继承形成一个关系体系。
11.3.1 单一继承
单一继承由于只有一个基类,继承关系比较简单,操作比较容易,因此使用相对较多,其语法格式如下:
11.3.2 多重继承
多重继承指派生类可以同时继承多个基类,其语法格式如下:
11.4 多态
Python中加法运算符可以作用于两个整数,也可以作用于字符串,具体如下所示:
上述代码中,加法运算符对于不同类型对象执行不同的操作,这就是多态。在程序中,多态是指基类的同一个方法在不同派生类对象中具有不同的表现和行为,当调用该方法时,程序会根据对象选择合适的方法,如例所示。
11.5 设计模式
设计模式描述了软件设计过程中经常碰到的问题及解决方案,它是面向对象设计经验的总结和理论化抽象。通过设计模式,开发者就可以无数次地重用已有的解决方案,无须再重复相同的工作。
11.5.1 工厂模式
工厂模式主要用来实例化有共同方法的类,它可以动态决定应该实例化哪一个类,不必事先知道每次要实例化哪一个类。例如在编写一个应用程序时,用户可能会连接各种各样的数据库,但开发者不能预知用户会使用哪个数据库,于是提供一个通用方法,里面包含了各个数据库的连接方案,用户在使用过程中,只需要传入数据库的名字并给出连接所需要的信息即可,如例所示。
11.5.2 适配器模式
适配器模式是指一种接口适配技术,实现两个不兼容接口之间的兼容,例如原程序中存在类Instrument与Person,其中Instrument实例对象可以调用play()方法,Person实例对象可以调用act()方法,新程序中增加类Computer,其实例对象可以调用execute()方法。现要求类Instrument与Person的实例对象通过execute()调用各自的方法,具体如例所示。