![]() |
[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. |
|