1 前言
相信小伙伴们经常能听到两个高大上的词汇:面向对象编程和面向过程编程。纳尼,不就编程吗?为啥还分的这么细呢?还面向对象?面向过程?究竟是个啥子意思?下面就跟随小编的视角一起来看看这对双胞胎兄弟究竟是个什么鬼!
2 通俗定义
如果把面向对象和面向过程比喻成一对双胞胎兄弟的话,那么这两人的性格那就完全不同了,有什么不同呢?
- 面向对象编程(哥哥):非常聪明,希望能一劳永逸!追求极致的简单,效率!
- 面向过程编程(弟弟):踏实勤劳肯干!一步一步的做事情!事必躬亲!(咋想到了诸葛亮…)
从上面的描述,小伙伴可能看的一头雾水,下面就举个生动的例子来帮助大家更好的解释吧!
假如现在妈妈安排任务给这对兄弟:“你们俩下午把房间打扫干净哦!”这时候,兄弟俩针对如何打扫房间就会有争议了,由于他们性格不同,故采取的策略也不同!究竟有什么不同呢?
1、面对对象编程:
- 面向对象就是将编程当成是一个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。
- 面向对象就好像你只要通知扫地机器人打扫房间,即发一个消息就可以了,至于机器人怎样打扫,是不用知道的。
- 代码示例1:这里创建的扫地机器人就是Lee!
class Clean(object):
def __init__(self, step_1, step_2, step_3):
self.step_1 = '擦地板'
self.step_2 = '擦窗户'
self.step_3 = '整理空间'
def clean(self):
print('%s, %s, %s' % (self.step_1, self.step_2, self.step_3))
# 创建实例
Lee = Clean(1,2,3)
Lee
<__main__.Clean at 0x111c960b8>
# 调用函数 clean
print('开始打扫')
Lee.clean()
print('打扫结束!嗨起来!')
开始打扫
擦地板, 擦窗户, 整理空间
打扫结束!嗨起来!
代码示例2:查询学生的成绩!
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print('%s, %s' % (self.name, self.score))
# 创建实例Lee
Lee = Student('Kun Lee', 100)
print('开始查询')
Lee.print_score()
print('查询结束')
开始查询
Kun Lee, 100
查询结束
2、面向过程编程
- 面向过程就是将编程当成是做一件事,要按步骤完成,每一步就是一个过程。比如打扫房间这件事,需要先擦地板,然后擦窗户,最后整理空间。
- 面向过程就好像自己去打扫房间,所以要讲究步骤。
- 代码示例:这里就需要依次执行3个函数!
def step_1():
print('擦地板')
def step_2():
print('擦窗户')
def step_3():
print('整理空间')
# 依次调用上述函数
print('开始打扫')
step_1()
step_2()
step_3()
print('打扫结束!嗨起来!')
开始打扫
擦地板
擦窗户
整理空间
打扫结束!嗨起来!
代码示例2:
面向过程可以用一个字典来存储学生的成绩:
std1 = { 'name': 'Kun Lee', 'score': 100 }
std2 = { 'name': 'Bob', 'score': 81 }
创建查询成绩函数:
def print_score(std):
print('%s: %s' % (std['name'], std['score']))
然后查询即可!
3 官方定义
-
面向对象的程序设计:
- 把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息,计算机程序的执行就是一系列消息在各个对象之间传递。
- 总的来说面向对象是将事物高度抽象化,面向对象必须先建立抽象模型,之后直接使用模型就行了
- 面向对象的抽象程度比函数要高,因为一个Class既包含数据,又包含操作数据的方法。
-
面向过程的程序设计:
- 把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。
- 面向过程是一种自顶向下的编程