- 主要观点:探讨继承的利弊及为何仍在使用,追溯继承的起源及与其他概念的发展历程,思考能否以更好方式实现继承,如 Eiffel 语言中的相关尝试及存在的问题。
关键信息:
- 很多观点认为实践中继承有问题,但不排除其在其他情境下的作用,且未解释其最初为何流行。
- Graham 认为继承有三种含义:本体继承、抽象数据类型继承、实现继承,常规基于类的继承混淆了这三种类型,导致实践中使用困难。
- 继承源自 SIMULA-67,用于模拟软件,对其他对象语言有很大影响,而抽象数据类型(ADTs)进入广泛工业使用较晚。
- Eiffel 语言曾在 OOP 世界中很重要,几乎所有关系基于继承,有避免“菱形问题”的机制和代码合同等强大功能,但存在使类型系统不健全的“CATcall”问题。
重要细节:
- SIMULA-67 中继承的最早例子是用于建模客户订单和车间模拟。
- 抽象数据类型和模块等概念部分受继承存在的影响而产生。
- 大多数工业语言虽有“模块”但并非真正的模块,多为命名空间。
- 目前主要有接口、特质/混入和继承这几种关联类的方式。
- 四年前写的关于继承的文章,之后又写了探讨何时更倾向于继承而非组合的文章。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。