面向对象编程的实现策略

9
我目前在Squeak环境中学习Smalltalk并阅读《Squeak - A Quick Trip To ObjectLand》。我从Python和Java的某些先前知识中进入面向对象的范式,书上第36页的这句话让我思考:
“Smalltalk是一种基于类的面向对象语言的实现。”
简短但非常有趣。在面向对象中,所有术语,如类、对象、实例似乎都有明确定义,并似乎指向一个唯一的真正含义,你可能会遇到类似“对象是类的实例”这样的通用句子。 但你很少听到关于实现策略的事情。在这种情况下,“面向对象”概念的实现意味着什么?除了类之外,是否存在其他面向对象语言的实现策略?
2个回答

9

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

与子类化一个类并创建该新类的实例不同,您通过克隆原型来继承行为。

作为历史注释,我应该补充说明,虽然Javascript可能是使用最广泛的原型语言,但第一个原型语言是David Ungar和Randall Smith的Self语言

有几个原型实现在Squeak中漂浮。我没有使用过它们,因此无法评论库。


这是Smalltalk的另一个原型实现,http://scg.unibe.ch/staff/adriankuhn/protalk,它实际上将类指向对象本身。据我所知,这是为Smalltalk提供*本地*原型的唯一原型框架。所有其他实现都将原型作为在Smalltalk基于类的模型之上的一层。 - akuhn

5
我从未看过Emerald,但读到它是面向对象的,但既不基于类也不基于原型,而是似乎通过特殊构造函数“逐个”构造对象:
然而,Emerald对象不需要Class对象来创建。在大多数基于对象的系统中,程序员首先指定一个类对象,该类对象定义了所有实例的结构和行为。类对象还响应新的调用以创建新实例。
相比之下,Emerald对象是通过执行对象构造函数创建的。对象构造函数是一个Emerald表达式,它定义了对象的表示、操作和过程。
参见Andrew Black, Norman Hutchinson, Eric Jul, and Henry Levy: "Object Structure in the Emerald System"

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