我目前正在Squeak环境中学习Smalltalk,而我正在阅读“Squeak - 快速前往ObjectLand”。我使用Python和Java的一些先验知识进入了面向对象的范例,第36页的书中的这句话让我想到了:
Smalltalk是面向对象语言的基于类的实现。
短句但非常有趣。在OO中,类,对象,实例等所有术语似乎都是明确定义的,并且似乎指向唯一的真实含义,并且您可能会遇到像“对象是类的实例”这样的通用句子。
但是你很少听到实施策略。在这种情况下,面向对象概念的实现意味着什么?除了类之外是否还有OO语言的实现?
答案 0 :(得分:9)
Javascript是基于原型的OO语言实现。
不是对类进行子类化并创建该新类的实例,而是通过克隆原型来继承行为。
作为一个历史记录,我应该补充一点,虽然Javascript可能是使用最广泛的原型语言,但第一个是David Ungar和Randall Smith的Self language。
对于Squeak,有implementations prototypes个{{3}}。我没有使用它们,所以我无法评论这些库。
答案 1 :(得分:5)
我从来没有见过,但读到的是Emerald,它是面向对象的,但既不是基于类的,也不是基于原型的,而是似乎构建了对象"逐个"在特殊构造函数的帮助下:
但是,Emerald对象不需要Class对象来创建它们。在大多数基于对象的系统中,程序员首先指定一个类对象,该对象定义其所有实例的结构和行为。类对象还响应新的调用以创建新实例。
相反,通过执行对象构造函数创建Emerald对象。对象构造函数是一个Emerald表达式,用于定义对象的表示,操作和过程。
请参阅Andrew Black, Norman Hutchinson, Eric Jul, and Henry Levy: "Object Structure in the Emerald System"。