クラスを定義するときは、 親クラスを指定する必要があります。 では、 クラスの定義はどのように始めればよいのでしょうか? 最初から使用できるクラスは 1
つあります。 それは object
です。 これをすべてのクラスの祖先として使用する必要があります。
これは親が存在しない唯一のクラスです。 クラスはインスタンス変数を持たない点を除けばオブジェクトでもあります。
クラスの継承や定義の変更などのクラス操作は、 クラス object
のセレクターを通じて処理されます。
object
はいくつかのセレクターを提供します:
class
を、 後で定義を追加するには settings
を、 型情報を取得するには
class?
(現在のクラスはスタックに渡されたクラスのサブクラスかどうか? を調べる)。
object-class
( "name" – ) oof “object-class”
object-definitions
( – ) oof “object-definitions”
object-class?
( o – flag ) oof “class-query”
init
と dispose
をオブジェクトのコンストラクターとデストラクターとして使用します。 init
はオブジェクトのメモリーが割り当て後に呼び出されますが、 dispose
は割り当て解除処理も行います。 したがって、
dispose
を再定義する場合は、 super destroy
を使用して親の destroy も呼び出す必要があります。
object-init
( ... – ) oof “object-init”
object-dispose
( – ) oof “object-dispose”
new
や new[]
や :
や ptr
や asptr
や []
を使用して、 名前付きおよび名前なしで、 オブジェクトとオブジェクト配列またはオブジェクト・ポインター を作成します。
object-new
( – o ) oof “object-new”
object-new[]
( n – o ) oof “new-array”
object-:
( "name" – ) oof “define”
object-ptr
( "name" – ) oof “object-ptr”
object-asptr
( o "name" – ) oof “object-asptr”
object-[]
( n "name" – ) oof “array”
::
と super
は明示的なスコープ設定に使用します。 明示的なスコープ指定は、
スーパークラスまたは同じインスタンス変数セットを持つクラスに対してのみ使用する必要があります。
明示的にスコープ指定されたセレクターは早期結び付け(early binding)を使用します。
object-::
( "name" – ) oof “scope”
object-super
( "name" – ) oof “object-super”
self
でオブジェクト自身のアドレスを取得します
object-self
( – o ) oof “object-self”
bind
や bound
や link
や is
を使用して、 オブジェクト・ポインターと
instance defers を割り当てます。
object-bind
( o "name" – ) oof “object-bind”
object-bound
( class addr "name" – ) oof “object-bound”
object-link
( "name" – class addr ) oof “object-link”
object-is
( xt "name" – ) oof “object-is”
'
はセレクター・トークンを取得し、 send
はスタックからセレクターを呼び出し、 postpone
はセレクター呼び出しコードを生成します。
object-'
( "name" – xt ) oof “tick”
object-postpone
( "name" – ) oof “object-postpone”
with
と endwith
は、 スタックから得たオブジェクトをアクティブ・オブジェクトにし、
そのオブジェクトのスコープを有効にします。 with
と endwith
を使用すると、
ステートスマート・オブジェクトにトラップされることなく、 セレクターを postpone
してコードを作成することもできます。
object-with
( o – ) oof “object-with”
object-endwith
( – ) oof “object-endwith”