3種類のクラス
GMEのM2モデル実装には、以下の3種類のクラスが存在します。
- FCO(First Class Object)
- Model
- Atom(Atomic Object)
「Model」は、UMLにおけるいわゆるクラスです。属性を持つことができますし、抽象クラスになることもできます。他のModelやAtomをコンポジション参照することにより、それらのインスタンスをモデルツリー上の子供にすることができます。
「Atom」もクラスの一種で、属性を持つことができますし、抽象クラスになることもできます。一方、上記Modelと異なるのは、ModelやAtomといった他の要素をコンポジション参照することができません。つまり、インスタンスのモデルツリー上では「葉」に相当するわけです。
グラフィカルエディタ上でのModelとAtomの違い
以下のメタモデルを例に、インスタンスモデルのグラフィカルエディタ上でのModelとAtomの違いを説明したいと思います。以下のメタモデルはModelおよびAtomのみを使った「ファイルシステム」メタモデルです。「FileSystem」オブジェクトは一つの"root"Folderオブジェクトを包含し、「Folder」オブジェクトは、「Folder」または「File」オブジェクトを複数包含することができる、コンポジットパターンです。
ユーザがメタモデルを完成させると、それを「Paradigm」としてGMEに登録します。すると、そのインスタンスモデルのグラフィカルエディタが利用可能になります。以下が、そのグラフィカルエディタの例です。
上記スクリーンショットでまずわかるのが、ModelとAtomで、デフォルトのアイコンが異なります。Modelのアイコンは灰色の大きな四角、Atomは青色の小さな四角になります。
そして、大きく異なるのが、それらのエディタ上での挙動で、Modelのアイコンをダブルクリックすると中央のエディタ領域が更新し、そのModelオブジェクトの子オブジェクト群が表示されます。例えば上記スクリーンショットは、"root"Folderオブジェクトの子オブジェクト群が表示されており、上記パレットから新たにFolderオブジェクトまたはFileオブジェクトをドラッグアンドドロップで追加できます。
一方、Atomoのアイコンをダブルクリックしても何も起こりません。なぜなら、Atomオブジェクトはモデルツリー上における「葉」であって、子オブジェクトを包含することができないからです。
インヘリタンスツリーの設計が紛らわしい
メタモデル上において、Atomを親クラスとして継承するModelを定義することができます(またはその逆も可能)。この点において、ModelもAtomも基本的にはクラスであることが再認識できます。一方、上記エディタ上での振る舞いの違いを理解した段階では、このインヘリタンスは混乱を招きかねないので、注意が必要です。
0 件のコメント:
コメントを投稿