抽象化レイヤー(ちゅうしょうかレイヤー、または抽象化層)は、高レベルのリクエストを、そのリクエストを実行するために必要な低レベルのコマンドに変換するメカニズムである[1]。また、ある特定の機能の詳細な実装を隠す手段である。抽象化レイヤーを用いたソフトウェアモデルで有名なものとしては、コンピュータ・ネットワークプロトコルOSI参照モデルや、OpenGLのグラフィック描画ライブラリ、あるいはUNIXで生まれてMS-DOSLinuxなど最近のオペレーティングシステムのほとんどが採用しているバイトストリーム入出力モデルなどがある。

UNIXでは、ほぼすべての入出力を、装置から読み込んだり装置に書き込んだりするバイトの連なりとみなす。装置の独立性を達成するために、ファイルI/O、ソケットI/O、端末I/Oなどでこのバイトの連なりモデルが使われている。アプリケーションが装置に対して読み書きを行う場合、まずその装置をオープンする機能を呼び出す。装置は、端末などの実在する装置の場合もあれば、ネットワークポートファイルシステム内のファイルといった仮想的な装置の場合もある。オペレーティングシステムが装置の物理的な特性を隠蔽し、抽象的なインタフェースを代わりに提供することにより、プログラマは装置を意識せずにバイト列を読み書きするだけでよくなる。個々の装置の読み書きに必要な変換処理は、オペレーティングシステムが行う。

OpenGLのようなグラフィックライブラリのほとんどは、抽象化されたグラフィック装置をインタフェースとして提供している。プログラマが書いたコマンドは、ライブラリによって特定の装置に図形を描く専用コマンドに翻訳される。プロッター用のコマンドと、CRTモニター用のコマンドとは別物だが、グラフィックオブジェクトを描画するための汎用的な命令をグラフィックライブラリが抽象インタフェースとして提供することで、実装や装置に依存したこまごましたことを気にせずにすむ。

計算機科学において、抽象化層とはモデルアルゴリズムを一般化したものであり、いかなる特定の実装からも独立したものである。このような一般化は、各種の実装の間に幅広い共通点があることに基づいている。これらの共通点は、モデルによってうまくカプセル化できる。モデルによるカプセル化とはまた、各種の個別の実装に類似性があることを明確に示すことでもある。よくできた抽象化レイヤーは有益な概念メタファーを純粋な形で取り出し、単純化して提供するので、再利用が容易になり、正しい使い方をすばやく把握できるようになる。

すぐれた抽象化は、どこが抽象的であるべきかも含めて一般化を行う。従って、抽象化レイヤーを利用するアプリケーションが特別な要件や問題を抱えている場合でも、対処を可能にする。

抽象化レイヤーは、複数の抽象化層からなる階層を構成することが多い。OSI参照モデルは7層の抽象化レイヤーから成る。各層が、デジタル通信における各層のニーズに対処しつつ隠蔽することで、さまざまな技術が複雑に絡み合うのを防ぐことができる。

バトラー・ランプソンの有名な格言に「情報工学のあらゆる問題は別のレベルのインダイレクションで解決される」というものがあるが、「インダイレクション」を「抽象化」にわざと置き換えた形でよく引用される。

計算機アーキテクチャー 編集

計算機アーキテクチャーでは、計算機システムは通常次の5つの抽象化層で表される: ハードウェアファームウェアアセンブラオペレーティングシステムプロセス[2]

脚注 編集

  1. ^ Stallings, William (2016). Foundations of modern networking : SDN, NFV, QoE, IoT, and Cloud. Florence Agboma, Sofiene Jelassi. Indianapolis, Indiana. ISBN 978-0-13-417547-8. OCLC 927715441. https://www.worldcat.org/oclc/927715441 
  2. ^ Tanenbaum, Andrew S. (1979) (english). Structured Computer Organization. Englewood Cliffs, New Jersey: Prentice-Hall. ISBN 0-13-148521-0 

関連項目 編集