我知道的最面向对象的语言是Smalltalk。与其他语言相比,它的独特功能是将所有内容都定义为对象。
但是(如果我们不考虑历史事件的话),难道不是这种特殊性使得它比大多数其他面向对象的语言(Java,C ++,Python等)使用得更少?
当今最常用的面向对象语言并不是纯粹如此,因此使用它们相对容易(如果不考虑范例,它们与C语言的区别并不大)。外部元素(API,C库,DLL等),或使用类创建您自己的对象(我们将再讨论面向类的编程)。
因此,我给人的印象是大多数面向对象的语言都不遵循原始OOP的“哲学”(我错了吗?)。
然后我想知道一种纯面向对象的语言是否可以像这种范式中的大多数语言一样广泛使用,以及应该使这种语言与环境分离的特征是什么?无法在Smalltalk中使用C库)?
答案 0 :(得分:5)
在现代Smalltalks中,与C接口并不困难。还有其他一些纯OO语言(Erlang,CLOS,Scala等),所以我认为纯不是问题。
这就是难题:Smalltalk不仅是一种语言。语法是次要的。
Smalltalk的卓越生产力来自它是一个活动对象环境。您可以通过在内存中创建类对象,然后向其中添加方法对象,然后创建实例,并反复重塑类和实例的方式进行编程,直到组装出可以满足您需要的对象。这些对象的二进制快照存储在映像中。要稍后与他们再次合作,将恢复快照。
源代码本身是次要的,它只是操作对象的接口。您输入的用于定义类的源代码甚至没有存储,该类对象在需要时会生成它。同样,方法的源代码只能保留以保留格式,注释和变量名,行为的主要定义是方法对象。
这使得很难与其他语言进行比较。对于认为文本文件中的源代码是编程本质的主流程序员来说,这感觉很陌生。恕我直言,这是今天Smalltalk未被广泛采用的主要原因。