next up previous contents
Next: レスクロ Up: Smalltalk Previous: オブジェクト指向

クラスとメタクラス

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

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

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



Deguchi Lab.