代码之家  ›  专栏  ›  技术社区  ›  Gabriel Ščerbák

面向对象:基于类和基于原型,还有其他选择吗?

  •  5
  • Gabriel Ščerbák  · 技术社区  · 15 年前

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

    4 回复  |  直到 15 年前
        1
  •  1
  •   ewernli    15 年前

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

    但是有一个 很多变体 两种方法,以及许多 其他编程语言构造 这解决了基于类或基于原型的语言中的重用/可扩展性问题。例如:traits,mixin,extension methods,partial class,generics,first-class slots,split objects等。许多这样的结构是在研究论文(ecoop,oopsla,popl会议)中首次提出的,其中一些已经成为流行语言的主流。但我认为他们 变化 而不是作为开创性的新的基本原则。

    尽管如此,还是要注意 模拟面向对象编程 在非面向对象的语言中 本身 . 例如,使用clojure multi-method . 例如在scala中,面向对象编程和函数编程也在缓慢地融合。

    编辑

    写一份经典/开创性的论文清单其实很难,而且我也没有假装有足够的知识去做。如果某处有一个,我会很感兴趣地去看:)不过,这里有几个可能会让你感兴趣的。

    继承、委托、子类型:

    模块,组合,改编

        2
  •  2
  •   Justin Ethier    15 年前

    mixin允许您使用在其他地方(如模块中)定义的代码扩展类。

    Ruby Mixin Tutorial 作为介绍。

        3
  •  1
  •   LukáÅ¡ Lalinský    15 年前

    go有一个类似于类的概念,但是没有继承,接口非常灵活。你可以在 Effective Go .

        4
  •  0
  •   bryanjonker    15 年前

    你可能想看看维基百科关于编程范例的文章。我所使用的是面向方面的编程,这就是mixin的来源。

    http://en.wikipedia.org/wiki/Programming_paradigm