开发者学堂课程【Python入门 2020年版:面向对象的介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/639/detail/10366
面向对象的介绍
内容介绍:
一、面向过程编程
二、面向对象编程
三、面向对象基本概念
一、面向过程编程
面向对象是什么?
在我们学习面向对象之前,我们曾学到一个概念,叫面向过程。
其实以前写的这个代码,都是面向过程的一个代码,面向过程就是根据业务逻辑从上到下的写代码,就把这个代码一行行写。
而面向对象,就是把变量与函数绑定在一起,分类进行封装,每个程序只需要负责分给自己的分类,这样就能够快速的开发接口的代码的代码的编辑量。
这个意思是里面的那些过程,大家最容易接受。因为面向过程的代码是非常简单的,一步一步走的。
新建一个 python 文件命名为05-面向过程,写入代码:
while True:
print
(“””------------------------
名片管理系统-v1 0
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
--------------------------“”“)
operator = input(‘请输入要进行的操作(数字)’)
运行后会得到结果:
现在需要把用户所选择的选项进行对应的操作,代码内容为:
def add_user():
pass
def dal_user():
pass
def modify_user():
pass
def query_user():
pass
def show_all():
pass
def start():
while True:
print(
“””------------------------
名片管理系统-v1 0
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
--------------------------“”“)
operator = input(‘请输入要进行的操作(数字)’)
if operator == ’1’:
add_user()
elif operator ==
’2’:
del_user()
elif operator ==
’3’:
modify_user()
elif operator ==
‘4’:
query_user()
elif operator ==
’5’:
show_all()
elif operator ==
’6’:
pass
else:
print
(‘输入有误,请重新输入……’)
这段代码中,开始就是一个死循环,其次是让用户输入一个数字,每一个数字都有对应的操作,每一个操作有对应的函数。这个代码就是面向过程的写法,即在做一件事,一个操作对应一个行为。
将 while True 之后的内容都放在 def start()函数中,整个程序由 start 函数开始,start()函数启动后会根据所选择的数字会选择函数
在最后加入之前学的
if __name__ == ‘__main__’:
start()
代码整体变为:
def add_user():
pass
def dal_user():
pass
def modify_user():
pass
def query_user():
pass
def show_all():
pass
def start():
while True:
print
(“””------------------------
名片管理系统-v1 0
1:添加名片
2:删除名片
3:修改名片
4:查询名片
5:显示所有名片
6:退出系统
--------------------------“”“)
operator = input(
‘请输入要进行的操作(数字)’)
if operator ==
’1’:
add_user()
elif operator ==
’2’:
del_user()
elif operator ==
’3’:
modify_user()
elif operator ==
‘4’:
query_user()
elif operator ==
’5’:
show_all()
elif operator ==
’6’:
pass
else:
print(
‘输入有误,请重新输入……’)
if __name__ ==
‘__main__’:
start()
整个代码处于结构清晰的状态,它有一个总的 start 入口,start 启动之后,对于每一次的点击都会有一个操作,这整个代码在具体写操作的时候把每一个函数补充完整。这种每一步开发的过程都能看到叫做面向过程开发
二、面向过程编程
面向过程编程的关注点在于怎么做
把完成某一个需求的 所欲步骤 从头到尾 逐步实现
根据开发需求,将某些 功能独立的代码封装成一个又一个函数
最后完成的代码,就是顺序的调用不同的函数
特点:
注重步骤与过程,不注重职责分工
如果需求复杂,代码会变得很复杂
开发复杂项目,没有固定的套路,开发难度很大!
下图中,主函数是一个入口,当它启动之后,每一个会自动调用下面的函数,通过函数调函数,函数套用函数的形式。前面的例子是在 start 函数中调用每一种函数这就是面向过程的开发
三、面向对象基本概念
面向对象编程( Object Oriented Programming ,OOP,面向对象程序设计)和面相过程编程,是两种不同的编程方式。
面向对象编程的关注点在于谁来做
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
在完成某一个需求前,首先确定职责——要做的事情(方法)
根据职责确定不同的对象,在对象内部封装不同的方法(多个)
最后完成的代码,就是顺序地调用不同对象的相应方法。
特点:
注重对象和职责,不同的对象承担不同的职责。
更加适合应对复杂的需求变化,是专门应对复杂项目开发,提供的固定套路。
需要在面向过程基础上,再学习一些面向对象的语法。
如果将之前的例子改为面向对象开发,就不是把 start 中的函数进行调用,而是找到一个对象来去完成,语法上会发生变化,基本的思想不会差太多。需要把调用的函数封装起来,创建一个类,根据类来创建一个实际的对象出来。然后就在 start 中直接调用对象的方法来完成操作。
如下图中的这款游戏,按以前的想法,需要了解到花、僵尸、以及豌豆都在做些什么,这种做法相对来说是麻烦的。
在写这段代码的时候,如果使用面向过程就比较麻烦,但如果使用面向对象就较为简单。
在做这个游戏的时候,要考虑许多东西。按照面向对象的思想需要先分类,大方向上是两类,植物和僵尸,在对每一类分为特征和行为。植物的特征分为 hp(血量)、cost(所花费的太阳)、position(在图上的位置,需要建立一个坐标轴);行为有 shake(会摇动)。植物中又会被分为 ProtectPlant 和 AttackPlant,而从 Plant 指向这两种的关系叫做继承。
AttackPlant 又具备 damege(伤害值)、attack_cd(攻击间隔时间)的特征和 attack()行为。在这以类图的形式进行呈现:
分析到目前为止,可以看到这个代码也没有特别复杂。整个界面就分为两部分,左边的是植物部分,右边的是僵尸部分。
它实际上所要写的分支是特别多的,需要大量的人力共同完成,在这不详细说明,只用明白这个所体现的思想。会有专门的工具叫类图,来完成这种分析,它最后会详细到每一个对象,同一个事物有几个就会有对应的几个对象,然后使用这个类来创建对象。
所以这里使用面向对象思想书写代码,还是具有一定的可行性。每一个类中对象都会具有一样的特征和行为。
图中的每一个对象就会使用一个类来创建对象,同一个事物有几个即创建几个对象,每增加一个就需要新建一个对象。
僵尸也是一样的,每来一个僵尸就会有一个类,每一种僵尸都要创建对应的类,如果需要哪一种僵尸,就创建哪一种类图下的对象,需要几个僵尸就创建几个对象,就是面向对象思想。就是通过类创建对象,在创建对象的时候还要为类创建属性。