制御の反転
従来式のプログラミングでは、例えば、あるアプリケーションのmain関数が、メニューライブラリ内の関数を呼び出して、利用可能なコマンドの一覧を表示し、その中のどれか一つの機能をユーザーに選ばせる。するとそのライブラリはユーザが選んだ項目を、関数呼び出しに対する戻り値として返し、するとmain関数がその戻り値を使って、関係する命令を実行する。このスタイルはテキストユーザインタフェースでは一般的である。たとえば、電子メールクライアントであれば、スクリーン上に「新着メールを読み込む」、「このメールに返信する」、「新規メール作成」などのコマンドが表示されており、ユーザがいずれかのコマンドを選択するまで、プログラムの実行はブロックされた状態になる。
一方、制御の反転を使うと、このプログラムは、汎用的な振舞いやグラフィック要素を持っているソフトウェアフレームワークを使って書かれることになるだろう。そうしたフレームワークには、たとえばウィンドウシステムや、メニュー、マウス制御などが既に組み込まれている。個別に開発するコードは、フレームワークの「空白部分を埋める」ものになる。たとえば、メニュー項目の一覧を与えるとか、それぞれのメニュー項目に対応するサブルーチンを登録するといったものだ。一方、ユーザの操作を監視していて、ユーザがメニュー項目を選択したときに、それに対応するサブルーチンを呼び出すのはフレームワークの側だ。メールクライアントの例で言えば、フレームワークはキーボードとマウスの両方の入力を追う事が出来ていて、いずれかの方法によりユーザがコマンドを実行した場合に、その命令を呼び出す。