オブジェクトの再利用

オブジェクト モデルの重要な目標は、オブジェクト作成者が、他者が独自の実装の一部として提供したオブジェクトを再利用および拡張できるようにすることです。 Microsoft Visual C++ やその他の言語でこれを行う 1 つの方法は、実装の継承を使用することです。これにより、オブジェクトは他の関数をオーバーライドしながら、別のオブジェクトから関数の一部を継承 (「サブクラス」) できます。

従来の実装継承を使用したシステム全体のオブジェクト対話の問題は、実装階層内のオブジェクト間のコントラクト (インターフェイス) が明確に定義されていないことです。 実際には、暗黙的であいまいです。 親オブジェクトまたは子オブジェクトの実装が変更されると、関連するコンポーネントの動作が未定義になるか、実装が不安定になる可能性があります。 すべてのコンポーネントを同時に更新する単一のエンジニアリング チームによって実装が管理できる単一のアプリケーションでは、これは必ずしも大きな問題ではありません。 あるチームのコンポーネントが、他のチームによって構築された他のコンポーネントのブラックボックス再利用を通じて構築されている環境では、この種の不安定性により再利用が危険にさらされます。 さらに、実装の継承は通常、プロセス境界内でのみ機能します。 このため、多くのエンジニアリング チームによって構築されたソフトウェア コンポーネントで構成される大規模で進化するシステムでは、従来の実装の継承は非現実的になります。

再利用可能なコンポーネントを構築する鍵は、オブジェクトを不透明なボックスとして扱えるようにすることです。 これは、別のオブジェクトを再利用しようとするコード部分は、使用されているコンポーネントの内部構造や実装について何も知らないし、何も知る必要がないことを意味します。 つまり、コンポーネントを再利用しようとするコードは、オブジェクトの正確な実装ではなく、オブジェクトの動作に依存します。

ブラックボックスの再利用性を実現するために、COM は、包含/委任集計など、確立された他の再利用可能なメカニズムを採用しています。

Note

便宜上、再利用されるオブジェクトは内部オブジェクトと呼ばれ、その内部オブジェクトを利用するオブジェクトは外部オブジェクトです。

 

これらのメカニズムの両方で、外部オブジェクトがクライアントにどのように表示されるかを覚えておく必要があります。 クライアントに関する限り、両方のオブジェクトはクライアントがポインターを取得できるインターフェイスを実装します。 クライアントは外側のオブジェクトを不透明なボックスとして扱うため、外側のオブジェクトの内部構造については気にせず、また気にする必要もありません。クライアントが考慮するのは動作だけです。

詳細については、次のトピックを参照してください。