ObjectSquare [1999 年 4 月号]

[Happy Squeaking!!]


5.Squeak演習: インターセッション

5.3 メタクラス--クラスを支えるもの


クラスのクラス

今までの演習で、インスタンスだけでなくクラスに対しても、様々なメッセージを送ってきました。インスタンスのメッセージに対する受け答えの方法は、クラスでメソッドとして定義されています。では、クラスに対するメッセージはどこで定義されているのでしょうか。それは、クラスを支えるもの、「メタクラス」においてに他なりません。

メタクラスは、クラスのクラスです。インスタンスからクラスを取り出すときにclassメッセージが使えたように、クラスに対してclassメッセージを送ることでメタクラス(ある特定クラスについてのメタクラスのインスタンス)を取り出すことができます。

以下を "do it" してみましょう。

OrderedCollection class inspect.

次のようなインスペクタが立ち上がります。


OrderedCollectionのメタクラスのインスペクト

メタクラスには、名前がありません。Smalltalkでは、便宜上「なになにクラスのメタクラス」ということを表すために、「クラス名 class」という表記を用いています。結果として、OrderedCollection class の結果はOrderedCollection classとなり、見かけ上は、何も起こっていないかのように見えますが、きちんとメタクラスは取得できています。(前者はメッセージ、後者はただのclassという表示です)。

実は、もっと簡単にメタクラスを見る方法があります。
以下を、"do it"してみてください。

Browser newOnClass: OrderedCollection class

Browser newOnClass: のあとは今まではクラスを引数として渡していましたが、今回は、メタクラスを引数として渡しています。

以下のようなクラスブラウザが立ち上がります。


OrderedCollection class (OrderedCollectionメタクラス)のブラウズ

ブラウザの右上の部分が"class"になっていることに注目してください。今までは"instance"サイドがハイライトされていたはずです。

ブラウザで、instanceボタンをクリックするとおなじみのOrderedCollectionクラスのブラウズに切り替わります。


OrderedCollectionのブラウズ

更につづく


© 1999-2001 OGIS-RI Co., Ltd.

Prev.

Index

Next