我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈
面向对象设计原则
- 面向对象设计原则
- 面向对象遵循的原则:SOLID
- S(Single Responsibility Principle)
- O(Open Closed Principle)
- L(Liskov Substitution Principle)
- I(Interface Segregation Principle)
- D(Dependency Inversion Principle)
面向对象设计原则
面向对象遵循的原则:SOLID
S(Single Responsibility Principle)
- 单一职责原则
- 一个类只负责一项职责
- 好处
- 易于维护,写出高内聚的代码
- 易于代码复用
- 案例:计算器
- 假设只包含加减乘除运算和结果打印
- 如果往后需要增加:结果写入文件、结果参与其他运算、结果上传服务器…
- 是不是每一次都需要去修改此类?就导致这个类变得特别臃肿,不利于维护和部分代码复用
- 解决方案
- 计算器只包含,加减乘除运算以及结果返回
- 根据不同情况,将对结果的处理分散到其它合适的类别中
O(Open Closed Principle)
- 开放封闭原则
- 对扩展开放
- 对修改关闭
- 好处
- 易于维护,保证代码安全性以及扩展性
- 案例:在Person类中让小猫、小狗工作
- 假设小狗小苗的工作方法名分别是watch和catch,那么Person类中让宠物工作的方法就需要通过if进行多分支判定
- 如果以后,扩展了新的宠物类,那么Person类中的让宠物工作的方法,必须要跟着修改
- 解决方案
- 通过基类,以及抽象类等方案进行方法的统一
L(Liskov Substitution Principle)
- 里氏替换原则
- 使用基类引用的地方必须能使用继承类的对象
- 好处
- 防止代码出现不可预知的错误
- 方便针对于基类的测试代码,可以复用在子类上
- 案例:小鸟类
- 小鸟类作为父类,添加了一个共有特性:飞
- 子类:小燕子和鸵鸟,但是鸵鸟又没有这个飞的特性,此时在调用了飞的这个特性方法的地方就不能使用鸵鸟这个子类对象
- 解决方案
- 增加飞行类和不能飞行类继承自小鸟类,具体的小燕子和鸵鸟类再分别继承飞行类和不能飞行类
I(Interface Segregation Principle)
- 接口分离原则
- 如果一个类包含了过多的接口方法,而这些方法在使用的过程中并非"不可分割",那么应当把他们进行分离
- 所谓接口在Python中,可以简单的理解为"抽象方法"
- 好处
- 提高接口的重用价值
- 案例:小鸟类——吃、叫、飞属性
- 上述接口设计在有鸵鸟类的前提下,设计就不合理(鸵鸟不会飞)
- 解决方案
- 将吃和叫分离到一个类当中,把飞分离到另外一个类当中
D(Dependency Inversion Principle)
- 依赖倒置原则
- 高层模块不应该直接依赖低层模块
- 他们应该依赖抽象类或者接口
- 好处
- 利于代码扩展和维护
- 案例:电脑类
- 依赖的不是某一个具体鼠标类
- 而应该是,鼠标类的抽象
- 能单击、能双击、能右击、能移动鼠标指针…
- 到时,可以是触摸板、也可以是有线鼠标、也可以是蓝牙鼠标…