面向对象语言中没有类概念的语言

14

我正在阅读Scala介绍论文,发现以下声明:

应该注意到,有些面向对象的语言没有类的概念。

问题:哪些面向对象的语言没有类的概念,并且它们如何处理类型(类)- 对象(类型实例)的关系?


答:一些面向对象的语言,如Javascript和Lua,没有类的概念。在这些语言中,对象是基于原型(prototype)创建的。一个原型可以看作是一个对象或者类的模板,其他对象通过继承原型来共享属性和方法。因此,在这些语言中,类型与对象之间的关系不是基于类的,而是基于原型的。

10
JavaScript中采用原型继承(Prototype-based programming)。 - deceze
你的问题应该有合理的范围。如果你能想象一本完整回答你问题的书,那么你的要求就太高了。 - deceze
Perl 5 bless。我不知道它叫什么。 - senia
1个回答

6
尽管在流行语言中将它们混为一谈很常见,但类和类型是不同的概念。类应该被理解为对象的蓝图,定义了类的实例所拥有的属性和方法,但(对象)类型是一个接口,描述了可以使用什么参数调用哪些方法。
因此,很容易想象没有类的语言。你只需要一些用于创建对象并给(新)对象属性和方法的构造,JavaScript就是一个众所周知的例子。在这样的语言中,继承看起来有点不寻常,但肯定可以做到(例如参见Antero Taivalsaari的文章“关于继承概念的阐述”)。

它并不混淆。类就是类型,但并非所有类型都是类。 - Ingo
2
一些编程语言将类视为类型,但从概念上讲它们是正交的概念。 - ibid
我并不谈论编程语言如何"处理"它们,而是谈论它们的本质。你说:对象的蓝图。嗯,我可以说类型是值的蓝图,对象是这些蓝图指导下的特定值,因此类就是类型。 - Ingo
@ewernli,子类型不同于子类 - 但我们不能因此得出类不是类型的结论。我们不应该混淆语言提供的机制(如继承等)与类的概念。它们仍然是元组或记录的一种特殊形式,如果您更喜欢这个术语的话。 - Ingo
在W. R. Cook的论文中,我理解到在许多情况下,继承并不等同于子类型化。但是他也说过"类是类型",所以你能详细解释一下你所说的隐喻:"类和类型在概念上是正交的"吗? - Ta Thanh Dinh
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接