面向对象编程的几个原则以及我的理解
简称SOLID
单一职责原则 (SRP):
每个类应该只有一个职责,避免承担过多功能。
开放-关闭原则 (OCP):
软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
我的理解: 新增功能的时候, 是新增函数就能实现(即可以扩展), 而不是要修改已有函数才能实现, 因为修改已有函数, 会改变函数行为, 导致已经依赖此函数的其他模块的行为不可预测. 说到底,就是你改你的就别影响别人.
里氏替换原则 (LSP):
子类应该能够替换父类而不影响程序的正确性。
我的理解: 子类应保持父类函数的意图.
接口隔离原则 (ISP):
不应该强迫客户依赖他们不需要的接口。
我的理解: 因为接口内所有函数都是是必须实现的(C++?), 所以如果定义的一个接口里有太多要实现的函数, 客户(底层模块)又不需要, 就不胜其烦. 所以接口作为系统平台, 紧密关联的一组函数可以作为一个接口, 而相对独立的作为另一个接口, 客户可以选择实现哪个.
依赖倒置原则 (DIP):
高层模块不应依赖于低层模块,两者都应依赖于抽象(接口)。
我的理解: 接口相当于系统平台, 而模块无论是高层还是低层, 都相当于和平台打交道的人. 没有系统平台的情况下, 人和人直接打交道,无论是上下级(DIP原则说的是上下级)还是平级, 都可能是不规范的, 随时会变更自己交给别人的数据形态的, 这样一个人提交的数据变了另一个人即使没做错任何事都得跟着变, 就很讨厌. 通过系统平台, 就不会把变化溢出到其他人那里.
具体到实现, 就是无论高低层模块, 都与接口打交道, 低层实现接口, 高层调用接口, 而不是直接调用低层的类.