Kermetaはメタモデルエンジニアリングのためのモデリングおよびプログラミング言語[1]です。
歴史
Kermeta言語は、2005 年にIRISAの Triskell チーム( INRIA、CNRS、INSA、レンヌ 1 大学の研究者を集めたチーム) 内で Franck Fleurey によって開発されました。
Kermeta 言語は、MOF、OCL、QVTなどの言語から概念を借用していますが、2004 年に Triskell チームの D. Vojtisek と F. Fondement によって実装されたモデル変換言語である BasicMTL からも概念を借用しています。また、Triskell によって作成された最初の変換言語である MTL に関する以前の経験や、UML用の Xion アクション言語からもインスピレーションを受けています。
Kermeta という名前は「Kernel Metamodeling」の略語で、この言語が (メタ) モデリングのコアとして考えられていることを反映しています。この名前のブルトン語の音韻は、Triskell チームの所在地がブルターニュにあることを意図的に反映しています。
KermetaとEclipse上のその実行プラットフォームは現在、 2012年にリリースされたバージョン2.0.4 [2]で利用可能です。これはEclipse Public Licenseに基づくオープンソースです。
哲学
Kermeta は、モデリングおよびアスペクト指向プログラミング言語です。その基礎となるメタモデルはEMOF標準に準拠しています。モデルでもあるプログラムの作成、モデルの変換 (モデルを別のモデルに変換するプログラム) の作成、これらのモデルに対する制約の作成、および実行を目的として設計されています。このモデル アプローチの目標は、「オブジェクト」レベルの上にさらに抽象化のレベルを追加し、特定のシステムを、モデルと呼ばれる明確に一貫した全体を形成する概念 (および概念のインスタンス) のセットとして見ることにあります。
ケルメタはこう述べています。
- モデルの仕様に使用される EMOF のすべての概念。
- モデルの実際の概念、より正確にはモデル タイプの概念 (Jim Steel)。
- モデルおよびメタモデルの記述に適した具体的な構文。
- 2 つのパラダイム: オブジェクトとモデル。
- Eclipse ECore形式への架け橋
特徴
ケルメタ語の主な特徴は次のとおりです。
- 命令形:伝統的な管理構造
- オブジェクト指向: 多重継承、遅延バインディング
- モデル指向: 関連と構成の第一級概念
- アスペクト指向: シンプルなメタモデリングタスク用のシンプルだが強力なウィーバーを統合します。任意の複雑なウィービングは、Kermeta で記述された専用のコンポーザーを使用して実現されます。これにより、プログラマーは既存のメタモデルを拡張できます。特に、動作セマンティクス(操作的または翻訳的) をウィービングすることで、メタモデルに動作を追加できます。
- 契約による設計: 操作は事前条件と事後条件をサポートし、クラスは不変条件を使用します。
- 関数型: 関数と第一級ラムダ式
- 静的に型付け: クラスと操作、関数型の汎用性...
- 完全なイントロスペクション: 実行中にプログラムの完全なモデルが利用できます。
構文
興味がある読者は、Kermeta の Web サイトでさらに詳しい情報を得ることができます。
例 (Kermeta 1.4)
パッケージ fsm ;
ケルメタが必要
kermeta :: standard を使用する
クラス FSM
{
属性 ownState : set State [ 0. .* ] # owningFSM
参照 initialState : State [ 1. . 1 ]
参照 currentState : State
/ ** * FSMを 標準
出力に出力します* /
操作 printFSM ( ) は 、self.ownedState.each
{ s | stdio.writeln ( " State : " + s.name ) s.outgoingTransition.each { t | stdio.writeln ( " Transition : " + t.source.name + " - ( " + t.input + " / " + t.output + " ) - > " + t.target.name ) } } end }
クラス State {
属性 名 : 文字列
参照 owningFSM : FSM #所有状態
属性 outgoingTransition : set Transition [ 0. .* ] #ソース
参照 incomingTransition : set Transition [ 0. .* ] #ターゲット
operation step ( c : String ) : String is do
// 有効な遷移を取得します。
var validTransitions : Collection < Transition >
validTransitions : = outgoingTransition . select { t | t . input . equals ( c ) }
// 有効な遷移が 1 つだけあるかどうかを確認します。
if validTransitions . empty then raise "No Transition!" end
if validTransitions . size > 1 then raise "Non Determinism" end
// 遷移を開始します。
result : = validTransitions . one . fire
end
}
クラス Transition
{
参照 元 : State [ 1. . 1 ] # outgoingTransition
参照先 : State [ 1. . 1 ] # incomingTransition属性出力: String属性入力: String
操作 fire () : String is do
// FSM の現在の状態を更新
source . owningFSM . currentState : = target
result : = output
end
}
参照
参考文献
- ^ Muller, Pierre-Alain; Fleurey, Franck; Jézéquel, Jean-Marc (2005). 「オブジェクト指向メタ言語への実行可能性の組み込み」。モデル駆動型エンジニアリング言語とシステム。コンピュータサイエンスの講義ノート。第 3713 巻。pp. 264–278。doi :10.1007/ 11557432_19。ISBN 978-3-540-29010-0. S2CID 2824834。
- ^ Vojtisek, Didier. 「バージョン 2.0.4 がリリースされました!」。2012 年12 月 3 日閲覧。
外部リンク
- ケルメタ公式サイト
