面向对象编程相关概念

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. 概念
1.1 面向过程和面向对象的通俗理解
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,
3、绘制画面,
4、判断输赢,
5、轮到白子,
6、绘制画面,
7、判断输赢,
8、返回步骤2,
9、输出最后结果。

把上面每个步骤用不同的方法来实现。

面向对象的设计则是从另外的思路来解决问题。

整个五子棋可以分为1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。

第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可见,面向对象是以功能来划分问题,而不是步骤。

面向过程的设计很可能出现不同的版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。

面向对象的设计中,不同可能只存在于某一个功能对象内部,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

1.2 面向过程和面向对象的优缺点
方法优点缺点
面向过程性能好难维护、复用、拓展
面向对象性能差易维护、易复用、易扩展
用面向过程的方法写出来的程序是一份蛋炒饭,而用面向对象写出来的程序是一份盖浇饭,形容的十分贴切。

到底是蛋炒饭好还是盖浇饭好呢?非要比个上下高低的话,就必须设定一个场景,否则只能说是各有所长。

盖浇饭的好处就是"菜"“饭"分离,从而提高了制作盖浇饭的灵活性。

饭不满意就换饭,菜不满意换菜。

用专业术语就是"可维护性"比较好,“饭” 和"菜"的耦合度比较低。

蛋炒饭
将"蛋”“饭"搅和在一起,想换"蛋”、"饭"中任何一种都很困难,耦合度很高,以至于"可维护性"比较差。

1.3 面向对象的特点(类,对象,实例,属性,方法)
对象:现实世界存在的任何事务都可以称之为对象,有着自己独特的个性。

类:具有同种属性的对象称为类,是个抽象的概念。

就相当于一个模具,定义了其包含的全体对象的公共特征和功能
“人”就是一类,其中有一些人名,比如小明、小红,这些都是对象。

实例:对象就是类的一个实例化。

小明就是人类的一个实例化。

在做程序的时候,经常要将一个变量实例化。

一般在做程序的时候不用类名,比如在叫小明的时候,不会喊“人,你干嘛呢?”,而是说的是“小
明,你在干嘛呢!”。

面向对象的思想就是把一切都看成对象,而对象一般都由属性+方法组成。

属性属性属于对象静态的一面,用来描述具体某个对象的特征,在类中通过定义变量来编写属性。

方法属于对象动态的一面,在类中通过定义函数来编写方法。

比如小志身高180M,体重70KG,这里身高、体重都是属性。

小明会跑,会说话,这些
跑、说话行为就是对象的方法。

我们把属性和方法称为这个对象的成员。

类属性和类方法:在类中定义的属性和方法,实例化的对象会继承类中的属性和方法。

实例属性和实例方法:实例化的对象可以额外定义专属于该对象的属性和方法。

这些属性和方法是该实例特有,而非从类中继承来的。

1.4 (类的)继承
实例继承类:实例继承类中定义的属性和方法,这是一种继承。

子类继承父类:子类继承父类中定义的属性和方法,如果从父类继承的属性和方法不能达到要求,可以在子类内进行改写,即属性和方法的重写。

类也可从其他类继承属性或方法,由此提高代码的重用性。

其中被继承属性的类称为超类(父类),继承属性的类成为子类。

当子类或实例调用某属性或方法时,python会搜索其父类或创建实例的子类是否具有该属性,并将该属性的值或方法返回。

而当父类和子类都对同一个属性或方法进行定义时,子类创建的实例将以子类的定义为准。

类的继承举例:
人类(在父类下本身就有“性别”“年龄””语言“”走路“等属性和方法)
学生类(继承父类方法和属性,该子类下可增加“分数”属性,“考试”方法等)
教师类(继承父类方法和属性,该子类下可增加“职称”属性,“教学”方法等)子类继承多个父类:子类继承多个父类中定义的属性和方法,举例:
“量化从业人员类”继承“金融类”和“python类”,继承多个父类中的属性和方法。

2. 代码示例
2.1 创建类、属性、方法
2.2 类的实例化,调用继承的类的属性和方法
可以由实例继承的方法必须有一个额外的第一个参数名称(惯例为 self),代表类的实例,而非类;self 代替了类的实例的位置,这个属性和方法在类的所有的实例中都可以调用。

class Human (): # 创建类
name = 'ZhangSan' # 定义类的属性;
sex = 'male'
def sing (): # 定义类的方法;注意,没有写self 实例形参
print ('can sing songs') xiaoming = Human () # 类实例化
xiaoming .name # 调用从类继承过来的属性
xiaoming .sex
xiaoming .sing () # 故意报错,无法直接继承普通的类的方法;
class Human (): # 创建类
name = 'ZhangSan' # 定义类的属性;
sex = 'male'
def sing (self ): # self 为实例形参,实际调用的时候不算参数
print ('can sing songs')
def write (self , word ):
print (word )
xiaoming = Human () # 类实例化
xiaoming .sing ()
xiaoming .write ('Hello World') # self 为实例形参,实际调用的时候不算参数,只需传入word
2.3 为实例添加属性和方法(实例属性和实例方法)
当一个实例创建后,新添加的实例属性不会影响创建他的类以及由同一类创建的其他实例。

(前提是属性不能是可变的)
查看类和实例的属性和方法
2.4 初始化方法(init):初始化实例属性
很多类都倾向于将对象创建为有初始状态的。

因此类可能会定义一个名为init的特殊方法(初始化方法)当用类产生新的实例时,会首先运行init函数,由此可以利用init函数设置实例默认的实例属性
初始化方法:初始化实例属性
2.5 面向对象编程的例子
2.5.1 面向对象编程:汽车(简单了解类,属性,方法)
2.5.2 面向对象编程:夏洛特普攻亚瑟(了解实例交互)
2.5.3 面向对象编程:人类和学生(了解子类继承父类)
2.5.4 面向对象编程:车-电动车-电池(了解将实例用作属性)
2.5.5 面向对象编程:了解多继承。

相关文档
最新文档