ObjectSquare [1999 年 4 月号]

[Happy Squeaking!!]


1.メタ機能との出会い

1.1 "メタ"とは


Metaは、英語の接頭辞で、もともと「背後の、後ろの、より包括的な、超えた」といった意味があります。私たちが普通に持っている観点からは、少し見えにくい、超えてしまったところにメタの世界はあります。とはいえ、不必要というわけではありません。むしろ縁の下で私たちの世界を支えてくれている重要な役割を持っているのです。メタなるものの存在によって、私達は世界を混沌ではなく、整然とした秩序だったものとしてとらえ、無事にすごすことができます。

身近な例で見てみましょう。オブジェクト指向では、現実世界を様々な「もの」の集まりからなるというふうに考えます。「もの」にはいろいろな実体(インスタンス)や、インスタンスを分類するもの(クラス)があります。個々のインスタンスが成り立つための秩序を与えるものとして、おなじみのクラスが存在しています。「犬」というクラスが「ポチ」の背後に存在することによって、はじめて「ポチ」が何たるを理解できるのです。「犬」という概念が全くない世界ではじめて「ポチ」を見つけたとしたら、私たちはそれを得体のしれないものとしてしかとらえられず気味が悪いと思うことでしょう。こうした時に「犬」クラスは「ポチ」インスタンスに対する「メタ情報」を与えていることになります。

記号風に書くと以下のようになります。
「ポチ」=meta =>「犬」(犬はポチが何たるかのメタ情報を与えてくれている)

これはインスタンス工場としての「犬」が、「ポチ」という実体を生成すると考えた場合の実体化(instantiate)の関係とはちょうど逆になります。
「ポチ」<=instantiate =「犬」

このような説明だと、「インスタンスからクラスへの関係がメタなのか」と思ってしまうかも知れません。
しかし、実は話はそれほど簡単ではありません。

山田さんは車の購入を考えているとします。山田さんのところに実際に納車されるのは「インフィニティ」という車種そのものではありません。「品川 XX-XX」ナンバーが張られた「インフィニティのインスタンス(山田号)」のはずです。
ここまでは、前の例と変わりません。「インフィニティ」は「山田号」に対しクラスとしてメタ情報を提供しています。このため町中で山田さんの車を見ても別段気味が悪いと思うこともなく平穏にすごせます。

「山田号(one of インフィニティ)」=meta=>「インフィニティ」

ところが今度は車を購入する場合を考えてみます。購入者は、「購入の基準」の要素として、「値段」や「燃費」、「安全性」といったものを考えます。山田さんの場合は、ミーハーなのでとにかく「(インフィニティという)車種」で決めてやろうと思っていたとします。この場合、「インフィニティ」は、「車種の1つ」(インスタンス)であり、「車種」は「インフィニティ」が何たるかを説明するメタ情報をクラスとして提供していることになります。

「インフィニティ(one of 車種)」 =meta=>「車種」

こう考えると「インフィニティ」はある場合ではクラスで、またある場合ではインスタンスということになってしまいます。
まとめると、以下のような関係が成り立っています。

「山田号(one of インフィニティ)」=meta=>「インフィニティ(one of 車種)」=meta=> 「車種」

この例が示すように、メタというのは相対的な考えであり、自分がどこを視点として選ぶかによって推移するものです。「山田号」を実体としてとらえればそのメタ情報を提供するものは「インフィニティ」というクラスです。「インフィニティ」を実体としてとらえれば、今度は「車種」がそのメタ情報を提供していることになります。(「山田号」から見れば「車種」はメタ情報のさらにメタ情報を提供しています。「インフィニティ」がクラスであり「車種」はクラスのさらにメタ情報を提供するもの、つまりメタクラスとして考えることができます)。

一般的な言い方をすれば、インスタンスに存在する基盤をクラスが与え、クラスが存在する基盤をメタクラスが与えていることになります。そうするとメタクラスが存在する基盤は?ということになるのですが、メタは相対的な考えなので、抽象度の視点をずらしていくことによって無限に続いていくものということになります。
とはいえ実際にはあまりに抽象的なレベルになると、私達の思考をまさに「超えたもの」としてもはや意味を持たなくなります。

しかし妥当なレベルでのメタ的なものの抽出は、オブジェクト指向の分析、設計、また言語の実装においても非常に有功な効果をもたらします。以下、そうした例をみていくことにしましょう。


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

Index

Next