什么是面向过程编程?
面向过程:
是一种编程思想,就是前辈程序员发现的一种比较好的编程方法
过程指的是: 先干什么 再干什么,完成一个事情所有的具体步骤;
优点:把复杂的问题流程化,简单化,降低开发难度
缺点:扩展差, 再当前这种情况下 用户需求千变万化 对扩展性要求非常高
使用场景:不需要扩展,或是对扩展性要求不高,例如linux内核,shell 脚本
案例: 把大象装进冰箱 需要几步
1.打开冰箱
2.装进大象
3.关闭冰箱
面向过程中我们关注的点是,完成这个任务,具体的步骤 一步一步去完成
什么是面向对象编程?
面向对象:
也是一种编程思想
核心是对象,什么是对象?
·····对象:再现实生活中实实在在存在的,具备自己的特征和行为的事物
反过来说 对象就是 特征和行为(技能)的结合体
如何来区分:如果能够准确的找到一个事物,它就是一个对象
例如:龚程的女朋友
面向对象编程:我们关注的点是.使用什么样的对象可以完成我的任务
例如:把大象装进冰箱,什么样的对象可以帮我完成这个任务,只要找到这个对象,命令它来做事情即可
你从一个操作者 变成了指挥者, 例如:西游记中的如来,他要完成一个传经,要把经书传到东土大唐取,
本来要自己去,但是太麻烦,所以找了唐僧师徒五个对象,来帮他完成这个任务
优势: 1.对于指挥者(程序员)来说,不需要再关心具体步骤
2.扩展性,一个单独的个体的特征或行为发生变化时 不会影响到别人
缺点: 1.程序的复杂度变高,你得需要设计这个些对象,注意要避免过度设计得问题
2.程序得执行结果可控性低
类与对象:
类与对象
类就是分类 类型的意思
定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在
先有类还是先有对象:
生活中:
生活中类怎么来的,是通过对象的特征和行为抽取而来,
所以是先有对象才有了类
编程中:
必须是先有类 才能有对象,因为你必须先告诉程序,你这个对象有什么样的特征和行为
类的作用:用于描述该类的对象具备什么样的特征和行为
实例:
'''实现下面输出
小明 ,10, 男 , 上山砍柴
小明 ,10, 男 , 开车去东北
小明 ,10, 男 , 最爱大保健
老李 ,90, 男 , 上山砍柴
老李 ,90, 男 , 开车去东北
老李 ,90, 男 , 最爱大保健
'''
#函数式 表达
def kuancai(x):
print('%s ,%s, %s , 上山砍柴'%(x['name'],x['age'],x['mondx']))
def kaiche(x):
print('%s ,%s, %s , 开车去东北'%(x['name'],x['age'],x['mondx']))
def dabaojian(x):
print('%s ,%s, %s , 最爱大保健'%(x['name'],x['age'],x['mondx']))
name1 = ['小明','10','男']
name2 = ['老李','90','男']
kuancai(name1)
kaiche(name1)
dabaojian(name1)
kuancai(name2)
kaiche(name2)
dabaojian(name2)
# 面向对象 表示:
class ZhuangBi:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def kanchai(self):
print('%s ,%s, %s , 上山砍柴' % (self.name, self.age, self.gender))
def kaiche(self):
print('%s ,%s, %s , 开车去东北' % (self.name,self.age,self.gender))
def dabaojian(self):
print('%s ,%s, %s , 最爱大保健' % (self.name, self.age, self.gender))
name1 = ZhuangBi('小明',10,'男')
name2 = ZhuangBi('老李',90,'男')
name1.kanchai()
name1.kaiche()
name1.dabaojian()
name2.kanchai()
name2.kaiche()
name2.dabaojian()
# 上述对比可以看出,如果使用函数式编程,需要在每次执行函数时传入相同的参数,如果参数多的话,
又需要粘贴复制了... ;
# 而对于面向对象只需要在创建对象时,将所有需要的参数封装到当前对象中,之后再次使用时,
通过self间接去当前对象中取值即可。
类与对象的简介:
类与对象:
类就是分类 类型的意思
定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在
先有类还是先有对象?
例(生活中):
生活中类怎么来的,是通过对象的特征和行为抽取而来,所以是先有对象才有了类
编程中:
必须是先有类 才能有对象,因为你必须先告诉程序,你这个对象有什么样的特征和行为
类的作用:用于描述该类的对象具备什么样的特征和行为
简单的使用:
class beidaStudent:
# 如果每个对象的这个属性都相同 才应该定义到类中 比如所有人的学校都是 北大
school = "北大xxx"
# 创建对象
# 语法: 在类名后加括号 与调用函数写法相同
stu = beidaStudent()
# 访问对象的属性
print(stu.school)
print(beidaStudent.school)
# 修改属性的值
stu.school = "清华xxx"
print(stu.school)
# 增加属性
stu.room_num = "A4B4"
print(stu.room_num)
# 删除属性
del stu.room_num
print(stu.room_num)
ps:# 对象的属性查找顺序
# 对象自己的名称空间 -> 类的名称空间
绑定方法:*****
class Person:
country = "China"
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def sleep(self):
print("sleeping")
print(self)
def eat(self):
print("eating")
"""
# 类调用与对象调用的区别
# 对于类而言 sleep就是一个普通函数
# 对对象而言 sleep是一个绑定方法
# 绑定方法是什么?
# 是对象与类中的某个函数的绑定关系
例如:就像生活中 我们都会吃饭 我吃饭你不会饱,那么吃饭就是我自己的绑定方法
# 为什么要把函数进行绑定?
# 因为对象的行为 通常都需要访问这个对象的数据 或是修改这个对象的数据
# 如果没有对象 直接调用函数是没有意义的 在函数中访问不到对象的数据
# 所以将对象和函数进行绑定
# 特殊之处
# 在使用绑定方法时 不需要关心self参数 会自动将这个对象本身传进来
# 对象调用绑定方法时 最后执行的还是类中的那个函数
"""
__init__函数:*******
# __init__称之为初始化函数 它会在创建对象的时候自动执行
# 创建对象时
# 1.创建一个空对象
# 2.执行__init__函数 并且自动传入了这个对象
# 该函数的作用,就是为对象的属性赋初始值
#1. 使用场景 需要为每个对象定制不同的属性值
#2.__init__在创建对象后自动执行
#3.第一个self参数 指的是这个对象本身 不需要手动传值
eg: a = A('小明',18)
这是的a 是 A的实例对象,同时A中__init__会执行,
假如
class A: def __init__(self,name,ageg): self.name = name self.age = age
需要注意的是: 上面的self 指的是 a,此时的 a 只是一个没有任何东西的 变量,当执行__init__方法的时候 把 变量 a 传入 self (可以理解为self = a) ,那么self.name == a.name,self.age == a.age
把A()参数传入 __init__,就有了 a.name = '小明' , a.age = 18.