18

Self が Smalltalk と一線を画している点を探しているだけです。

これは、ゴリラ対サメの質問ではないはずです。私はどちらかが優れている理由を探しているわけではありません。一方が他方と異なると定義するものについて混乱しているだけです。2 時間ほど読んでコードをいじくり回すと、どちらも同じ言語のように見えます (余談ですが、"Everything is a object" の Smalltalk バージョンがようやく理解できました。ハハ! そして、C# でうまくいったと思っていたのに... でも、これには及ばない! XD)

過去数年間にどこかで読んだランダムなもの:

  • Smalltalk の割り当てとメッセージ/メッセージの受け渡しだけがオブジェクトではありませんが、Self では、これらのこともオブジェクト フレームワークに含まれています。
  • 「Self は、Smalltalk よりもさらに純粋な OO です」。より具体的な説明を見つけることができませんでした。
4

3 に答える 3

29

クラスとプロトタイプ

Self と Smalltalk の最も明確な違いは、 Self にはClassesの概念がないことです。オブジェクトとクラスの間に「<em>はインスタンスである」という関係はありません。Self はむしろ、最初のプロトタイプのオブジェクト指向言語の 1 つであり、この点で JavaScript の前身です。したがって、Smalltalk で新しいオブジェクトを作成する一般的な方法はインスタンス化ですが、Self ではクローン作成です。

実行とメッセージ

既にお気づきのように、2 つ目の基本的な違いは、Self では実行の唯一の概念がメッセージ sendであるのに対し、Smalltalk では代入オブジェクト フィールドへのアクセスも存在することです。さらに、 Self にはグローバルな状態というものはありません。メッセージを送信して取得できるものにのみアクセスできます。ただし、自己はいくつかの「既知のオブジェクト」を追跡し、新しく作成されたオブジェクトを与えることができます。

状態とスロット

前の 2 つの点、「クラスなし」と「メッセージのみ」を熟考すると、オブジェクトの状態とその動作の間の Smalltalk の区別 が Self に直接存在しないことが明らかになります。Smalltalkがオブジェクトのインスタンス変数状態を格納し、そのクラスのメソッド ディクショナリに動作を格納する場合、 Self は、状態と動作の両方を表現できるスロットの概念を使用します。

共有動作

行動の組織化を支援するために、Self はプロトタイプだけでなくtraitも提供します。特性は、動作のみを含むオブジェクトであり、複数のオブジェクトが共有します。(さらに、他のオブジェクトに構成できるmixin 、動作状態の小さな部分もあります)。

Self 内のオブジェクトは、オブジェクト自体が理解できないメッセージが送信される親を持つことができます ( delegation )。これにより、Smalltalk のクラス継承に似た階層が作成されますが、クラスは必要ありません。

いくつかの例

新しいオブジェクトの作成

スモールトーク
Object new
自己:
  • プレーンなオブジェクト:()または(||)(スロットがないことを明示するため)
  • コピーされたオブジェクト:someObject copy

いくつかのフィールドを持つオブジェクトの作成

スモールトーク
Object subclass: #MyObjects instanceVariableNames: 'foo bar'. "…" 
MyObject new.
自己
( | foo. bar | )

コレクションを作る

スモールトーク
OrderedCollection new.
自己
list copy.

「継承」</h3> Smalltalk
Object subclass: #MyObject. "…"
自己
( | parent* <- list | )

資力

Self ウェブページの参考文献セクションを読むことをお勧めします。

于 2013-06-06T13:11:23.430 に答える
11

Tobias が主な違いを示しているので、彼の回答を読んでください。

ある意味、Self は Smalltalk です。Self と Squeak や VisualWorks などの Smalltalk-80 との違いは、Smalltalk-80 と Smalltalk-72 の違いよりも小さいです。それらは関連しているため、非常によく似ています。

Self というフレーズがあります。メッセージが好きですか?私たちはそれらをすべてに使用します。あなたはオブジェクトが好きですか?私たちのオブジェクトは、単なるクラスのインスタンスではなく、真に自己完結型です。概念的に小さな言語が好きですか? オブジェクト、スロット、メッセージができました。等。

于 2013-06-06T22:22:32.353 に答える