知识卡片

泛化与可替换性

普通读书笔记卡 · 1942.f

内容

泛化把共性抽到超类型、差异放进子类型,如Customer拆出Personal与Corporate Customer。判断子类型是否合格的关键原则是可替换性(Liskov替换原则):用到Customer的代码换成Corporate Customer都应照常工作,调用者不需关心差异。继承是实现可替换性的常见手段,但带来不必要的包袱,因此有人区分子类型化(接口继承,只要求可替换)与子类化(实现继承)。

参考来源

- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第3章《类图:基础》(源文件:_epub-src/EPUB/2.xhtml) - 结论依据:原文明确"高效使用继承的一条重要原则是可替换性(substitutability)。在任何需要Customer的代码里面,应该能够替换为Corporate Customer,且一切工作正常",并说明"许多人喜欢区分子类型化(或接口继承)和子类化(或实现继承)"。 - 原始内容:高效使用继承的一条重要原则是可替换性(substitutability)。在任何需要Customer的代码里面,应该能够替换为Corporate Customer,且一切工作正常……(关于这方面的更多信息,参见Liskov的替换原则(LSP)[Martin])……许多人喜欢区分子类型化(或接口继承)和子类化(或实现继承)。