継承 vs. パラメータ化

指標のパラメータ化とグロタンディーク構成 - 檜山正幸のキマイラ飼育記 (はてなBlog)の応用。

次の3つは同値。

  1. B inherits A where interfaceOf(A) = Δ, interfaceOf(B) = Σ = Δ +> Σ'
  2. B implements (A)Σ'
  3. B realizes (Δ)B' by A where (Δ)B':〚Δ〛→〚Σ〛

別な言い方をすると、次の3つの手法は(原理的には)同値:

  1. クラス継承を使うこと。
  2. パラメータ付きインターフェイスの具現化インターフェイスを実装すること。
  3. パラメータ付きクラスを具現化すること。

上で使った書き方:

  • ナニヤラ where アーダコーダ : ナニヤラに含まれる未定義語・記号をアーダコーダと後から説明・定義。

背後の定義:

  1. B inherits A :⇔ B implements Σ, A implements Δ, Σ = Δ +> Σ'
  2. A implements Δ :⇔ A ∈0 〚Δ〛 where 〚Δ〛はインターフェイスΔのクラス圏=Δの型クラス
  3. B realize F by A :⇔ B = F(A)

呼び名:

  1. Δ, Σ : インターフェイス。意味はクラス圏。
  2. Σ' : インターフェイス断片
  3. A, B : クラス定義またはクラス実体。A と 〚A〛 の区別を曖昧化している。意味はクラス実体=クラス圏の対象。
  4. B' : クラス定義断片。意味は定義できない。
  5. (Δ)Σ' : パラメータ付きインターフェイス。意味はインデックス付き圏。
  6. (A)Σ' : パラメータを具現化したインターフェイス。意味は、インデックス付き圏の値としての圏。
  7. (Δ)B' : パラメータ付きクラス、抽象クラス。意味はクラス圏のあいだの関手。
  8. (A)B' : 関手の値としてのクラス。

オマケ:

  • 集合圏=集合を対象とする圏
  • 行列圏=行列を射とする圏
  • しりとり圏=しりとり結合を結合とする圏
  • モノイド圏=モノイド構造を持つ圏
  • モノイドの圏=モノイドを対象とする圏