面向对象
面向对象的设计和实现
一、定义和实现 对象 可以直接对应现实世界里面的事物
二、面向对象的设计(OOD)
1、分析要解决的现实世界的问题
2、定义出各种对象 代表现实世界的对象
3、通过设计 对象之间的关系和交互行为来设计系统
三、因为
1、现实世界 其实就是各种对象 和对象之间的关系、交互行为
2、现实世界:事物的时间
a、物:对象、对象之间的关系(儿子、父亲;老板、员工)
b、事:对象之间的交互(司机开车,厨师做饭)
3、这种设计方式 更容易被人所理解和接受
类和实例
1、首先,寻找要设计的对象
老虎、羊、房间
2、接下来,确定对象的定义
a、对象的定义:定义对象在这个系统里面的的属性和行为
b、比如老虎这类对象,在这个系统里面的共有属性,行为 属性
c、在面向对象的软件设计中把对象和它的属性和行为的定义叫 类 的定义
d、类表示了这类对象所共有的属性和行为
e、类是面向对象的设计中最基本的概念
f、定义了类,就定义了对象的类型(包括在系统里面的属性和行为)
3、实例 是类的具体化存在
a、老虎这个类,描述了:
1、在这个系统里面共有的属性:体重、名称
2、行为有叫、吃食物
b、每个具体的老虎,是老虎这个类的 实例
房间中老虎
c、类的实例的关系,有点像 模具和根据模具做的东西一样
面向对象的语言 vs 面向对象的设计
1、面向对象的设计:是一种设计思路
2、面向对象的语言:提供对面向对象设计的语言支持
3、非面向对象的语言也能实现面向对象的设计思路
静态属性和实例属性
1、静态属性(类属性)
该类的所有实例共享的属性
2、实例属性
体重(每个实例独有的)
定义在 初始化方法 __init__里
self的概念
静态方法和实例方法
1、对象的方法就是描述对象行为的
a、通过定义在类里面的函数
b、初始化方法__init__函数
2、类的方法包括
a、实例方法:每个具体实例相关的方法
b、静态方法:共有的方法,每个具体实例都是相同的
实例方法:
1、与每个具体实例相关的方法
如果代码中的实例方法不访问任何实例属性,一般建议实现为静态方法
2、初始化方法就是一个实例方法
3、一般实例方法都要访问self
静态方法
与每个具体实例无关
@staticmethod 修饰 (装饰器)
静态方法不能访问实例属性,但是可以访问静态属性
对象的组合
一、什么是对象的组合?
1、房间里可以包含老虎、羊
2、通过 对象的属性 表示这种组合 关系的
在类定义的 初始化函数 里面表示对象的组合
class Room:
def __init__(self,num,animal):
self.num = num
self.animal = animal
对象的继承
现实世界里面的对象
重定义
子类的属性和行为跟父类不一样
子类实例 调用这些属性、方法 会使用新的定义
多态
同样的的方法调用,在不容类型的对象上会表现出不同的特性,称之为多态