私はOOPを初めて使用しますが、「手続き型」のバックグラウンドを持っています。
私は現在、GNU Smalltalk と Lovejoy の「Smalltalk: Getting The Message」を介して OOP について理解を深めようとしています。
メタクラスとメタクラス クラスとスーパークラスの違いについて、私は混乱しています。スーパークラス -> クラス -> サブクラスの継承の流れを見ることができます。しかし、メタクラスがどのように/どこに収まるかわかりません.TIA ...
私はOOPを初めて使用しますが、「手続き型」のバックグラウンドを持っています。
私は現在、GNU Smalltalk と Lovejoy の「Smalltalk: Getting The Message」を介して OOP について理解を深めようとしています。
メタクラスとメタクラス クラスとスーパークラスの違いについて、私は混乱しています。スーパークラス -> クラス -> サブクラスの継承の流れを見ることができます。しかし、メタクラスがどのように/どこに収まるかわかりません.TIA ...
無料のオンライン ブックPharo by Exampleの第 13 章 (クラスとメタクラス)に優れた説明があります。この章で説明することは、すべての Smalltalk 実装に共通です。
継承には、インスタンス継承とクラス継承の 2 つのレベルがあります。
Smalltalk には、クラスをオブジェクトとして渡すことを可能にする特別なスキームがあります。つまり、クラスも独自の権限を持つオブジェクトです。メタクラスは、「単に」クラス オブジェクトのクラスです。
通常のインスタンスの継承に干渉しないため、superclass -> class -> subclass使用した図のどこにも収まりません。
クラスベースの OO には、インスタンス化と継承という 2 つの異なる関係があります。
インスタンス化は、オブジェクトとそのクラス、キーワードなどとの間の関係ですnew。通常、オブジェクトの低レベル表現のポインターによって実装されます。Smalltalk では、anObject classこのポインタをトラバースします。クラスがオブジェクトでもあり、クラスのクラスがメタクラスと呼ばれることもありますが、これはインスタンスと同じ関係です。
継承はクラス間の関係です。を実行することでクラスからそのスーパークラスに移動でき、そのクラスにaClass superclass到達するまでこれを続けますObject。Smalltalk では、スーパークラス ポインターはすべてのクラスで定義された単なるインスタンス変数であり、superclassメッセージは通常のアクセサーです。