gpt4 book ai didi

oop - Self 和 Smalltalk 之间的区别

转载 作者:行者123 更新时间:2023-12-03 01:32:21 25 4
gpt4 key购买 nike

我只是在寻找 Self 与 Smalltalk 的区别。

这不应该是 gorilla 与鲨鱼的问题。我并不是在寻找一个更好的原因,我只是对什么定义一个与另一个不同感到困惑。在我花了大约 2 个小时阅读它们并研究了一些代码之后,它们对我来说似乎是同一种语言(旁白:我终于理解了 Smalltalk 版本的“一切都是对象”。我必须说,这真是太棒了。哈哈!我以为 C# 已经解决了...但它甚至还没有接近这个!XD)

过去几年里我在某个地方读过的随机内容:

  • Smalltalk 分配和消息/消息传递是唯一的事情那些不是物体,但是在 self 中,即使是这些事物在对象框架中占有一席之地
  • “ self 在面向对象方面更加纯粹比 Smalltalk 更“。我还没有找到更具体的阐述。

最佳答案

类和原型(prototype)

Self 和 Smalltalk 之间最明显的区别是 Self 没有的概念。对象和类之间不存在“是...的实例”关系。Self 是第一个原型(prototype)面向对象的语言,在这方面是 JavaScript 的先驱。因此,在 Smalltalk 中创建新对象的典型方法是实例化,而在 Self 中则是克隆

执行和消息

正如您已经发现的,第二个根本区别是,在 Self 中,执行的唯一概念是消息发送,而在 Smalltalk 中,赋值 和< em>对象字段访问也存在。此外,Self 中不存在“全局状态”这样的东西。您只能访问通过发送消息可以检索的内容。然而,Self 会跟踪一些“众所周知的对象”,可以为其提供新创建的对象。

状态和槽位

思考前两点“没有类”和“只有消息”,可以清楚地看出,Smalltalk 和对象状态及其行为之间的区别是不直接存在于 self 中。 Smalltalk 将状态存储在对象的实例变量中,并将行为存储在其类的方法字典中,Self 使用以下概念,它可以代表状态和行为。

分享行为

为了帮助组织行为,Self 不仅提供 prototypes but also traits 。特征是一个仅包含行为的对象,并且多个对象共享该行为。(此外,还有mixins行为状态的一小部分,可以组合成其他对象。

Self 中的对象可以有父级,对象本身的消息将发送到这些父级不理解(委托(delegate))。这将创建类似于 Smalltalk 中的类继承的层次结构,但不需要类。

一些示例

创建一个新对象

短暂聊天
Object new
自己:
  • 普通对象:()(||)(明确表示不存在槽)
  • 复制的对象:someObject 副本

创建具有某些字段的对象

短暂聊天
Object subclass: #MyObjects instanceVariableNames: 'foo bar'. "…" 
MyObject new.
自己
( | foo. bar | )

制作收藏

短暂聊天
OrderedCollection new.
自己
list copy.

“继承”

短暂聊天
Object subclass: #MyObject. "…"
自己
( | parent* <- list | )

资源

我建议阅读bibliography section on the Self webpage .

关于oop - Self 和 Smalltalk 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16959539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com