1. Overview
主要分成四个部分
- 面向对象的准则
- 面向对象设计,抽象、类、封装、继承
- 对象
- 对象相似时
- 异常捕获
- 这些准则如何应用到Python内置函数中、
- 何时使用面向对象
- Python数据结构
- 面向对象的捷径
- 字符串与序列化
- 设计模式
- 迭代器模式
- 装饰器模式、观察者模式
- 适配器模式、门面模式
- 有趣的主题
- 测试面向对象程序
- 并发
在现实中,设计并不会在编程之前就完成,实际上,分析、编程、设计是相互重叠的。
什么是对象?对象是数据与相关行为的集合。增查删改?
什么是面向对象?用数据和行为来描述真实事物。在实现的过程中分为三个阶段
- 面向对象分析,输出是一系列需求
确定所需的对象的对象之间的相互关系。内容包括客户访问、消除不必要的可能性
- 面向对象设计,输出是实现方案
将需求转化为实现方案。命名对象、定义其行为。此阶段关注的是如何完成,将需求转化为一系列类和接口,从而使得整个系统可以使用编程语言实现(理论上)
- 面向对象编程,输出是可以运行的程序
将设计转化为可以运行的程序的过程
如果现实中也能向上面这样理想就好了。但是真实世界是更加黑暗的。在设计阶段有了更多的需求、在编程的时候设计发生了变化等。因此21世纪的开发都遵循迭代开发的模型。
- 对象与类
利用UML图,我们可以描述类之间的关系
指定属性和行为
数据代表着属性,或者说特性
在设计阶段,不需要过度担心数据类型的问题
- 行为就是在对象上的动作,或者叫方法。
分析与设计就是为了弄清楚这些对象之间如何交互
- 隐藏细节,创建公共接口
公共接口需要仔细设计,因为在未来很难更改。
不要设计未来可能有用的对象或者建模,只建模当下的需求
- 设计抽象的层级有不同的方法或者说设计模式,大部分都依赖于两个基本的原则:
- 组合。物理对象通常很容易分解为零件对象
- 继承。最有名但也是被过度使用的一种关系,需要满足”是一个“这种关系,而不能为了减少代码而在两个关系很小的类之间继承。
- 多态,不同的参数排列不同的实现方式。
Python是动态语言,所以是鸭子类型,不需要严格规定类,只需要类的方法一样即可
- 多重继承,棘手但是很有用
避免出现拥有相同方法的情况。