DSL
言語地平におけるMDDの視点 †
OMGはモデルの(メタ)レベルを定義しており、これが有用なこともあるのだが、必ずしもこういったやり方でうまく「モデル」という概念を整理できるわけではなく、単に混乱を引き起こすことも多い。こうした整理の体系については慎重な態度でいるべきだろう。 †
要約 †
- 何か形式的な図を描くときには、その図のメタモデルを定義できる。
- 照明とスイッチをモデル化してみよう。このモデルは、状態図で描くことができる。
- 状態モデルに登場するオブジェクトのスキーマは、クラス図で表すことができる。
- 特定の家(Fowlerの家)の照明を記述してみよう。これはインスタンス図で表現できる。
- 状態図も同様にスキーマを持っており、クラス図で表現できる。これは、状態図のメタモデルと呼ばれている。
- メタモデルも形式的な図なので、メタモデルのメタモデル(メタメタモデル)を定義することもできる。
- 状態図のメタモデル
- このレベルまでたどり着いてしまえば、自分で自分を定義できるため、メタメタメタモデルは必要ない。
モデルのレベル †
- OMGはこうしたモデルのレベルを標準(MOF)として定義している。
- M0:インスタンス
- M1:モデル
- M2:メタモデル
- M3:メタメタモデル
- しかしこれは混乱しやすい。
- モデルという用語が型とインスタンスの双方の意味で使われている。
- Fowlerの家の照明モデルは明らかにモデルといえるが、MOFではこれはインスタンスレベルであってモデルレベルではない。
- 別の問題として、照明のインスタンス図はM0であるため、照明とスイッチのクラス図はM1と考えられる。しかし、状態図のメタモデルをM2と考えることも自然であり、そうすると照明の状態図はM1となる。同じく具体的な照明を描いた2つの図で、レベルが異なるのは不自然だ。
- M0がひもづくのは実行プログラムのインスタンスだ、という見方もある。しかし、これも実装方法に依存するため確たる手がかりとはならない。
- こうしたモデルのレベルを体系化するような定義を扱う際には慎重になるべきだ。こうした定義が有効な場合もあるが、単に混乱を引き起こすことも多い。
- 「モデル」という用語を直感的に使いたいならなおさら慎重に。
- Fowler自身は、「モデル」を「多くの物事(インスタンス、スキーマ、概念、表現…)を含むもの」として考えることが多い。これらのうちどれを指すかは、文脈や背景によって異なる。
- Fowlerは、メタモデルを相対的な意味を表す用語として使う方が便利で、絶対的な意味を表さないほうが良いと考えている。
言語 †
- MDD概念ではDSLの概念をどのようにして扱っているのか?
- 例えば、Fowler家の照明とスイッチを表現したUMLのインスタンス図と独自の図について、MDD Guyは「これらのメタモデルは言語の抽象構文であり、2つの図はこの言語の異なる具象構文だ」と考える。
- これは、プログラミング言語のコミュニティからすると非常に奇異な見方。
- 同じ意味モデルを構築できる複数の(表現の異なる)DSLは、同じDSLの異なる具象構文なのだろうか、それとも同一のモデルに変形可能な別々のDSLなのだろうか?
- 言語というのは人間のコミュニケーションのためにある。言語が異なるかどうかを決めるのは人間であり、人間が使って異なると思えるなら異なる言語なのだ。
ファウラーへのフィードバック †
担当者のつぶやき †
みんなの突っ込み †