面向过程vs面向对象
什么是面向过程?
相信大家都知道C语言是面向过程语言,C++则是面向对象语言。C语言通常是我们接触的第一门编程语言,它的重点在于数据结构的设计和一步步实现算法,即“如何通过一个过程,对输入进行运算处理得到输出”。
假如我们现在要开发一个把大象装进冰箱的程序,我们需要做哪些工作?
- 分别设计大象和冰箱的数据结构。
- 设计一个“把大象装进冰箱”的函数(包括如何计算大象体积、重量等,如何将大象打包进冰箱、开关冰箱等等)。
什么是面向对象?
面向对象即以对象为核心,把对象作为基本的结构单元,将重点放在对对象的抽象和拓展。
同样设计一个把大象装进冰箱的程序,我们需要做什么?
- 设计一个大象类(包括大象的各项特征值,如何将大象打包进冰箱等)。
- 设计一个冰箱类(包括如何开关冰箱门等)。
虽然面向对象和面向过程中都有“如何把大象装进冰箱”这一核心算法,但是面向过程的代码无法复用,效率较低。假设我们不仅要将大象装进冰箱,还要将其他动物装进冰箱,这时就可以利用面向对象中的继承特性,设计一个animal类。
Python面向过程vs面向对象
面向过程
student1 = {'name':'Bob','age':21}
student2 = {'name':'Alice','age':22}
# 定义一个函数输出两个学生信息
def print_info(student):
print('姓名:%s,年龄:%d' % (student['name'],student['age']))
# 输出某一个学生的信息
print_info(student1)
print_info(student2)
先定义学生的数据结构再设计输出学生信息的函数,最后打印。是很典型的“输入+处理+输出”模式。
面向对象
class Student(): # 定义一个类
def __init__(self,name,age,weight):
self.name = name
self.age = age
self.__weight = weight #加下划线是不想被外界访问,只能通过函数访问(类的封装)
def info(self): # 定义一个方法
print('姓名:%s,年龄:%d,体重:%d' % (self.name,self.age,self.__weight))
def change_age(self,new_age): #所有方法的第一个参数一定是self
self.age = new_age
self.info()
定义学生类,设计构造方法、输出学生信息的方法与改变学生年龄的方法,重点放在了对象(即学生类)的抽象上。
student1 = Student('John',22,65) # 类的实例化
student2 = Student('Lisa',24,57)
student1.info() #打印学生信息
student2.info()
student2.change_age(38) #改变学生年龄并输出
student1.change_age(13)