1,基本理论
1,什么是对象
a,在python中,一切皆对象
b,在实际生活,对象是一个具体的物体,这个物体拥有属性和行为
- 举例:王二小
- 属性:姓名 年龄 性别
- 行为:走路 吃饭 睡觉
c,python中的体现
python是一门特别彻底的面向对象编程(OOP)的语言,在python中,也就是一切皆对象!
解释:
在python中,0、0.1、True、[1,2,3]等都是对象,而它们对应的Int类型 Float类型 Bool类型 list类型都是对象类型
2,面向过程&面向对象
1,共同点
都是解决问题的一种思路
2,面向过程
在解决问题的时候,把解决问题的步骤拆解,关注的是解决问题的每一个过程(步骤)
但是随着程序的增加,过程变得越来越复杂,变的不容易维护,一旦过程需要调整,修改十分麻烦,甚至很多代码都要重写
3,面向对象
在解决问题的时候,关注的是解决问题所需要的对象,面向对象本身是对面向过程的封装(实际步骤并没有减少,本质是把拆解的步骤根据不同的功能特性区分开,然后根据功能特性去找不同对象(的方法,确定属性和行为)解决
4,例:针对做好饭然后洗碗
面向过程:
洗菜->点火->放菜->翻炒->称出->放水->倒洗洁精->开始刷->摆放好
面向对象:
你可以去找一个对象A,这个对象A有两个技能,分别是做饭和洗碗,所以就可以组合成:
- 对象A:(技能1)做饭->(技能2)洗碗
又可以拆分成:
- 对象A:洗菜->自动炒菜机->称出->放水->自动洗碗机->摆放好
也就是说,对象A又可以把点火->放菜->翻炒这三个步骤利用自动炒菜机完成
把 倒洗洁精->开始刷 这两个步骤利用自动洗碗机完成
总结:
你可以把任务分给对象A去操作,对象A有2个技能,对象A也可以分解任务,分别交给自动炒菜机和自动洗碗机去操作,与面向过程不同的是,面向对象只需要去找到对象去解决对应的问题即可(类似包工头)
3,面向过程->面向对象思想转变
1,列举出任务具体的实现步骤
2,试图分离这些实现步骤中的功能代码块
3,将这些功能代码,划分到某一个对象中
例:把点火->放菜->翻炒这几个步骤(功能)划分到自动炒菜机中(对象)去
4,根据这个对象以及对应的行为,抽象出对应的类
例:那自动炒菜机怎么来的,是厂家生产的,需要确定出厂时的规格比如长宽高、重量(属性),以及比如点火、放菜、翻炒等的能力(行为),这些都是一开始设计好的,设计好原型之后才能和根据设计图纸去创造这个自动洗碗机
这里也是一样的,把功能(点火、放菜、翻炒等)划分到对象(自动炒菜机)中了,接下来需要抽象对象,来找出这个对象所具备的属性和行为,这就是设计类的过程