Alloyガール2
Alloyガール1の続き。
僕: ただいまー
Alloy: あら、随分長い間保健室にいたのね。何してたの
僕: それはもうJavaScriptとイチャイチャと…って何言わすねん
Alloy: 冗談よ。
僕: …。
JS: ねえねえ、StateManagerが2個ある問題を解決しようよー
僕: そうだったそうだった。
StateManagerは1個である
僕: じゃあそういうわけで、StateManagerは1個だと宣言することにしましょう。
JS: えっと、コンストラクタをプライベートにするんだよね。
僕: いや、それJavaだし。
JS: あれ?objectって宣言するんだっけ??
僕: それはScalaか?
Alloy: 前回oneだって言ったじゃないの。聞いてなかったの?
JS: oneってどこに書くの?
Alloy: ここよ
one sig StateManager { state: State } sig State {} run {}
JS: run {}のところに書くんじゃなかったの?
Alloy: そこに書きたいのであればこうね
sig StateManager { state: State } sig State {} run { one StateManager }
JS: どう違うの?
Alloy: 等価だけど何か?
僕: んー、例えばrunを複数個書いた時に、どれを実行するかはメニューから選べるから、オプションの違う探索を使い分けたい時とかにrunの述語の方に書くといいのかな?
JS: うーん、そんなめんどくさいことするかなぁ
僕: うむむ…。
JS: まあいいやー、ようするにrun {}の方に書いてあるのはなんか一時的みたいなー、常に使われるわけじゃないみたいなー、そんな感じね!
僕: うん、まあ、それでいいや。
Stateは0個以上
Alloy: ところでStateManagerとStateの関係が1対1でもいいのかしら
JS: えっ?
Alloy: stateの宣言に何も修飾がついていないから、これはデフォルトで1対1の関係よ
sig StateManager { state: State }
JS: それは困るなー。
Alloy: 0個以上ならset、1個以上ならsome、0または1個ならloneね。
JS: どこに書くの?
Alloy: こう
sig StateManager { state: set State }
JS: 実行してみよう!エイッ☆
JS: わー、それっぽいものができたよー
僕: ちなみにShow Metamodelすると
JS: メタモデルがShowするんだね!
僕: 何の説明にもなってないぞそれ…