抽象データ型

提供: testwiki
ナビゲーションに移動 検索に移動

テンプレート:参照方法

抽象データ型(ちゅうしょうデータがた、テンプレート:Lang-en-short、ADT)とは、データ構造とその操作手続きを定義したデータ型、またはデータ抽象[注釈 1]の方法の1つ。通常のデータ型であれば変数宣言で変数に束縛されるものは値であるが、抽象データ型の世界において値に相当するものはデータ構造とその操作[注釈 2]のまとまり[注釈 3]である。

抽象データ型を用いない場合、データ構造またはデータの操作手続きのアルゴリズムの変更を行うとソースコード中にその変更部分が散在してしまい規模によっては修正困難となるが、データとその操作がひとまとめに記載されることになる抽象データ型においては、型の定義における実装部分を変更するだけで修正が完了する。

概要

1960年代の構造化プログラミングの時点で既に、(よく知られている)段階的詳細化といった手法や制御構造の利用の励行などの他、データ構造とコードを連携させ、データ構造の変更を行うと変更部分がソースコード中に散在してしまうというそれ以前のプログラミングにおける問題点への対処にもなる、データ抽象に関する議論は現れている(『構造化プログラミング』(日本版はサイエンス社、1975年)の、全体の約半分はダイクストラによる考察だが、残り約半分はホーアダールSimulaの設計者)によるデータ論である)。抽象データ型はデータ抽象の具体的手法として1974年にバーバラ・リスコフの提案した言語CLUにおいて提案された。

インタフェースと実装の分離

プログラムが実装されたとき、抽象データ型は実装を隠蔽するインタフェースを表す。実装は将来において変更されうるので、抽象データ型のユーザーは実装ではなくインタフェースに関心がある。

抽象データ型の強みはユーザーから実装が隠蔽されていることである。インタフェースのみが公開されるのである。このことは、抽象データ型がいろいろな方法で実装されうることを意味するが、インタフェースに忠実な限りユーザープログラムは影響を受けないのである。

例えば、二分探索木抽象データ型はいくつかの方法で実装できる。例えば、二分木AVL木赤黒木、配列である。しかし実装に関わらず二分探索木は「挿入」「削除」「検索」といった同じ操作が可能である。

抽象データ構造

抽象データ構造とは、実際のデータ構造による実装に関わらず、操作の集合とその計算量により定義されるデータのための抽象的な領域のことである。

具体的なデータ構造の選択がアルゴリズムの効率的な実装にとって重要である一方、抽象データ構造の選択は効率的なアルゴリズムの設計とその計算量の推定にとって極めて重要である。

この概念はプログラミング言語の理論で用いられる抽象データ型の概念に非常に近い。多くの抽象データ構造や抽象データ型の名前は具体的なデータ構造の名前と一致する。

具体例

抽象データ型としての有理数

有理数は計算機においてはそのまま扱うことはできない。有理数の抽象データ型は以下のように定義できる。

コンストラクタ: 2つの整数 ab を用いて有理数の抽象データ型のインスタンスを作成する。ここで a は分子で b は分母である。

関数: 加算,減算,乗算,除算,指数計算,比較,約分,実数への変換

完全な記述にするためには、それぞれの関数はデータに言及して記述されるべきである。例えば、有理数a/bc/dを乗算するときには結果はac/bdと定義される。通常は入力、出力、実行前条件、実行後条件、抽象データ型に対する仮定も記述される。

脚注

テンプレート:脚注ヘルプ

注釈

テンプレート:Notelist

参考文献

関連項目

テンプレート:Normdaten

sv:Datatyp#Abstrakta typer
引用エラー: 「注釈」という名前のグループの <ref> タグがありますが、対応する <references group="注釈"/> タグが見つかりません