「メタモデルの線形性」(OO百韻) | ◇ ◀ ▲ ▶ |
メタモデルを考えるとき、さらにメタレベルでひとつ抽象度が上がったモデルとして メタメタモデルなるものを考えることがある。 UMLではユーザーオブジェクトのレベル(M0)とモデルのレベル(M1)、メタモデルのレベル(M2)、メタメタモデルのレベル(M3)の4階層からなる4階層メタモデル体系(Four Leyer Metamodel Architecture、FLMMA)が考えられている。 UMLでも4階層メタモデル体系が提唱され始めたころは、ごく一部のコミュニティではM4だのM5だのといった霞か雲を掴むような議論がなされていた。 最近では表だったところでは4階層メタモデル体系以外のものをあまり、 というか、ほとんど目にしない。 しかし、UMLから離れてメタモデリングそのものを議論したり、あるいはUMLのメタモデリングの問題点について議論する場合には、非常にマイナーなトピックではあるものの、そのかぎりではない。
ここに、厳密メタモデリング(strict metamodeling)という考え方がある。 この考え方に照らし合わせると、UMLに関してなにか知見が得られるかもしれない。 前半はUMLのメタモデルの線形性についての既知の問題点を説明する。 UML2.0ではその問題点を解決するためにかなり大胆な改良が加えられているが、なぜかその問題点をあまり宣伝していないために複雑怪奇な面ばかりが目立ってしまっている。 後半ではアスペクトに関するアイディアのひとつをとり上げる。
簡単にいうと、厳密メタモデリングとは、あるレベルの要素は必ずひとつ上のレベルで対応するあるひとつ要素のインスタンスになっていなくてはならない、ということである。 そして、厳密メタモデリングに基づいたメタモデルを線形メタモデルという。
次の図はこの例題のもっとも単純なモデルをUMLの4階層メタモデル体系に当てはめたものである。
UMLに関連した書籍などではよくおなじみの図である。 各レベルの要素は一つ上位のレベルの要素のインスタンスになっている。 M0からM3の階層は背景の色が緑色(M0)、明るい水色(M1)、暗い水色(M2)、そして青色(M3)で表している。
一見して、線形メタモデルになっているように見える。
しかし、M2レベルに「オブジェクト」というメタクラスのモデル要素を追加すると、 とたんにその線形性は破綻する。
UMLのメタモデルでは、オブジェクトとはクラスのインスタンス、言い換えると、 クラスの実体もしくは実例であると定義されている。 図はモデル層にある(商品としての)ビデオクラスのインスタンスとして、 (在庫のひとつとしての)『2001年』がユーザーオブジェクト層にあることを示している。 一方、『2001年』はオブジェクトなのだから、当然メタモデル層におけるオブジェクトのインスタンスでもあるはずである。 しかしこのインスタンス関係を認めてしまうと、 このメタモデリングは線形ではなくなってしまう。
なぜなら、第一にインスタンス関係は一つの階層しかまたげないはずであり、 第二にモデリングの要素は必ず一つ上の階層の一つの要素のインスタンスでなければならないという、二つが厳密メタモデリングが要請することだからである。
「よって、UMLのメタモデルは線形ではない。証明終わり。」とやってしまっても 実用上はいっこうにかまわないのだが、ここではそれではおもしろくないので、 なにがなぜUMLを非線形たらしめるのかを考えてみたい。
この図は、UMLが実際にはM1にある要素をメタモデルとして定義していることを表している。 図中M1’とあるところがそれで、メタモデルで定義されている「オブジェクト」は 実際には線形メタモデル中のM1にある。 つまり、UMLのメタモデルは本来M2にあるべき要素とM1にあるべき要素をいっしょくたにして定義しているということである。
この仮説は、ステレオタイプなど、モデル拡張のために用意された仕組みを説明する場合にも、似たような考えを適用できる。
ところでこの仮説によるメタモデリング体系は、線形だろうか、それとも非線形だろうか?
残念ながら非線形である。 なぜなら、『2001年』ユーザーオブジェクトは、「ビデオ」クラスのインスタンスであると同時に「オブジェクト」メタクラスのインスタンスであり、二つの要素のインスタンスになっているために厳密メタモデリングの定義から外れてしまうからである。
まぁ、そう堅いこと言わずに、例えば「やや厳密メタモデリング」というようなものを定義すれば良いのかもしれない。 しかし、こうやって基礎となる概念を必要だからといってポンポンつくり出していてはきりがないし、こういうご都合主義は最後の手段にとっておきたい。 よって、この仮説その1は却下もしくはいまのところ保留としたい。
インスタンス関係がこれまでの図だと上下にしかないのに対して、 この図では上下のインスタンス関係と左右のインスタンス関係の 2通りが表されている。 上下方向のインスタンス関係は論理的なものとして、L0、L1、L2となっており、 左右関係のインスタンス関係は物理的なものとして、P0、P1となっている。 従来のM0からM3の階層は背景の色が緑色(M0)、明るい水色(M1)、暗い水色(M2)、そして青色(M3)で表している。
つまり、従来のインスタンス関係を更に細分化して、論理インスタンス関係と物理インスタンス関係に分けたのである。メタモデル階層の直積分解である。
インスタンス関係を2次元に拡張することで、物理インスタンス関係と論理インスタンス関係はそれぞれ必ず一つの上位要素とのインスタンス関係を表すことができる。 物理的なものと論理的なものとを別個に考えるかぎりにおいては、 どの要素も必ずひとつ上位のひとつの要素のインスタンスであると言える。 よって、この仮説のメタモデリングは線形である(と、こじつけることができる)。
それに、従来のUMLのメタモデル階層M2は、この多次元メタモデル階層の (P0、L1)と(P1、L0)、(P1、L1)にきれいに収まる。 仮説その1のように「メタモデルの要素の一部が、実はM1にもあったのだ」と いった無理を通す必要がない。
この仮説においても、メタモデリング階層の直積分解などという新たな概念を 都合よく導入してしまっている点で仮説その1と大差はない。 が、仮説その1のようにアドホックに特定の概念を追加するのよりは、 より一般的な原理として直積分解という概念に還元できるので、 (あくまで個人的な好み、および独断と偏見により)こちらのほうが優れている。
よって、この仮説その2をソフトウェア祈祷師の多次元メタモデル体系(Multi-Dimensional Metamodel Architecture、MDMMA)として採用したい。
ひとつ断わっておくが、この多次元メタモデル体系はソフトウェア祈祷師の 完全なるオリジナルというわけではない。 いろいろな説を自分なりに消化したものがこれである。 ACMのDigital Libraryあたりで"metamodeling"などのキーワードで 検索すればいくらでもみつかると思うが、 類似のものがはるか昔からいろいろな人によっていろいろな形で 提案されている。 これはブログなので出典を明確にするようなめんどうなことはしない。 あしからず。 だから、メールなどで類似性の指摘をして強談したり、リファレンスの 明記を強要するようなことは、できれば遠慮してもらえるとありがたい。
もちろん、UMLのメタモデルが非線形であってもとりあえずのところは いっこうに困らない。 しかし、ステレオタイプやモデル拡張、パターン、アスペクト、さらには オントロジーなどの絡みを考えるにあたっていろいろと 「あっちをたたせば、こっちがたたず」のことができてしまい、 そもそも土台から改良する必要があると考える人も少なくない。
次の機会には、モデル階層の直積分解とアスペクトの関係や、 MDAのモデルウィーバーなどに触れてみたいと思う。
つづく。
これまでで表示してきた図ですが、モデル要素間の関係は実線で表してあり、 とくにインスタンス関係については矢印で表してあります。 UMLに準拠するなら、インスタンス関係は実線の矢印ではなく、破線の矢印にすべきものだったかもしれません。 だから、例えば最後の図だと、クラスとオブジェクトの間にある線は実線で インスタンス関係は表していませんが、ビデオとクラスの間にあるのは矢印で インスタンス関係を表しています。
さらに、つづきで書こうと思ってましたが、最後の図の物理レベルP1においては論理レベルはなくなってしまい。この部分だけ先取りすると次の図にようになります。
物理レベルP1以上のどこかではメタクラス、クラス、オブジェクトを別々にする必要性はなくなってしまうところがあり、結局右側には「モデル要素」ひとつだけがあり、左側のタイプ、ビデオ、「2001年」などのモデル要素は右側では一つの物理的モデル要素のインスタンスでかまわないということになります。 そして、おそらく今現在オントロジーの主流を締めている派の意見を反映させれば、メタクラスはクラスを特化したもの、クラスはオブジェクトを特化したものいう具合いに下向きの汎化特化関係がつくことになります。この件に関しては、サブタイピングとサブクラッシングの反変性の一面が絡んでくるものと思われ、おそらく汎化特化関係についても今回の議論と同様に何種類か考える必要がでてくるのだろうと考えています。
「メタモデルの線形性」へのコメント コメントを書くObject というモデル要素は Class というモデル要素のインスタンスではないと仮説してみるテスト. Object と Class の間の関連は instanceOf をインスタンスとするような関連の気がするわけですが. っていうか UML2.0 のSemantics (名前変わったんでしたっけ) 見てないのであうあう.
Posted by koichik at 2004年11月10日 03:28手抜きをして図の説明が足りてなかったので誤解を招いてしまったようです。すみません。
クラスとオブジェクトの間の線は直線で、インスタンス関係ではなく、それ以外のなんらかの関係を表しています。その一方、インスタンス関係は矢印にしてます。
オブジェクトとクラスの間の関係がインスタンス関係ではないというのは、小林さんのおっしゃるとおりです。P1でのクラスはオブジェクトのサブクラスとするという、図では上下方向が逆になる見方もあるようです。私はそれはさらにP方向上位に位置すると考えてますが。
この手のトピックでは、今後はOntologyの観点がどんどん入ってくると思われるので、UML2.0以降はしばらくまた論争が勃発すると予想してます。
Posted by yuntanach at 2004年11月10日 04:05ぐはぁっ,見落としてました.<線の違い
Posted by koichik at 2004年11月11日 03:10
「メタモデルの線形性」へのトラックバック