next up previous contents
: レスキュークローラー : Smalltalk : クラスベースとプロトタイプベース   目次

クラスとメタクラス

Smalltalkシステムでは、オブジェクトは必ず何かしらのクラスに属する。それをはっきりと意識させるためにオブジェクトのことを「インスタンス」という言葉を使って言い表すこともある。インスタンスは英語で「実例」を意味する単語である。同じクラスに属するインスタンスは、原則として同じメッセージに対して全く同じ振る舞いをする。また、Smalltalkシステムでは、データとプログラムを区別するようなことはせず、オブジェクトのみでコンピュータシステムを成り立たせている。そこではクラスもオブジェクトであり、その振る舞いを定める何かしらのクラスのインスタンス、として扱われる。このクラスのクラスのことを「メタクラス」と呼ぶ。

クラスとメタクラスの関係は例外なく一対一で、クラスは対応するメタクラスの唯一のインスタンス(シングルトン)になっている。すべてのメタクラスはMetaclassのインスタンスになっている。「Metaclass」もオブジェクトで、“ある”クラスに属している。

このような仕組みは、徒に事を複雑にするだけで無意味なものに見えるかもしれないが、こうした“工夫”により、「Smalltalkシステムを構成するものは、すべてオブジェクトである」、「オブジェクトは必ず何らかのクラスに属する」という二つの単純な原則が貫かれていることが大切なのである。この原則のおかげで、システム内で興味を持った“対象”が何であれ、それは例外なくオブジェクトであり、その素性や振る舞いを知りたければ(あるいは変えたければ)、その属するクラスを当たればよい、というスタイルに徹することが可能になる。そして、この「クラスを介して、オブジェクトを知り、変更を加え、必要なら新たに設計する」作業を強力にサポートするアプリケーションのひとつが「システムブラウザ」というわけである[3]。



Deguchi Lab. 平成20年3月5日