リスコフの「抽象データ型」について


「A History of CLU」(PDF) の 2. Data Abstraction からの抜粋。

概要

  • 「抽象データ型」という考え方は、リスコフらにより 1972 年の終わりから 1973 年の夏頃までにまとめられた。
  • 「抽象データ型」は、データとオペレーションのセット。
  • データの内部情報へのアクセスはこのオペレーションを介してのみ行える。
  • データの内部情報に関する詳細は隠蔽されている。

成立までの流れ

  • 当時は、プログラミングの効率やコードの質を向上させるための手法に大きな関心が払われていた。
  • 二つの流れが存在。ひとつはダイクストラの構造化プログラミング。もうひとつがモジュール化。
  • モジュール化については、リスコフも自ら「パーティション」という機構を提唱。
  • これはダイクストラの「抽象化レベル」という概念に基づいている。
  • システムは抽象化レベルごとパーティションで表わされ、パーティションはひとつ以上の関数からなる。
  • パーティションに帰属するデータは、関数の呼び出しを介してしか他のパーティションとやりとりできない。
  • 「抽象データ型」は、このモジュール化の考え方をプログラミング言語の「データ型」と結びつけたもの。

おまけ

  • リスコフは「(情報)隠蔽」と「カプセル化」を同じ意味で区別せずに使っている。(上では念のため言い換えた)
  • 「抽象」という言葉を選んだ理由は、それが言語処理系の組み込みではなく、ユーザーが定義すべきものだから。(コンクリートではない、というニュアンスか?)
  • プログラムの、型を用いた抽象化が抽象データ型なら、プロシージャによる抽象化が構造化とも言える。(クックと表現が似ているが、クックの場合はプログラムではなくデータの抽象化手法の区別)
  • 抽象データ型をサポートする言語は、それを実装するための機能を有し、強い型付きでなければならない。

今のところの理解

  • 「抽象データ型」は、モジュールの単位に“ユーザー定義のデータ型”を用いたモジュール化手法の一。
  • 情報隠蔽は、比較的重要(…というより、不可欠)なコンセプトである。
  • 抽象データ型を実装するのに「(SIMULA 67 の)クラス」という機能を用いたのが、ストラウストラップの定義(再定義)した「オブジェクト指向」。つまり「抽象データ型 + クラスの機能」→「カプセル化情報隠蔽を含む)+ 継承、多態性」。