9

我目前正在 Squeak 环境中学习 Smalltalk,并且正在阅读“Squeak - A Quick Trip To ObjectLand”。我使用 Python 和 Java 的一些先验知识进入了面向对象的范式,书中第 36 页的这句话让我想到:

Smalltalk 是面向对象语言的基于类的实现。

简短的句子,但很有趣。在 OO 中,诸如类、对象、实例之类的所有术语似乎都已明确定义,并且似乎指向唯一的真正含义,并且您可能会遇到诸如“对象是类的实例”之类的通用句子。
但是您很少听到有关实施策略的信息。在这种情况下,面向对象概念的实现意味着什么?除了类,还有面向对象语言的实现吗?

4

2 回答 2

9

Javascript 是一种基于原型的面向对象语言的实现。

您无需继承类并创建该新类的实例,而是通过克隆原型来继承行为。

作为一个历史记录,我应该补充一点,虽然 Javascript 可能是最广泛使用的原型使用语言,但首先是 David Ungar 和 Randall Smith 的Self 语言

Squeak有多种原型实现。我没有使用它们,所以我无法评论这些库。

于 2012-10-26T11:27:57.010 回答
5

我从未见过,但读到了 Emerald,它是面向对象的,但既不基于类也不基于原型,但似乎在特殊构造函数的帮助下“一个接一个”地构造对象:

但是,Emerald 对象的创建不需要 Class 对象。在大多数基于对象的系统中,程序员首先指定一个定义其所有实例的结构和行为的类对象。类对象还响应新调用以创建新实例。

相反,Emerald 对象是通过执行对象构造函数来创建的。对象构造函数是定义对象的表示、操作和过程的 Emerald 表达式。

请参阅Andrew Black、Norman Hutchinson、Eric Jul 和 Henry Levy:“翡翠系统中的对象结构”

于 2012-10-26T12:57:43.310 回答