在编程中,一般存在两种编程思想:
- 面向过程:是以过程为中心的编程思想。
- 面向对象:是对象及其之间的交互为中心的编程思想。
为什么要学习面向对象技术?
- 计算机编程技术是逐步发展过来的。面向对象技术的发展,也是伴随着计算机计算能力的提升,以及计算机在其他领域的应用,而发展起来的。
- 面向过程开发过程中的特点,很适合“科学运算领域”。目的明确,变化较少,注重拆解的过程,关注运算效率。
但是随着计算技术在“现实世界的模拟”等领域的应用,面临着新的问题与需求:
- 事物的抽象是开放的,未来会根据需要进行调整 (适应变化的需要)
- 业务流程不仅仅关注执行的过程,还关注事物间的关系 (适应抽象的需要)
- 业务需求庞大的时候,项目周期的瓶颈在于开发时间,而不局限在运行效率上 (适应效率的需要)
思维方式的转变:
- 面向对象是相对于面向过程的,比如你要充话费,你会想,可以下载支付宝,然后绑定银行卡,然后在手机充值页面自己充值,这种就是面向过程。
- 但是对于你女朋友就不一样了,她是面向“对象”的,她会想,谁会帮她充话费呢?第一个想到的当然是你了,她就给你电话,然后你把之前的做了一遍,然后她收到话费到帐的短信,说了句:谢谢亲爱的!这就是面向对象!女生的部分思维是面向“对象”的!她不关心处理的细节,只关心谁可以完成某件事情。
比较维度 | 面向过程 | 面向对象 |
---|---|---|
背景 | 科学计算为目标 | 软件系统开发 |
编程方法 | 自顶向下 . | 自底向上 |
代码结构 | 程序=数据+算法(函数/过程) | 程序=对象+交互 |
数据操作主体 | 函数/过程中 | 对象的方法中 |
模拟方法 | 通过函数操纵表现世界的数据和状态 | 把世界描绘成具有主动性的对象间的交互 |
编程思维 | 处理数据的步骤 | 面向对象分析 |
运行效率 | 较高 | 稍低 |
大规模开发效率 | 较低 | 较高 |
类和对象的定义和调用
#定义"车"类
class Car: #定义类: Class 类名:
energy = "电动" #属性,表特征
def move(self): #方法,表行为 #self 默认参数,c既是self指代内容
print("在移动...")
#定义车
c = Car() #对象实例化: 对象名称 = 类名()
print("能源类型:",c.energy) #访问属性: 对象名称.属性
c.move() #调用方法: 对象名称.方法
- 在属性的表述上,可以将c.energy理解为"车辆实例c的能源类型",符号".“可以表述为"的”
- 在方法的调用上,可以将c.move()理解为"车辆实例c在移动",符号".“可以表述为"在做…”
- 通常,我们将属性命名为"名词";方法命名为"动宾结构"。
类名一般开头字母大写
属性和方法的命名同样遵循变量的命名规则,建议使用驼峰命名法(开头字母小写,后面的每个单词开头字母大写)
类和对象简单区分
- 类:具有相同属性的一类事物
- 类是抽象的,规定了具体对象的特征和行为
- 对象:也被称为实例,将类中定义的特征具体化(赋值),就是一个对象或实例
面向对象 | 面向过程 |
---|---|
属性(特征) | 变量(状态) |
方法(行为) | 函数(操作) |