Python3 面向对象的设计和实现
面向对象的语言 vs 面向对象的设计
1、面向对象的设计:是一种设计思路
2、面向对象的语言:提供对面向对象设计的语言支持
3、非面向对象的语言也能实现面向对象的设计思路
面向对象的设计(OOD)
1、分析要解决的现实世界的问题
2、定义出各种对象代表现实世界的对象
3、通过设计对象之间的关系和交互行为来设计系统
定义和实现 对象 可以直接对应现实世界里面的事物
1、现实世界 其实就是各种对象和对象之间的关系、交互行为
2、现实世界:事物的世界
a、物:对象、对象之间的关系(儿子、父亲;老板、员工)
b、事:对象之间的交互(司机开车,厨师做饭)
3、这种设计方式 更容易被人所理解和接受
面向对象的三大特性
面向对象有三大特性,他们分别是:封装、继承和多态。
封装:封装就是利用抽象数据类型将数据和基于数据的操作结合在一起,数据被保护在抽象数据类型的内部,系统的其他部分只有通过包裹在数据之外被授权的操作,才能够与这个抽象数据类型进行交互。
继承:继承是面向对象的程序中两个类之间的一种关系,是一类可以从另一个类(即它的父类)自动获得状态和行为。被继承的类也可以称为超类,继承父类的类称为子类。
多态:模块的动态行为是由对象间相互通信而发生的,多态的含义是一个消息可以与不同的对象结合,产生不同的行为,而且这些对象属于不同类。同一消息可以用不同方法解释,方法的解释依赖接收消息的类,而不依赖于发送消息的实例。多态通常是一个消息在不同类中,用于不同方法实现的。
类和实例
我们把一类相同的事物叫做类,其中用相同的属性(其实就是变量)描述,里面封装了相同的方法。比如,汽车是一个类,它包括价格、品牌等属性。
在面向对象的软件设计中把对象和它的属性和行为的定义叫 类 的定义
类表示了这类对象所共有的属性和行为
类是面向对象的设计中最基本的概念
定义了类,就定义了对象的类型(包括在系统里面的属性和行为)
- 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
- 方法: 类中定义的函数。
- 类变量: 类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
- 数据成员: 类变量或者实例变量用于处理类及其实例对象的相关的数据。
- 方法重写如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
- 局部变量:定义在方法中的变量,只作用于当前实例的类。
- 实例变量:在类的声明中,属性是用变量来表示的,这种变量就称为实例变量,实例变量就是一个用 self 修饰的变量。
- 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例图,Dog是一个Animal)。
- 实例化:创建一个类的实例,类的具体对象。
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
静态方法、静态属性、实例方法、实例属性
class Tiger:#定义类
# 静态属性:静态属性一般就直接定义在类里面
classname = '老虎'
# 初始化方法init是类的时候就会自动执行,实例属性一般定义在初始化方法中,init方法本身就是实例方法
def __init__(self, w): # self 指的就是实例化对象本身
self.weight = w
# @staticmethod指的就是静态方法,静态方法中在定义的时候没有self
@staticmethod
def jump():
print("@@@@")
# 在静态方法中可以访问静态属性 ,类名.属性名的方式就可以访问静态属性
print(Tiger.classname)
# @classmethod用来修饰这是一个类方法:cls指的是类本身
@classmethod
def a(cls):
print("这是一个类方法")
# 实例化对象可以访问静态方法、实例方法、静态属性、实例属性、类方法