抽象化 (計算機科学)
最も高いレベルの抽象化はデータベースの一部だけを記述する。論理レベルの構造はある程度単純化されているとしても、巨大なデータベースに格納されるデータの多様性のためにある程度の複雑さが残存している。データベース利用者の多くはデータベース内の全情報を必ずしも必要としない。むしろ一部のデータだけにアクセスすることが多い。ビューレベルの抽象化により、利用者とシステム間のやりとりが単純化される。システムは1つのデータベースについて複数のビューを提供する。
プログラミング言語は、その言語の応用分野によってそれぞれ異なる抽象化を行う。例えば、次のような抽象化がある:
オブジェクト指向プログラミング言語(C++、Javaなど)での抽象化の概念は、必要に応じて virtual や abstract といったキーワードを使って宣言することである。このような宣言をした後、プログラマはその宣言に沿ってオブジェクトをインスタンス化するためにクラスを実装しなければならない。
関数型言語では、関数に関連した抽象化が一般的である。例えばラムダ計算、高階関数などである。
Lindaという言語では「サーバ」や「共有データ空間」といった概念を抽象化し、分散プログラミングを実現する。
構造化プログラミングでは、複雑なプログラム作業を小さい部分に分割し、コンポーネント間に明確なインタフェースと制御フローを導入し、副作用的に複雑さを低減させる。
単純なプログラムでは、ループからの脱出点を明示的に1つにするようコーディングするとか、関数や手続きからの脱出点を1つにするといった工夫である。
大きなシステムでは、複雑なタスクを多数のモジュールに分割することになるだろう。例えば、港湾事務所での船員への給与支払い業務システムを考えてみよう。
最も高いレベルには、典型的なエンドユーザー操作のメニューがある。
その下に、船員の新規採用や退職、小切手の印刷といった作業のための独立した実行ファイルやライブラリがある。
各独立コンポーネントは多数のソースファイルから構成され、それぞれのファイルには問題の一部に対応するプログラムコードが含まれ、他のプログラムとある決まったインタフェースを持つよう設計される。新規採用プログラムには、データを画面表示するプログラムやデータベースとのインタフェースが含まれるだろう(それらは独立したサードパーティーライブラリや静的にリンクされたライブラリルーチン群かもしれない)。
また、港湾と船の間でデータを交換する処理が必要とされる場合も考えられ、その場合はさらに様々なコンポーネントを必要とする。
このような階層によってコンポーネント毎に実装の詳細を隔離する効果が生まれる。そして、その考え方を重視し、拡張して生まれたのがオブジェクト指向プログラミングである。