面向对象程序设计入门

提起面向对象,自然会想到面向过程。面向过程程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,需要考虑周全解决问题的每个步骤。

而面向对象程序设计是一种解决代码复用的编程方法,这种方法把软件系统中相似的操作逻辑、数据和状态以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的目的。

下面举个例子说明面向对象和面向过程的区别:

  • 编写程序模拟学生选课,每选一门课程,将课程名加到学生的所选课程中,同时将课程的学分累加到学生的总学分中。
# 面向过程:类似数学中求解问题的步骤,按照实现程序目的一步步按照步骤编写
# 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
上一篇:你真的会写java吗?


下一篇:java实体类区别