Hatena::ブログ(Diary)

西尾泰和のはてなダイアリー

2012-04-10

Alloyガール4

Alloyガール1Alloyガール2Alloyガール3の続き。

StateManagerにつながってないStateは良いのか悪いのか?

JS: Stateが3つの例だけが出るようになったー

僕: うんうん、よかったね

JS: でもー、さっき全パターン表示した時に気づいたんだけど、StateManagerにつながってないStateがあるよ?

f:id:nishiohirokazu:20120410110831p:image

Alloy: 何か問題でも?

JS: えっ?

Alloy: あなたがモデリングしようとしている対象で、StateがStateManagerに属していない状態があるの?ないの?それ次第でしょ?

JS: み?

僕: つまり、実装で表現するなら下のどっちなのか、って話だね

// A:
var state = create_new_state();
state_manager.add("state_name", state)
// B:
state_manager.create_new_state("state_name")

JS: なるほど、Aの実装だとStateManagerに属していないStateがあってもおかしくないのか。

僕: そういうこと。どちらを選ぶか、は設計判断だね。どっちを選ぶのが正しいのかは状況による。

JS: ちょっとどういう実装にしたか見てくるー。あ、Bにしてた!

僕: そうか、じゃあ「すべてのStateはStateManagerに属している」って事実があるわけだね。

JS: うん!

事実の宣言

僕: じゃあ事実を宣言しよう。

one sig StateManager {
	state: set State
}

sig State {}

fact {
	all s: State | s in StateManager.state
}

run {
} for exactly 3 State

JS: factってのが「事実」?

僕: そう。常にtrueになるような式をここに書くんだ。中身の「all s: State | …」は「すべてのState sについて…が成り立つ」って意味だよ。

JS: で、StateManaerのstateの中にsが入っている、って宣言してるのね。

僕: そうそう。これで実行すると「exactly 3 State」ってスコープにしているから、1個のStateManagerと3個のStateがつながったモデルが出てくる。Nextを押すと解がそれ1個だってわかるね。

JS: StateとStateManagerがちぎれてる例が出なくなったね!

f:id:nishiohirokazu:20120410111138p:image

次回予告

Alloy: まどろっこしいなぁ。それって「すべてのStateは必ず1つのStateManagerに属している」ってことじゃないの?

one sig StateManager {}

sig State {
	belong: StateManager
}

run {} for exactly 3 State

JS: そうとも言うー?

僕: いや、でもStateManagerからたどりたいじゃない?

Alloy: たどる?何を言っているのかしら。もしかしてStateManager.stateがStateManagerのメンバ変数だとか、State.belongがStateのメンバ変数だとか勘違いしているんじゃない?

僕: えっ、違うの?

Alloy: ぜんぜん違う。オブジェクト指向に毒されているわね。

inajobinajob 2012/04/10 23:42 おー そうかなるほど State->StateManager と書くのが自然なのか…

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/nishiohirokazu/20120410/1334023635