前言
这一节我们把python面向对象的知识综合在一起,包含了继承、封装、多态和抽象方法做一个小案例。
1.gif
part1 总体框架设计
一、案例介绍
通过一个界面,完成对老师和学生信息的增删改。在主体界面双击对应的学生或老师选项,可以打开明细窗口。
其实这个案例不使用面向对象的思想也可以做出来,但是使用面向对象的思想设计的代码风格会清晰易懂,功能更具模块化。项目需求不是很难,但是很考验大家对面向对象思想的深入理解。
二、类的总体设计
类的设计是否科学合理,决定了整个面向对象项目代码的质量。我们从四大块对该项目进行类的设计。
图片.png
工程项目文件:
屏幕快照 2021-03-17 21.39.27.png1. GUI界面设计思路
GUI主体界面依然采用Tkinter进行绘制,主体内容通过Treeview表格显示,常见的Label标签、Button按钮也都有涉及。
图片.png
明细界面:点击按钮或者点击表格内容都会弹出明细界面,
图片.png
因为学生明细界面和教师明细界面,界面几乎相同,我们让学生界面和老师界面都继承一个抽象的明细模板界面。
GUI结构框架.png
我们可以这样来设计:
明细窗体-->抽象成一个基类-->派生出学生明细、教师明细。
明细窗体设计思路
2. 数据存储设计思路
我们暂时还没介绍数据库知识,这里我们依然通过文本文件存储数据,初始化的时候通过文件来读取数据。
我们定义一个模块fileoperator.py
来处理文件的读写,其中定义File
类包含以下内容:
-
list_student_all
存储所有的学生信息 -
list_teacher_all
存储所有的教师信息
定义了两个方法: -
read_from_file
读取文件,用来填充list_student_all
和list_teacher_all
-
write_to_file
写入文件,对list_student_all
和list_teacher_all
修改后,写入到文件
图片.png
3. 对象属性封装
这里利用了继承和封装的知识,通过类传递多个属性,抽象出student和teacher的共有属性封装在基类Person中,其所具备的共有属性有:
姓名、手机号码、邮箱地址、性别、出生日期。
由Person派生出两个类:student和teacher
class student(Person):
def __init__():
学号,专业,入学时间
class Teacher(Person):
def __init__():
教师编号,职称,毕业院校,入职时间
4. 实现增删改的功能
我们写一个抽象的Service类,具备添加、修改、删除、校验的功能。然后分别派生出StudentService类和TeacherService类来实现这些方法。再单独定义一个Check类来分别对输入的数值进行校验。
图片.png
以上为我们整个类的规划,这只是我们自己的想法,未必是最优的,大家可以根据自己对面向对象的理解,自行设计类的规划。
最后
后续内容,会逐步完成窗体GUI的搭建、数据的存储、增删改功能的实现,敬请期待、届时我会给大家分享全部的源码和素材供大家练习使用。
网友评论