diff --git a/courseA/DTRAM.html b/courseA/DTRAM.html index 9394d66..945bf55 100644 --- a/courseA/DTRAM.html +++ b/courseA/DTRAM.html @@ -79,10 +79,10 @@

DTRAM では,Web サービスと同様に階層化されたリソースを扱うことができます.リソースは状態を持ち,その状態を変更することができます.アドレス帳の仕様は次のような階層化されたリソースで表すこととします.

下の仕様記述を見るとわかると思いますが,チャンネル Init を流れるメッセージを受け取るリソースは book.owner です.同様に,チャンネル Add 内のメッセージを受け取るリソースは book.addr,チャンネル Del 内のメッセージを受け取るリソースも book.addr になります.

diff --git a/courseA/IM_Alloy.html b/courseA/IM_Alloy.html index 058a963..94f270a 100644 --- a/courseA/IM_Alloy.html +++ b/courseA/IM_Alloy.html @@ -27,10 +27,14 @@

sig:

Alloy では,商品id の集合を ItemId,商品名の集合を Name, - 商品全体を保管する倉庫の集合を Inventory,商品の集合を Item で表します.
+ 全商品を保管する倉庫の集合を Inventory,商品の集合を Item で表します.
以下のモデルでは sig を用いて,ItemIdNameInventoryItem の順番にこれらの集合を宣言しています.
+

+

Inventory には,ItemId から Item への対応関係が itemDB フィールドとして定義されています.
ここで,ItemId の右側の lone は1つの Item に対応する ItemId がたかだか1つしかないことを示しています.
+

+

Item の宣言では,商品名を表す nameName のインスタンスとして, 在庫数を表す countInt のインスタンスとして定義されています.

@@ -39,15 +43,21 @@

最初の述語として記述されている init は,Inventory の インスタンスである its が初期化されていることを示しています.
+

+

次の itemRegistration は,itemId に対応する商品を登録する前の Inventory のインスタンス its と, 登録した後のインスタンス its' の関係を述語として定義しています.ここで quantity は初期数量,n は商品名を示しています.
- また,述語定義中の some it: Item は,its のデータベースに登録されていない Item のインスタンス it が存在していることを示しており, - 直観的には Item のインスタンスの生成を示しています.
+ また,述語定義中の some it: Item は,its のデータベースに登録されていない Item のインスタンス (it) が存在していることを示しており, + 直観的には Item のインスタンスが生成されたことを示しています.
+

+

receivingOrShipping では itemId で登録されている商品に対して入荷か出荷を行った際の操作前の Inventory のインスタンス its と, 操作後のインスタンス its' の関係を述語として定義しています.ここで quantity が正の値のときは入荷,負の値のときは出荷を表しています.
- また,述語定義中の some it': Item は,its のデータベースに登録されていない Item のインスタンス it' が存在していることを示しており, - 直観的には,Item のインスタンスが,出荷か入荷を行うことによって複製されたことを示しています.
- 最後の execute では,inititemRegistractionreceivingOrShipping を + また,述語定義中の some it': Item は,its のデータベースに登録されていない Item のインスタンス (it') が存在していることを示しており, + 直観的には Item のインスタンスが,出荷か入荷を行うことによって複製されたことを示しています.
+

+

+ 最後の execute では,inititemRegistractionreceivingOrShipping を この順で呼び出す操作を定義しています.
run では,execute を呼び出して仮想実行を行います. この実行の際に,Int で8bitの整数を扱うことができるよう末尾に 8 Int という記述を付け加えています. @@ -134,8 +144,12 @@

左下にある Inventory2($execute_its) は execute 述語中の変数 its で参照される Inventory のインスタンスであり,init 述語を満たしているため, まだ何の商品(Item)も登録されていない状態になっています.
+

+

次に,1番上の段の左にある Inventory1($execute_its') は変数 its' で参照される Inventory のインスタンスで, its で参照される Inventory のインスタンスに対して,Item のインスタンス Item1(itemRegistration_it) を初期数量100個で登録したインスタンスになっています.
+

+

Inventory1 の右にあるInventory0($execute_its'') は少し複雑です.
まず,Inventory1 において,ItemId で参照される Item のインスタンスは Item1 です.このインスタンスに対して50個出荷した後の Item のインスタンスが Item0 になります.
ここで Item0 の在庫数が50個に減少していることに注意して下さい.
diff --git a/courseA/IM_DTRAM.html b/courseA/IM_DTRAM.html index b5c9284..d334aec 100644 --- a/courseA/IM_DTRAM.html +++ b/courseA/IM_DTRAM.html @@ -27,17 +27,21 @@

DTRAMでは,InventoryManagement の仕様を以下のような階層化されたリソースで表します.

DTRAM では,InventoryManagement のモデルを以下のようなチャンネル単位で記述していきます.
商品登録用のイベントチャンネルを ItemRegistrationitemId で登録されている商品に対して入荷か出荷を行うためのイベントチャンネルを ReceivingOrShipping(itemId:Str) として宣言しています.
+

+

ItemRegistration チャンネルでは inventory リソースが,メッセージ registerItem(itemId, itemName, quantity) を受け取ると, リソースの状態が itemDB から insert(itemDB, itemId, {"count": quantity, "name": itemName}) に変わることを示しています.
ここで,insert() 関数は,第1引数に渡された写像に対し,第2引数と第3引数の対応を追加した結果得られる写像を返す関数です.
また {"count": quantity, "name": itemName} は,"count""name" をキーに持つ JSON オブジェクトを表しています.
+

+

ReceivingOrShipping(itemId:Str) チャンネルでは inventory.{itemId}.count リソースがメッセージ receiveOrShip(quantity) を受け取ると, 遷移前の状態 prev_quantityprev_quantity + quantity に変わることを示しています.

diff --git a/courseA/InventoryManagement.html b/courseA/InventoryManagement.html index aa2cb09..1103f1f 100644 --- a/courseA/InventoryManagement.html +++ b/courseA/InventoryManagement.html @@ -13,10 +13,10 @@

InventoryManagement の仕様

- は,ある酒屋の在庫管理を行うシステムです.酒類の商品毎に在庫数を管理することができます. + InventoryManagement は,ある酒屋の在庫管理を行うシステムです.酒類の商品毎に在庫数を管理することができます. InventoryManagement の仕様は次の通りです.