抽象によるソフトウェア設計 第4章 言語 その6

今日は第4章の 4.7 モジュールと多相性からです。

  • 各ファイルの先頭でモジュール宣言(module)
    • モジュール名とファイルパスは一致していないといけない(1モジュール=1ファイル)
  • 他のモジュールのインポートは open で指定
    • open <モジュール名(パス)>
      • 参照する時に <モジュール名(basename)>/<述語等> のように / の前に修飾名をつけて参照して名前の衝突を回避することができる
    • open <モジュール名> as <別名> のように別名を指定してインポートもできる
    • open <モジュール名> [シグネチャ] のように呼ぶパラメータ付きモジュール
      • パラメータはシグネチャC++ のテンプレートみたいな感じ
      • モジュールの宣言も module <モジュール名> [param1, ...] のように宣言する
      • 同じモジュールを異なるパラメータ(シグネチャ)で具現化してインポートできる。ただし別名つきでインポートしないと名前は衝突する(えー)
  • 別のモジュールで宣言したシグネチャにフィールドを追加するなどの拡張はできる。シグネチャの定義が特定のモジュールに閉じ込められるわけではないんですね。便利だけど影響範囲が読めないのでカプセル化のような意味はモジュールにはないと
  • 4.8 整数と算術演算
    • 式 #e は関係 e に含まれるタプルの数を表現し、加減算や比較演算子が使える
    • 組込みのシグネチャ Int があり整数をアトムとして使える
    • しかし Alloy では整数を明示的に使うことはあまりない(整数そのものを利用するより、整数の性質を表現する制約を使うほうが良い)

多相的モジュールのインポートで別名が自動的に生成されないのはイマイチ。
これでえ第4章を終了しました。