抽象データ型

メモ。

従来のプログラミングでは,機能分割法を用いて,手続きのみを抽象化し,データの抽象化は陽に行なわなかった。手続きの集まりとして表現される機能は,数学的な関数として表され,プログラミングは上位の機能が下位の機能を呼び出す形で進められ,機能の階層構造を構築する。その目的は,多くの共通となる機能や手続きを共通モジュールとして割り出すことであった。ところが,手続きのみを抽象化し,データの抽象化を怠ったために,データは手続きに従属して,あるデータを扱っている手続きが複数存在し,それらがプログラム全域に散在する結果をもたらした。そのため,データの構造が変化すると,そのデータを扱っている手続きをプログラム全域に渡って見直す必要が生じる。共通となる機能や手続きの割り出しは,引数と復帰値のみを扱い,他のデータに副作用を及ぼさないような手続きに限定されてしまい,良好な共通モジュールの形成および再利用に貢献することが困難であった。

...

 このような問題を解決しようとしたのが抽象データ型である。この抽象データ型は1970年代の中頃に提唱され,その利点は情報隠蔽(information hiding)やカプセル化(encapsulation)など,さまざまな言葉で表現される[7]。データとそれに対する手続きを一体化し,データへのアクセスは決められた手続きのみによって行なわれるようにした。この一体化することをカプセル化と呼び,あるデータを扱っている手続きがプログラム全域に散在することを防ぎ,情報の局所化を促進する。また,決められた手続き以外には,内部のデータをアクセスできないので,必要以上に情報が漏れることがない。このことを情報隠蔽と呼ぶ。これにより,データの構造などを変更しても,それを利用する場所に変化を及ぼさなくなる。抽象データ型は,オブジェクト指向でいうところのオブジェクトとほぼ等しい。