预习
面向对象编程——OOP,是一种以对象为中心的程序设计思想 面向过程编程———POP,是一种以过程为中心的程序设计思想
问题:把大象装进冰箱,需要几步? 小品的答案:三步 第一步:打开冰箱门 第二步:把大象装进去 第三步:关上冰箱门
面向过程编程
上面给出的答案就是面向过程的,分析解决问题的步骤,然后一步步的实现
面向对象编程
是通过分析问题中需要的抽象模型,然后更具需要的功能分别去创建对象,最终由模型对象来完成程序
首先面向对象要解决这个问题,需要先建立出抽象模型,比如:打开冰箱和关闭冰箱,这都术语一个冰箱的功能,大象走进去,这就是大象的功能。到此时抽象出两个抽象模型,冰箱和大象。 冰箱具有打开和关闭的功能,大象具有走路的功能。 分析到这里,就是面向对象的思想,具体完成的话,就是去创建冰箱和大象这两个对象,最终完成这个程序,冰箱对象—开门,大象对象—走进冰箱,冰箱对象——关门。
总结
面向过程
面向过程的核心是过程,过程就是指解决问题的步骤。
优缺点
- 优点:将负责的问题流程化,进而实现简答化
- 缺点:扩张性差(更新、维护、迭代)
总结:在去完成一些简单的程序时,可以使用面向过程去解决,但是如果有复杂的程序或任务,而且需要不断的进行迭代和维护,那么肯定优先选择面向对象的编程思想。
面向对象
面向对象的核心是对象,是一个特征和功能的综合体
优缺点
- 优点:可扩展性高
- 缺点:编程复杂度相对面向过程高一些,指的是计算机在执行面向对象的程序时的性能表现
面向对象中的一些名称(术语)
类:类是对象的一个抽象的概念 对象(实例):对象就是由类的创建的实例 类和实例的关系就是 膜具和铸件的关系
- 类是由对象总结而来的,,总结的这个过程叫做抽象
- 对象是由类具体实施出来的,这个过程叫实例化
如果还有一些模糊,请思考: 水果是一个对象还是一个类? 汽车是一个对象还是一个类? 手机是一个对象还是一个类?
OOP—基本实现
如果需要实例一个对象,那么需要先抽象一个类
例如需要创建一个汽车对象 首先需要抽象一个汽车类,汽车类就相当于一个设计图纸一样。 由这个设计图纸去创建(实例)出来的真实汽车就是一个对象。
如何创建一个类,通过class关键字来定义一个类 示例:
class car():
pass
类中需要声明声明内容?
'''
类名的书写规范,建议使用驼峰命名法
大驼峰:MyCar AoDi
小驼峰:myCar aoDi
一个类有特征和功能两个概念组成:
特征就是一个描述: 颜色:黑色,品牌:奥迪,排量:2.4
功能就是一个能力:拉货,兜风
特征在编程中就是一个变量,在类中称为 属性
功能在编程中就是一个函数,在类中称为 方法
类中属性一般定义在前面,方法定义在后面
'''
class Car():
color = '白色'
brand = '奥迪'
pailiang = 2.4
def lahuo(self):
print('奥迪能拉货')
def doufeng(self):
print('奥迪能兜风')
def pianmeimei(self):
print('开奥迪能骗妹妹')
aodiobj = Car()
aodiobj.lahuo()
print(aodiobj.brand)
对象成员的操作
class Car():
color = '白色'
brand = '奥迪'
pailiang = 2.4
def lahuo(self):
print('奥迪能拉货')
def doufeng(self):
print('奥迪能兜风')
def pianmeimei(self):
print('开奥迪能骗妹妹')
a = Car()
b = Car()
''''
一个类可以实例化多个对象
以上的a和变量都是对象,也都是通过car这个类实例化出来的对象,
但是a和b是两个对象,相同之处就是由同一个类实例化出来
<__main__.Car object at 0x000001AE5E3D2FD0>
<__main__.Car object at 0x000001AE5E3D2FA0>
'''
a.color = '黑色'
a.name = 'W11111'
print(b.color)
del a.brand
del a.name
'''
#思考一个问题: brand属性不能删除, 但是name属性可以删除,为什么?
删除一个对象的属性时,只能删除当前这个对象自己的属性才可以,
上面例子中的brand属性并不是a对象自己的属性,而是属性Car这个类。因此不能删除
而name这个属性,是单独给a对象添加的属性,因为可以删除
'''
def func():
print('这是一个新的方法')
a.lahuo = func
a.fun2 =func
del a.fun2
del a.lahuo
del a.doufeng
a.fun2
'''
总结:
一个类定义类成员属性和成员方法,那么通过这个类实例化的对象,也具备这些方法和属性吗?
实际上,创建对象的时候,并不会把类中的属性和方法复制一份给对象,而是在对象中引用父类的方法
因此在访问对象的属性时,会先去找对象自己的属性,如果没有就去找这个类的属性和方法
类的方法.
一个对象由类创建以后,是一个独立的对象,会引用父类中的属性和方法
如果在对象创建后,给对象的属性或方法,进行修改或添加,那么此时等于给这个对象创建了一个自己的属性和方法
所以在删除时,只能删除对象被修改或添加的成员
'''
|