Aggregation

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Wiederverwendung von Quelltext und Delegation


Aggregation ist eine modulare Möglichkeit zur Wiederverwendung von Quelltext durch Unterobjekte, die die Funktionalität eines enthaltenen Objekts definieren, die Einzelheiten der Implementierung jedoch vor diesem Objekt verbergen. Bei der Aggregation implementiert ein äußeres Objekt eine oder mehrere Schnittstellen. Dieses Objekt muss zumindest IInterface implementieren. Das innere Objekt bzw. die inneren Objekte implementieren auch eine oder mehrere Schnittstellen. Allerdings legt nur das äußere Objekt die Schnittstellen offen. Das heißt, das äußere Objekt legt sowohl die von ihm implementierten Schnittstellen offen als auch jene, die von dem in ihm enthaltenen Objekt implementiert werden.

Für Clients sind die inneren Objekte nicht sichtbar. Obgleich der Zugriff auf die Schnittstellen des inneren Objekts über das äußere Objekt erfolgt, ist deren Implementierung völlig transparent. Deshalb kann die äußere Objektklasse den Typ der inneren Objektklasse mit jeder Klasse austauschen, die eine identische Schnittstelle implementiert. Entsprechend kann der Quelltext für die inneren Objektklassen von anderen Klassen verwendet werden.

Das Aggregationsmodell definiert genaue Regeln für die Implementierung von IInterface durch Delegation. Das innere Objekt muss zwei Varianten der IInterface-Methoden implementieren.

  • Es muss IInterface für sich zur Steuerung seiner eigenen Referenzzählung implementieren. Diese Implementierung steuert über den Referenzzähler des inneren Objekts die Beziehung zwischen dem äußeren und dem inneren Objekt. Soll z.B. ein Objekt vom Typ des inneren Objekts erzeugt werden, wird dieser Vorgang nur dann ausgeführt, wenn die angeforderte Schnittstelle den Typ IInterface besitzt.
  • Das innere Objekt implementiert zudem eine zweite IInterface-Variante für all diejenigen Schnittstellen, die vom äußeren Objekt offen gelegt und ihm implementiert werden. Die zweite IInterface-Implementierung delegiert Aufrufe für QueryInterface, _AddRef, und _Release an das äußere Objekt. Die äußere IInterface-Implementierung wird als Controlling Unknown bezeichnet.

Die Regeln zur Erzeugung einer Aggregation finden Sie in der Online-Hilfe. Wenn Sie Ihre eigenen Aggregations-Klassen erstellen, finden Sie weitere Implementierungsdetails zu IInterface in TComObject. TComObject ist eine COM-Klasse, die Aggregation unterstützt. Wenn Sie COM-Anwendungen entwickeln, können Sie TComObject auch direkt als Basisklasse verwenden.

Siehe auch