The*_*kle 17 oop paradigms smalltalk selflanguage
我只是在寻找将Self与Smalltalk区分开来的原因.
这不应该是大猩猩与鲨鱼的问题.我不是在找一个更好的理由,我只是把一个定义为与另一个不同的东西感到困惑.在阅读了大约2个小时后,它们对我来说似乎都是同一种语言,并且用一些代码捣乱(旁白:我终于理解了Smalltalk版本的"Everything is a object".我必须说,它真是太棒了.哈哈!我认为C#已经钉了......但它甚至没有接近这个!XD)
我在某个地方读过的随机内容,过去几年的某个时间:
Tob*_*ias 28
Self和Smalltalk之间最明显的区别是Self没有类的概念.对象和类之间没有" 是一个关系实例 ".Self而不是第一个典型的面向对象语言之一,在这方面是JavaScript的前身.因此,在Smalltalk中创建新对象的典型方法是实例化,而在Self中,它是克隆.
正如您已经发现的那样,第二个根本区别在于,在Self中,执行的唯一概念是消息发送,而在Smalltalk中,也存在赋值和对象字段访问.而且,Self中没有全局状态这样的东西.您只能通过发送消息来访问可以检索的内容.然而,Self会跟踪一些"众所周知的对象",可以给出新创建的对象.
对前两点"无类"和"仅消息"的思考清楚地表明,Smalltalk与对象状态及其行为之间的区别 并不直接存在于Self中.在Smalltalk将对象的实例中的状态存储在其类中的方法字典中的变量和行为中,Self使用了插槽的概念,它可以表示状态和行为.
为了帮助组织行为,Self不仅提供原型,还提供特征.特征是一个只包含行为的对象,以及多个对象共享的对象.(此外,还有mixins,行为和状态的一小部分,可以组成其他对象).
Self中的对象可以将父对象发送给对象本身不理解的消息(委托).这创建了类似于Smalltalk中的类继承的层次结构,但不需要类.
Object new
Run Code Online (Sandbox Code Playgroud)
自:
()或(||)(使缺少槽显式)someObject copyObject subclass: #MyObjects instanceVariableNames: 'foo bar'. "…"
MyObject new.
Run Code Online (Sandbox Code Playgroud)
自
( | foo. bar | )
Run Code Online (Sandbox Code Playgroud)
OrderedCollection new.
Run Code Online (Sandbox Code Playgroud)
自
list copy.
Run Code Online (Sandbox Code Playgroud)
Object subclass: #MyObject. "…"
Run Code Online (Sandbox Code Playgroud)
自
( | parent* <- list | )
Run Code Online (Sandbox Code Playgroud)
我建议阅读自我网页上的参考书目部分.
小智 11
托比亚斯已经列出了关键的差异,所以请阅读他的答案.
从某种意义上说,Self是Smalltalk.自和Smalltalk的-80如佳乐或VisualWorks中之间的差是小于的Smalltalk-80和Smalltalk-72之间的差异.它们看起来很相似,因为它们是相关的.
有一个自我短语 - "自我就像Smalltalk,只有更多".你喜欢消息吗?我们将它们用于一切.你喜欢对象吗?我们的对象是真正自包含的,而不仅仅是类的实例.你喜欢概念上的小语言吗?好吧,我们刚刚得到了对象,插槽和消息.等等.
| 归档时间: |
|
| 查看次数: |
1694 次 |
| 最近记录: |