复习面向对象
面向对象:考虑问题从对象的角度出发
识别对象 分配职责 建立交互
三个特征:
封装:分而治之,变则疏之 [分]
继承:抽象、统一、隔离变化 [隔]
多态:体现子类个性(变化) [做]
六个原则:
开闭原则:能够增加新功能,不修改客户端代码.
单一职责:小而精,有且只有一个改变的原因
依赖倒置:使用抽象(爸爸),不适用具体(儿子)
组合复用:优先使用组合关系,不是继承关系.
继承:统一变化(交通工具约束火车汽车在运输的行为上是一致的)
组合:连接变化(人通过变量调用交通工具)
里氏替换:形参是父,实参可以是各种子类。
建议扩展重写
迪米特:通过抽象隔离调用(低耦合)
"""
基本的操作:增删改查
分配职责:
界面视图类View:负责处理界面逻辑,比如显示菜单,获取输入,显示结果等。
逻辑控制类Controller:负责存储学生信息,处理业务逻辑。比如添加、删除等
数据模型类Model:定义需要处理的数据类型。比如学生信息。
"""
list01 = []
# 增加
list01.append(10)
list01.append(20)
# 修改
list01[0] = 100
# 查询
print(list01[0])
# 删除
list01.remove(10)
del list01[0]
"""
基本调用
"""
class XXView:
def __init__(self):
self.controller = XXController()
def func01(self):
self.controller.func02()
class XXController:
def func02(self):
print("func02执行喽")
view = XXView()# 内部创建Controller
view.func01() # 内部调用func02
"""
模块
练习:
将student_info_manager.py分解为4个模块
-- bll.py --> 业务business 逻辑logic 层layer
存储Controller类
-- usl.py --> 用户user 显示show 层layer
存储View类
-- model.py --> 存储数据模型Model
-- main.py --> 存储入口代码
"""
# 建议设置项目根目录
# -- 在day14文件夹上,右键选择"Mark Directory as"
# -- 在选择"Sources Root"
# 导入方式1: 创建变量module01关联该模块
# 语法:
# import 模块
# 模块.成员
# 适合:面向过程的技术(全局变量、函数)
import module01
module01.func01()
# m01 = module01.MyClass()
# m01.func02()
# 导入方式2: 将该模块成员导入到当前作用域中
# 语法:from 文件名 import 内容
# 适合:面向对象的技术(类)
# from module01 import func01
from module01 import MyClass
# func01()
# m01 = MyClass()
# m01.func02()
# 导入方式3: 将该模块所有成员导入到当前作用域中
# 语法:from 文件名 import *
# 适合:面向对象的技术(类)
from module01 import *
func01()
m01 = MyClass()
m01.func02()
学生信息管理系统MVC
"""
学生信息管理系统MVC
"""
# 2.数据模型
class StudentModel:
"""
学生数据模型
对具体学生信息进行抽象
"""
def __init__(self, name="", age=0, score=0, sid=0):
self.name = name
self.age = age
self.score = score
# 学生编号:对数据进行唯一标识(全球唯一标识符)
self.sid = sid # 自增长1001 1002 1003
# 对某个数据进行有效性验证
@property
def score(self):
return self.__score
@score.setter
def score(