Wiederverwenden von Objekten

Ein wichtiges Ziel jedes Objektmodells besteht darin, Objektautoren das Wiederverwenden und Erweitern von Objekten zu ermöglichen, die von anderen als Teile ihrer eigenen Implementierungen bereitgestellt werden. Eine Möglichkeit, dies in Microsoft Visual C++ und anderen Sprachen zu tun, ist die Implementierungsvererbung, die es einem Objekt ermöglicht, einige seiner Funktionen von einem anderen Objekt zu erben ("Unterklasse"), während andere Funktionen überschrieben werden.

Das Problem für systemweite Objektinteraktionen mit herkömmlicher Implementierungsvererbung besteht darin, dass der Vertrag (die Schnittstelle) zwischen Objekten in einer Implementierungshierarchie nicht klar definiert ist. Tatsächlich ist es implizit und mehrdeutig. Wenn das übergeordnete oder untergeordnete Objekt seine Implementierung ändert, kann das Verhalten verwandter Komponenten nicht definiert oder nicht implementiert werden. In jeder einzelnen Anwendung, bei der die Implementierung von einem einzelnen Engineering-Team verwaltet werden kann, das alle Komponenten gleichzeitig aktualisiert, ist dies nicht immer ein großes Problem. In einer Umgebung, in der die Komponenten eines Teams durch die Blackbox-Wiederverwendung anderer Komponenten erstellt werden, die von anderen Teams erstellt wurden, gefährdet diese Art von Instabilität die Wiederverwendung. Darüber hinaus funktioniert die Implementierungsvererbung in der Regel nur innerhalb von Prozessgrenzen. Dies macht herkömmliche Implementierungsvererbung für große, sich entwickelnde Systeme, die aus Softwarekomponenten bestehen, die von vielen Entwicklungsteams erstellt wurden, unpraktisch.

Der Schlüssel zum Erstellen wiederverwendbarer Komponenten besteht darin, das Objekt als undurchsichtiges Feld zu behandeln. Dies bedeutet, dass der Codeteil, der versucht, ein anderes Objekt wiederzuverwenden, nichts über die interne Struktur oder Implementierung der verwendeten Komponente weiß und nichts wissen muss. Anders ausgedrückt: Der Code, der versucht, eine Komponente wiederzuverwenden, hängt vom Verhalten des Objekts und nicht von seiner genauen Implementierung ab.

Um die Wiederverwendbarkeit von Blackboxen zu erreichen, verwendet COM andere etablierte Wiederverwendbarkeitsmechanismen wie Eindämmung/Delegierung und Aggregation.

Hinweis

Der Einfachheit halber wird das wiederverwendete Objekt als inneres Objekt bezeichnet, und das Objekt, das dieses innere Objekt verwendet, ist das äußere Objekt.

 

Es ist wichtig, sich in beiden Mechanismen daran zu erinnern, wie das äußere Objekt für seine Clients erscheint. Was die Clients betrifft, implementieren beide Objekte alle Schnittstellen, auf die der Client einen Zeiger abrufen kann. Der Client behandelt das äußere Objekt als undurchsichtige Box und kümmert sich daher weder um die interne Struktur des äußeren Objekts, noch muss er sich darum kümmern.

Weitere Informationen finden Sie in den folgenden Themen: