架构师训练营 - 第 2 周学习总结(1 期)

用户头像
阿甘
关注
发布于: 2020 年 09 月 22 日

自盘古开天辟地至今已有六千三百余年,李老师视频训练营开课也进入第二周了。在这第二周的课程里,李老师带我们回顾了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个架构师。身为其中一员,荣幸之至。思之,实乃天命使然,天将降大任(架构使命)于我。我板斧一挥,开出一个架构天地来......

用户头像

阿甘

关注

还未添加个人签名 2019.04.25 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营 - 第 2 周学习总结(1 期)