抽象化 (計算機科学)
制御抽象化はプログラミング言語を使う主たる目的の1つである。コンピュータが理解する操作は極めて低レベルであり、メモリのある場所から別の場所へ何ビットかを移動させ、2つのビット列を加算するといったことでしかない。プログラミング言語を使うことでこれをもっと高いレベルに変換する。例えば、次のようなプログラム内の文(式)があるとする。
a := (1 + 2) * 5
人間にとっては、これは非常に単純で明らかな計算である(1 足す 2 は 3、これに 5 をかけて 15)。しかし、これを評価するには低レベルの実行ステップに落とし込まねばならないし、計算結果である 15 を変数 "a" に代入するという作業も複雑である。数値は二進数表現に変換され(これも大方の予想よりも複雑な作業である)、(コンパイラやインタプリタが)計算をステップに分解して機械語の命令列に直す(機械語あるいはアセンブリ言語は一般のプログラマにとっては直観的に理解可能なものではなく、その内容は通常の加算や乗算といった人間の考える算術とは趣きが異なる)。そして、計算結果の "15" を "a" というラベルの付いた変数に格納するが、実際には物理メモリか仮想メモリ上のあるアドレスのメモリ位置がそれに対応しており......などなどである。
制御抽象化なしでは、プログラマは機械語レベルでレジスタやメモリアドレスを指定してプログラムを書かねばならない。その場合2つの深刻な結果を招く。第1に似たような機能を毎回コーディングしなおさなくてはならなくなる。第2にプログラマは特定のハードウェアや命令セット向けにプログラムを書くしかなくなる。
異なったレベルの抽象化による設計は次のことを提供する。
設計を劇的に単純化する
様々な役割の人物がその役割にあった抽象化レベルで効率的に働くことを可能にする
これはシステム設計やビジネスプロセス設計に使われる。一部のモデリング言語は複数の抽象化レベルを含む設計を生成する。
計算機科学における「抽象化レベル」または「抽象化層」の概念では、各レベルは同じ情報やプロセスの異なったモデルとなっているが、特定領域に適用可能なオブジェクトや構成のユニークな集合に関する表現体系を使う。レベルの高いほうはより抽象的であり、レベルが下るに従ってより細かく詳細になっていく。例えば、電子回路による論理ゲート、論理ゲート上のバイナリ、バイナリ上の機械語、機械語上のプログラミング言語、プログラミング言語上のアプリケーションソフトウェアやオペレーティングシステムといった階層である。各レベルには実体があるが、ある程度自己完結的な言語とすることで、下位レベルに完全に依存しないようにできる。