架构师训练营 - 第 2 周学习总结(1 期)
自盘古开天辟地至今已有六千三百余年,李老师视频训练营开课也进入第二周了。在这第二周的课程里,李老师带我们回顾了OOD的编程原则:
OOD 原则一:开/闭原则(OCP)
OCP - Open/Closed Principle
• 对于扩展是开放的(Open for extension)
• 对于更改是封闭的(Closed for modification)
• 简言之:不需要修改软件实体(类、模块、函数等),就应该能实现功能的扩展。
传统的扩展模块的方式就是修改模块的源代码。如何实现不修改而扩展呢?
• 关键是抽象!
OOD 原则二:依赖倒置原则(DIP)
DIP - Dependency Inversion Principle
• 高层模块不能依赖低层模块,而是大家都依赖于抽象;
• 抽象不能依赖实现,而是实现依赖抽象。
DIP 倒置了什么?
• 模块或包的依赖关系
• 开发顺序和职责
软件的层次化
• 高层决定低层
• 高层被重用
OOD 原则三:Liskov替换原则(LSP)
在 Java/C++ 这样的静态类型语言中,实现 OCP 的关键在于抽象,而抽象的威力在于多
态和继承。
• 一个正确的继承要符合什么要求呢?
• 答案:Liskov 替换原则
1988年,Barbara Liskov 描述这个原则:
• 若对每个类型 T1 的对象 o1,都存在一个类型 T2 的对象 o2,使得在所有针对 T2 编写的程
序 P 中,用 o1 替换 o2 后,程序 P 的行为功能不变,则 T1 是 T2 的子类型。
• 简言之:子类型(subtype)必须能够替换掉它们的基类型(base type)。
OOD 原则四:单一职责原则(SRP)
SRP - Single Responsibility Principle
• 又被称为“内聚性原则(Cohesion)”,意为:
Ø 一个模块的组成元素之间的功能相关性。
• 将它与引起一个模块改变的作用力相联,就形成了如下描述:
Ø 一个类,只能有一个引起它的变化的原因。
什么是职责?
• 单纯谈论职责,每个人都会得出不同的结论
• 因此我们下一个定义 :
Ø 一个职责是一个变化的原因。
OOD 原则五:接口分离原则(ISP)
ISP - Interface Segregation Principle
• 不应该强迫客户程序依赖它们不需要的方法。
ISP 和 SRP 的关系
• ISP 和 SRP 是相关的,都和“内聚性”有关。
• SRP 指出应该如何设计一个类 —— 只能有一种原因才能促使类发生改变。
• ISP 指出应该如何设计一个接口 —— 从客户的需要出发,强调不要让客户看到他们不需要
的方法。
盘古开天、女娲造人是以一生二,二生三,三生万物;李老师讲编程设计,乃是一(OOD)生五(OOD五原则),五生万物(Object),高屋建瓴、深入浅出,为编程界的盘古,开5个天外天;为程序员的女娲,再造n个架构师。身为其中一员,荣幸之至。思之,实乃天命使然,天将降大任(架构使命)于我。我板斧一挥,开出一个架构天地来......
评论