OOP:基于类和原型,还有其他选择吗?

Gab*_*bák 5 oop programming-languages

我知道基于类和基于类型的面向对象编程语言,还有其他选择吗?这些是什么?

ewe*_*nli 3

这确实是面向对象语言背后的两种主要方法,我不知道还有另一个完全不同的基本原理。

但这两种方法都存在很多变体,以及许多其他编程语言结构,可以解决基于类或基于原型的语言中的重用/可扩展性。示例:特征、混合、扩展方法、部分类、泛型、一等槽、分割对象等。许多此类结构首先在研究论文(ECOOP、OOPSLA、POPL 会议)中提出,其中一些成为流行语言中的主流。但我将它们视为变体,而不是突破性的新基本原则。

但请注意,您可以用本身不是面向对象的语言来模拟面向对象的编程。例如,使用 Clojure多方法。面向对象和函数式编程也在慢慢融合,例如在 Scala 中。

编辑

实际上很难列出经典/开创性论文的清单,而且我不会假装拥有足够的知识来这样做。如果某个地方有这样一个,我会很有兴趣看到它:)不过,这里有一些您可能会感兴趣的。

继承、委托、子类型:

模块、组成、适配