制御の反転
従来のプログラミングでは、ビジネスロジックのフロー制御は、互いに静的結合したオブジェクト群により決められる。制御の反転を使った場合、フロー制御はプログラム実行中に構築されたオブジェクト・グラフに依存して決まる。抽象化を媒介としてオブジェクト間の相互作用の関係を定義することによって、そのような動的なフロー制御が可能となっている。この実行時結合(遅延結合)は依存性の注入あるいはサービス・ロケータ・パターンのような仕組みにより実現される。但し、制御の反転を使う場合においても、コードを直接参照する代わりに外部の設定ファイルを読んで実行すべきコードを探す仕組みにするのであれば、コンパイル中にコードを静的に関連づけることはありうる。
依存性の注入において、依存する側のオブジェクトあるいはモジュールは、その依存先のオブジェクトと、実行時において結合される。特定のどのオブジェクトがプログラム実行中にその依存関係を満たすことになるのかは、静的コード解析を行うコンパイル時には知りようがない。ここではオブジェクト間の相互作用を題材に説明したが、この原則はオブジェクト指向プログラミング以外の他のプログラミング手法にもあてはまる。
実行中のプログラムでオブジェクトどうしを相互に結び付け合うためには、結び付けられるオブジェクトどうしが互換性のあるインターフェースを持っていなければならない。例えば、クラスAはその振舞いをインターフェースIに委任しており、IはクラスBにより実装されているとする。このようにしてあれば、プログラムはAとBをインスタンス化した上で、BをAに注入できるのである。