一、面向过程编程
面向过程编程,负责完成某个具体任务的代码,可理解为函数,其核心是把要实现的事情拆分成一个一个步骤依次完成。
比如写ATM程序
ATM有存钱和取钱两个用途。
我们会按照顺序写出存/取钱的步骤,并定义出存钱和取钱的函数,假若我们要知道存/取钱的操作过程中的具体参数,比如哪个ATM执行的,该ATM属于哪个银行,纸币编号,ATM所属支行,纸币发行年份等等。一方面这些数据会增加函数参数的数量,传参过程中混在一起,不利于理解参数的含义;另一方面,代码清晰度也会因此降低。
二、面向对象编程
面向对象编程,以对象为核心,和过程不同的是,它并不聚焦存/取钱的过程,而是先考虑各个对象有什么性质(属性),能做什么事情(方法)。
1.对象的属性
比如写ATM程序
每个ATM都有自己的性质,包括编号、银行、支行,纸币也有自己的性质,包括编号、面值、发行年,我们可以提取出ATM、纸币的性质并定义ATM类和纸币类,用类创建对象,对象作为参数传入存/取钱函数中,也可以说属性是放在类里的变量。
面想对象的优点:
1.参数变少
2.用对象把相关属性绑定在一起
3.程序逻辑更加清晰,比如打印记录,面向过程编码需要传递一大堆信息参数 而面向对象编码可以通过对象来获取绑定的属性
2.对象的方法
比如写洗衣机的程序
执行洗衣服的任务,面向过程编码是按顺序写出步骤并定义放衣服、开机、清洗、烘干等函数,一步步执行完成任务的步骤;
面向对象编程是面向人和洗衣机,人和洗衣机都是执行事务的对象,定义出人和洗衣机作为类的方法,也可以说方法就是放在类里的函数。
3.面向对象还有三个被反复提及的特性:
1.封装
封装表示写类的人,将内部实现细节隐藏起来,使用类的人只通过外部接口访问和使用,比如现在要用洗衣机洗衣服,我们并不需要知道洗衣机的内部结构和程序如何,只需要通过操作界面按钮完成洗衣服操作,即封装。
2.继承
继承是指面向对象程序允许创建有层次的类,类可以有子类和父类,表示从属关系,比如相同品牌的某些洗衣机内部结构和程序相似,这些具体结构和程序作为父类;而具体的某款洗衣机作为子类,即继承。
3.多态
比如不同品牌洗衣机都能洗衣服,但它们洗衣服的方式不同,不管它们的洗衣服的方式是怎么样的,它们都是通过调用洗衣服的程序设定完成该任务操作,由于每个洗衣机洗衣服方法的所属类不同,执行不同的洗衣服方式,即多态。
内容整理自bilibili@林粒粒呀 python 26