|
International Olympic Committee 国際オリンピック委員会 =========================== 「 IoC 」を含む部分一致用語の検索リンク〔 1 件 〕 ・IOC : International Olympic Committee 国際オリンピック委員会
ソフトウェア工学において、制御の反転(Inversion of Control、IoC)とは、コンピュータ・プログラムの中で、個別の目的のために書かれたコード部分が、一般的で再利用可能なライブラリによるフロー制御を受ける形の設計を指す。この設計を採用した ソフトウェアアーキテクチャは、伝統的な手続き型プログラミングと比べると制御の方向が反転している。すなわち、従来の手続き型プログラミングでは、個別に開発するコードが、そのプログラムの目的を表現しており、汎用的なタスクを行う場合に再利用可能なライブラリを呼び出す形で作られる。一方、制御を反転させたプログラミングでは、再利用可能なコードの側が、個別目的に特化したコードを制御する。 制御の反転は、プログラムのモジュール化を促進して、その拡張性を高めるために用いられ 、オブジェクト指向プログラミングやその他のプログラミングパラダイムにおいて応用されている。「制御の反転」という用語は ロバート・マーティンとマーティン・ファウラーによって広められた。この用語は依存性反転原則とは関係しているが異なるものである。依存性反転原則は、共有された抽象化を通じて、高次と低次の抽象化レイヤー間の結合度を下げることを示している。 従来からのプログラミングでは、フローはコードの中核部分で制御されている。IoCを使うと、これが全く変わってくる。呼び出し側は応答を得るが、いつどのようにして応答を得るかは呼び出し側が制御できない。逆に呼び出された側がいつどのようにして応えるかを決定する。 == 概要 == 従来式のプログラミングでは、例えば、あるアプリケーションのmain関数が、メニューライブラリ内の関数を呼び出して、利用可能なコマンドの一覧を表示し、その中のどれか一つの機能をユーザーに選ばせる〔Dependency Injection .〕。するとそのライブラリはユーザが選んだ項目を、関数呼び出しに対する戻り値として返し、するとmain関数がその戻り値を使って、関係する命令を実行する。このスタイルはテキストユーザインタフェースでは一般的である。たとえば、電子メールクライアントであれば、スクリーン上に「新着メールを読み込む」、「このメールに返信する」、「新規メール作成」などのコマンドが表示されており、ユーザがいずれかのコマンドを選択するまで、プログラムの実行はブロックされた状態になる。 一方、制御の反転を使うと、このプログラムは、汎用的な振舞いやグラフィック要素を持っているソフトウェアフレームワークを使って書かれることになるだろう。そうしたフレームワークには、たとえばウィンドウシステムや、メニュー、マウス制御などが既に組み込まれている。個別に開発するコードは、フレームワークの「空白部分を埋める」ものになる。たとえば、メニュー項目の一覧を与えるとか、それぞれのメニュー項目に対応するサブルーチンを登録するといったものだ。一方、ユーザの操作を監視していて、ユーザがメニュー項目を選択したときに、それに対応するサブルーチンを呼び出すのはフレームワークの側だ。メールクライアントの例で言えば、フレームワークはキーボードとマウスの両方の入力を追う事が出来ていて、いずれかの方法によりユーザがコマンドを実行した場合に、その命令を呼び出す。それと同時に、新着メッセージがないかどうかを見るためにネットワーク・インターフェイスも監視しており、何らかのネットワーク活動を検知した場合には画面を更新する。それと同じフレームワークが、表計算プログラムやテキストエディターの骨組にも利用できる。逆に、フレームワークは電子メールクライアントや、表計算や、テキストエディターについては何も知らない。それらの機能の実現には個別に実装されたコードを使っているからである。 制御の反転ということは、再利用可能なコードと、個別目的のためのコードは、たとえそれらが一つのアプリケーションの中で一緒に動くものであるとしても、それぞれ独立したものとして開発されるということを暗黙的に言っている。ソフトウェアフレームワーク、コールバック、スケジューラ、イベントループ、依存性の注入は、制御の反転の原則に従ったデザインパターンの例である。しかし、制御の反転という用語は、オブジェクト指向プログラミングの文脈の中で最もよく使われる。 制御の反転は以下のような設計目的のために使われる: * あるタスクの実行を実装から分離するため * あるモジュールを、目的とするタスクだけに集中させるため * モジュールを作る際に、他のシステムが何をどのようにするかについて仮定しながらコーディングすることから解放し、そのかわり契約に依拠してコーディングするため(契約プログラミング) * モジュールを置き換える際の副作用を予防するため 制御の反転は冗談として時々「ハリウッドの原則」と呼ばれることもある。つまり「君の方から連絡してこないで。君が必要な時はこっちから連絡するから」ということである。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「制御の反転」の詳細全文を読む 英語版ウィキペディアに対照対訳語「 Inversion of control 」があります。 スポンサード リンク
|