抽象データ型(ADT)とは
抽象
データ型(Abstract Data Type: ADT)とは、
データ構造とそれに対する操作をセットで定義した
データ型のことです。通常の
データ型では、変数に値を束縛しますが、抽象
データ型では、
データ構造と操作のまとまりが値に相当します。
抽象
データ型を使用しない場合、
データ構造や操作のアルゴリズムを変更すると、ソースコード全体に影響が及び、修正が困難になることがあります。しかし、抽象
データ型では、データとその操作が一体化されているため、実装部分を変更するだけで修正が完了します。
抽象
データ型の概念は、1960年代の
構造化プログラミングの時代に、すでにその萌芽が見られました。段階的詳細化や制御構造の利用とともに、
データ構造とコードの連携、
データ構造の変更によるソースコードの散在といった問題への対処が議論されました。
1974年、
バーバラ・リスコフが提案したプログラミング言語CLUにおいて、データ抽象の具体的な手法として抽象
データ型が導入されました。
インターフェースと実装の分離
抽象
データ型は、実装を隠蔽するインターフェースを提供します。ユーザーは実装ではなくインターフェースに関心を持つため、実装は将来的に変更される可能性があります。
抽象
データ型の強みは、実装がユーザーから隠蔽されていることです。インターフェースのみが公開されるため、抽象
データ型は様々な方法で実装できます。インターフェースに忠実である限り、ユーザープログラムは影響を受けません。
例えば、二分探索木という抽象
データ型は、
二分木、
AVL木、赤黒木、配列など、様々な方法で実装できます。しかし、どの実装であっても、「挿入」「削除」「検索」といった同じ操作が可能です。
抽象
データ構造とは、具体的な
データ構造の実装に依存せず、操作の集合とその計算量によって定義されるデータのための抽象的な領域のことです。具体的な
データ構造の選択は、アルゴリズムの効率的な実装に重要ですが、抽象
データ構造の選択は、効率的なアルゴリズムの設計とその計算量の推定に不可欠です。
抽象
データ構造の概念は、プログラミング言語理論で用いられる抽象
データ型の概念と非常に密接です。多くの抽象
データ構造や抽象
データ型の名前は、具体的な
データ構造の名前と同じです。
有理数は、コンピュータ上で直接扱うことができません。そこで、
有理数を抽象
データ型として定義します。
コンストラクタ:
分子 a と分母 b の2つの整数を用いて、
有理数のインスタンスを作成します。
関数:
加算、減算、乗算、除算、指数計算、比較、約分、実数への変換などの関数を定義します。
例えば、
有理数 a/b と c/d の乗算は、ac/bd と定義されます。完全な記述のためには、それぞれの関数の入力、出力、実行前条件、実行後条件、抽象
データ型に対する仮定も記述する必要があります。
まとめ
抽象
データ型は、データの操作と構造を一体化し、実装の詳細を隠蔽することで、ソフトウェアの保守性、柔軟性、再利用性を高めるための重要な概念です。プログラミングにおける抽象化の原則を体現するものであり、大規模なソフトウェア開発において不可欠な要素となっています。
参考文献
落水 浩一郎『ソフトウェア工学実践の基礎 -分析・設計・プログラミング』日科技連出版社、1993年。
飯泉 純子, 大槻 繁『ずっと受けたかったソフトウェア設計の授業』翔泳社。
D.L.Parnas (1975), Use of the concept of transparency in the design of hierarchically structured systems
D.L.Parnas (1971), Information Distribution Aspects of Design Methodology
B.H.Liskov, S.N.Zilles (1974), Programming with Abstract Data Type
Niklaus Wirth (1971), Program Development by Stepwise Refinement
N.Gehani (1980), Program Development by Stepwise Refinement and Related Topics
二木 厚吉 (1996), 代数モデルの基礎
鳥居 宏次 , 二木 厚吉 , 真野 芳久 (1984), プログラミング方法論の展望
二木 厚吉、中川 中 著「第4章:抽象
データ型とOBJ2」、井田 哲雄、田中 二郎 編『続 新しいプログラミング・パラダイム』1990年。
関連項目
OBJ
ジョセフ・ゴーグエン