集約

提供: RAD Studio
移動先: 案内検索

コードの再利用と委譲 への移動


集約を使用することで、全体側のオブジェクトの機能をサブオブジェクトによって構成し、同時に実装の詳細は全体側のオブジェクトから隠すという、モジュール化によるコードの再利用を行うことができます。集約では、外側のオブジェクトが 1 つ以上のインターフェイスを実装します。少なくとも IInterface は実装しなければなりません。内側のオブジェクトも、1 つ以上のインターフェイスを実装します。ただし、そのインターフェイスを公開するのは外側のオブジェクトだけです。つまり、外側のオブジェクトが、自分で実装しているインターフェイスと、内側のオブジェクトが実装しているインターフェイスの両方を公開します。

クライアントは、内側のオブジェクトのことを何も知りません。外側のオブジェクト経由で内側のオブジェクトのインターフェイスにアクセスすることは可能ですが、その実装は外からはまったく見えません。つまり、外側のオブジェクト クラスは、内側のオブジェクト クラス型を、同じインターフェイスを実装するクラスであればどのクラスにでも置き換えることができます。同様に、内側のオブジェクト クラスのコードは、それを使用したい他のクラスと共有することができます。

集約モデルでは、委譲を使用して IInterface を実装する場合の規則が明示的に定義されています。内側のオブジェクトでは、IInterface のメソッドの 2 つのバージョンを実装する必要があります。

  • それ自体で IInterface を実装します。ここで独自の参照カウントを制御します。IInterface のこの実装では、外側のオブジェクトと内側のオブジェクトとの関係を管理します。たとえば、その型のオブジェクト(内側のオブジェクト)を作成する場合、作成が成功するのは要求されたインターフェイスが IInterface 型のときだけです。
  • また、内側のオブジェクトが実装して外側のオブジェクトが公開するすべてのインターフェイスに対して、2 番目の IInterface も実装します。この 2 番目の IInterface は、QueryInterface_AddRef、および _Release の呼び出しを外側のオブジェクトに委譲します。外側の IInterface は、"controlling Unknown"(未知の制御側)と呼ばれます。

集約の作成規則については、MS オンライン ヘルプを参照してください。独自に集約クラスを作成するときには、TComObject での IInterface 実装の詳細も参考になります。TComObject は、集約をサポートしている COM クラスです。COM アプリケーションを作成している場合には、基底クラスとして TComObject を直接使用することもできます。

関連項目