抽象によるソフトウェア設計 第6章 事例 その2

今日は 6.2 ホテルの客室施錠 からです。

  • 「再コード可能錠」を使った使い捨て客室鍵の運用管理のシステムのモデル化
    • 錠前が疑似乱数列を用いて「現在の鍵の組み合わせ」と「次の鍵の組み合わせ」を持っており、「次の鍵」で開かれると状態が更新される
    • やはり Time シグネチャを導入
    • Key も ordering で順序つきに
    • Room, Guest をシグネチャ、FrontDesk を一元シグネチャとして宣言
    • Room <: keys in Room lone -> Key => Room と Key を関連付ける keys フィールドが単射であることを表現
    • 客が部屋を空ける時の述語は、錠前(つまりRoom)の状態変化と、他の状態が変化しないことを制約として記述する
    • チェックアウトは単に FrontDesk の客室の状態を変更するだけ(この状態ではまだ錠前の状態は変化してない)
    • チェックインは FrontDesk の客室と鍵番号の状態を変更し、客に鍵を渡す(Guest.keys に追加される)。この時もまだ錠前の状態は変化していない
    • Traces で時系列でチェックイン、入室、チェックアウトが連なることを宣言
      • first は初期化の述語(init)で初期化、最後の時刻を除く(Time - last)を忘れない
    • モデルの中で、不正な入室ができないことは明示的には宣言されていない(入室の述語 entry の前提条件で暗に導かれる)

今日はホテルの例のモデリングまで。続きの解析は次にします。