Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 自我与闲聊的区别_Oop_Smalltalk_Paradigms_Selflanguage - Fatal编程技术网

Oop 自我与闲聊的区别

Oop 自我与闲聊的区别,oop,smalltalk,paradigms,selflanguage,Oop,Smalltalk,Paradigms,Selflanguage,我只是想知道是什么让Self和Smalltalk区别开来 这不是大猩猩对鲨鱼的问题。我并不是在寻找一个更好的原因,我只是对一个与另一个不同的定义感到困惑。经过大约两个小时的阅读和一些代码的修改,我觉得他们都是同一种语言(旁白:我终于理解了Smalltalk版本的“一切都是一个对象”。我必须说,这真是太棒了。哈哈!我还以为C已经钉好了……但它甚至没有接近这个!XD) 在过去几年的某个时候,我在某个地方读到了一些随机的东西: Smalltalk分配和消息/消息传递是唯一的事情 然而,在自我中,它们

我只是想知道是什么让Self和Smalltalk区别开来

这不是大猩猩对鲨鱼的问题。我并不是在寻找一个更好的原因,我只是对一个与另一个不同的定义感到困惑。经过大约两个小时的阅读和一些代码的修改,我觉得他们都是同一种语言(旁白:我终于理解了Smalltalk版本的“一切都是一个对象”。我必须说,这真是太棒了。哈哈!我还以为C已经钉好了……但它甚至没有接近这个!XD)

在过去几年的某个时候,我在某个地方读到了一些随机的东西:

  • Smalltalk分配和消息/消息传递是唯一的事情 然而,在自我中,它们不是对象,甚至是这些 事物在对象框架中占有一席之地
  • “自我是更纯粹的面向对象的智慧 而不是闲聊”。我还没有找到更具体的细节

了解Smalltalk一段时间并阅读维基百科:

  • 自我:

    基于原型的

    Smalltalk:

    基于类

  • 自我:

    由于未指示“\u AddSlots:”原语的接收器,因此 是“自我”

    Smalltalk:

    你写的
    self
    很明确

  • 自我:

    向对象添加插槽

    Smalltalk:

    您可以将插槽添加到类中,也可以像添加到对象中一样添加插槽

  • 发明和影响“语言”/“系统”的人是不同的。Self和Smalltalk可以被看作是一个“系统”(改变你的观点),这意味着你作为程序员与系统交谈,并在运行时改变它

  • 类和原型 Self和Smalltalk之间最明显的区别是Self没有类的概念。对象和类之间没有“是实例”关系。 Self-Latty是最早的原型面向对象语言之一,在这方面,它是JavaScript的前身。因此,在Smalltalk中创建新对象的典型方式是实例化,而在Self中则是克隆

    执行和消息 正如您已经发现的,第二个基本区别是,在Self中,执行的唯一概念是消息发送,而在Smalltalk中,也存在赋值和对象字段访问。此外,自我中不存在全局状态。您只能通过发送消息访问您可以检索的内容。然而,Self跟踪一些“众所周知的对象”,可以给它们一个新创建的对象

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

    分享行为 为了帮助组织行为,Self不仅提供。 特征是一个只包含行为的对象,它是多个对象共享的。 (此外,还有混合,即行为和状态的一小部分,可以组合成其他对象)

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

    几个例子 创建新对象 闲话 自我:
    • 普通对象:
      ()
      (| |)
      (使插槽的缺失显式)
    • 复制的对象:
      someObject复制
    创建具有某些字段的对象 闲话 自己 收藏 闲话 自己 “继承” 闲话 自己
    托比亚斯列出了关键的区别,所以请阅读他的答案

    从某种意义上说,Self就是Smalltalk。Self和Smalltalk-80(如Squeak或VisualWorks)之间的区别小于Smalltalk-80和Smalltalk-72之间的区别。它们看起来非常相似,因为它们是相关的

    有一句自语——“Self就像Smalltalk,只是更像”。你喜欢消息吗?我们什么都用它们。你喜欢对象吗?我们的对象是真正的自包含的,不仅仅是类的实例。你喜欢概念上的小语言吗?嗯,我们只有对象、插槽和消息等等

    Object new
    
    Object subclass: #MyObjects instanceVariableNames: 'foo bar'. "…" 
    MyObject new.
    
    ( | foo. bar | )
    
    OrderedCollection new.
    
    list copy.
    
    Object subclass: #MyObject. "…"
    
    ( | parent* <- list | )