面向对象
一 面向对象思想
1. 面向过程.一切以事物的流程为核心.重点在'过程' 按照事物的发展流程.先干嘛,后干嘛,最后干嘛
优点 : 简单. 流水线式工作 编写比较简单
缺点 : 可扩展性差
2.面向对象 什么是对象? 对象即是属性和动作的集合体.对象是一个抽象概念.
重点在'对象' :属性和动作.类似上帝式思维
优点 : 可扩展性强(多态)
缺点 : 编写相对于面向过程比较复杂.上手比较难.
面向对象和面向过程各有千秋 , 各有各的好
二 面向对象如何编写
在代码中定义一个类,就相当于画图纸
class 类名:
pass
创建对象 : 类名()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class Car: # 出厂设置.(__init__) 构造方法 def __init__(self,color,pai,pailiang,own): #self 表示当前类的对象 # 绑定属性 self.color = color self.pai = pai self.pailiang = pailiang self.own = own # 车能跑 跑是一个动作 要写函数(方法) def run(self): # 当前类的对象 print('%s颜色的车在疯狂的跑'% self.color) def tiaogao(self): print('有一台%s颜色的车在疯狂跳高'% self.color) c1 = Car('红','京A66666','2.0T','alex') c1.run() # 对象.方法() c1.tiaogao()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
class HaoHan: def __init__(self,name,waihao,jineng): self.name = name self.waihao = waihao self.jineng = jineng def DaHu(self): print('%s%s在干老虎'%(self.waihao,self.name)) def shaSaoZi(self): print('%s%s在杀嫂子' % (self.waihao, self.name)) def tiTianXingDao(self): print('%s%s在替天行道' % (self.waihao, self.name)) wusong = HaoHan('武松','行者','喝酒') wusong.DaHu() wusong.shaSaoZi() wusong.tiTianXingDao()
1.构造方法:
def __init__(self,属性):
self.属性 = 属性 # 对象所拥有的共同特征
2.普通方法: # 将对象拥有的功能 类似于函数,不过改叫方法了
def 方法名(self,参数列表):
pass
self 表示当前类的对象 当前正在执行这个动作的对象.
对象.方法()
类名.方法(对象,参数)
总结 : 类与对象的关系 : 类是对事物的总结.抽象的概念 类用来描述对象 对象是类的实例化结果.对象能执行哪些方法 都由类来决定,类中定义了什么,对象就拥有什么
三 面向对象和面向对象过程的对比(代码,思想).
1. 装大象 脚本语言 面向过程比面向对象要简洁的多
1.1.面向过程
# 非函数式 print('打开冰箱门') print('装大象') print('关上冰箱门') # 函数式编程 def kaimen(): print('打开冰箱门') def zhuangdaxiang(): print('装大象') def guanmen(): print('关上冰箱门') kaimen() zhuangdaxiang() guanmen()
1.2.面向对象
# 面向对象 class Elphant: def open(self): print('大象会开门') def zhuang(self): print('把自己装进去') def close(self): print('把门关上') # 创建对象 e = Elphant() e.open() e.zhuang() e.close()
相比较而言 :面向过程要比面向对象简单
再有 有一个小猪 叫佩奇,今年40岁了,会使用必杀技嘴巴嘟嘟,他不光大战奥特曼,还会大战蝙蝠侠,蜘蛛侠.
2.1 面向过程:
# 函数式 def da_ao_te_man(name,age,jineng): print('%s,%s岁了,用技能%s打奥特曼' %(name,age,jineng)) def da_zhi_zhu_xia(name,age,jineng): print('%s,%s岁了,用技能%s打蜘蛛侠' %(name,age,jineng)) def da_bian_fu_xia(name,age,jineng): print('%s,%s岁了,用技能%s打蝙蝠侠' %(name,age,jineng)) da_ao_te_man('小猪佩奇','40','嘴巴嘟嘟') da_zhi_zhu_xia('小猪佩奇','40','嘴巴嘟嘟') da_bian_fu_xia('小猪佩奇','40','嘴巴嘟嘟')
2.2 面向对象:
class Pig: def __init__(self,name,age,jineng): self.name = name self.age = age self.jineng = jineng def da_ao_te_man(self): print('%s,%s岁了,用技能%s打奥特曼' %(self.name,self.age,self.jineng)) def da_zhi_zhu_xia(self): print('%s,%s岁了,用技能%s打蜘蛛侠' % (self.name, self.age, self.jineng)) def da_bian_fu_xia(self): print('%s,%s岁了,用技能%s打蝙蝠侠' %(self.name,self.age,self.jineng)) peiqi = Pig('小猪佩奇','40','嘴巴嘟嘟') peiqi.da_ao_te_man() peiqi.da_zhi_zhu_xia() peiqi.da_bian_fu_xia()
面向对象思想要稍微好于面向过程一些. 因此要根据不同的业务逻辑来决定用哪种思想
四 面向对象的三大特征:
1.封装: 把很多内容封装在一个对象中
2.继承:子类可以自动拥有父类中除了私有属性外其他所有内容 可避免写很多重复的功能和代码 即 x 是一种 y 的时候 x继承y
3. 多态