提起面向对象,自然会想到面向过程。面向过程程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,需要考虑周全解决问题的每个步骤。
而面向对象程序设计是一种解决代码复用的编程方法,这种方法把软件系统中相似的操作逻辑、数据和状态以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的目的。
下面举个例子说明面向对象和面向过程的区别:
# 面向过程:类似数学中求解问题的步骤,按照实现程序目的一步步按照步骤编写 # 1.创建学生字典 student = {'study_num':'201801','name':'Jack','credit':0,'course':[]} # 2.创建课程字典 course_1 = {'course_num':'01','name':'Python','credit':4} course_2 = {'course_num':'02','name':'Java','credit':4} course_3 = {'course_num':'03','name':'C','credit':4} # 3.创建学生选课函数 def choose_course(c): student['course'].append(c['name']) # 将课程名加到学生所选课程 student['credit'] += c['credit'] # 将课程学分加到学生总学分中 # 4.实现学生选课 choose_course(course_1) choose_course(course_2) choose_course(course_3) print(student) # 打印选课后的学生信息
运行后的结果为:
{'study_num': '201801', 'student_name': 'Jack', 'credit': 12, 'course': ['Python', 'Java', 'C']}
这就是面向过程实现思想。不知你有没有想过,上述代码存在一个问题:选课只能是学生选课,不能是课程选学生对吧?但是上述代码如果实现学生选课那里加一句choose_course(student)
,这时就会出现问题了。运行结果就会变成下面这种:
{'study_num': '201801', 'name': 'Jack', 'credit': 24, 'course': ['Python', 'Java', 'C', 'Jack']}
Jack是学生,显然不可以作为选课来选。此时最好的解决办法就是采用面向对象程序设计思路进行编程。使用面向对象思路实现上述问题时,可以将“学生”和“课程”分别看作两类对象,具体如下:
学生类:其特征包括学号、姓名、总学分和所选课程,行为包括选课; 课程类:其特征包括课程编号、课程名和学分。
# 创建学生类 class Student: def __init__(self,num,name,credit,course=[]): self.num = num self.name = name self.credit = credit self.course = course def choose_course(self,name,course,credit): self.credit += credit self.course.append(course) print('%s选的课程有:%s,学分为:%d'%(name,course,credit)) # 课程类 class Course: def __init__(self,num,name,credit): self.num = num self.name = name self.credit = credit # 实现学生选课 s = Student('201801','Jack',0) course_1 = Course('01','Python',4) s.choose_course(s.name,course_1.name,course_1.credit)
运行结果为:
Jack选的课程有:Python,学分为:4