Bei der Entwicklung in OOP wird manchmal eine Schnittstelle / ein Vertrag von einer Bibliothek vergeben, die Sie nicht ändern können. Nennen wir diese Schnittstelle J.
Jetzt haben Sie ein Objekt der Klasse A, das Objekte verwendet, die diese Schnittstelle implementieren. Innerhalb von A wird nur ein kleiner Teil der Definitionen der Schnittstelle benötigt. Einige der Objektklassen werden von mir während des Projekts erstellt (nennen wir eine von ihnen Typ D), daher ist die Implementierung von allem in Interface J mit einem Mehraufwand verbunden.
Ich möchte eine Teilmenge der Funktionalität in Schnittstelle J implementieren, aber meine bisherigen Lösungen erfüllen mich nicht:
- Das Implementieren jedes Aspekts von J und das anschließende Auslösen von "notImplementedExceptions" führt zu einer Fehlinformation des Benutzers meiner Objekte: Es scheint, dass meine Objekte vom Typ D der Schnittstelle J entsprechen, aber nicht - und andere Konsumenten meiner Objekte (die Objekte akzeptieren, die die Schnittstelle implementieren) J) kann mich nicht auf die Integrität meiner Objekte verlassen.
- Das Implementieren einer neu definierten Schnittstelle verbietet mir die Verwendung von Objekten, die nur die Schnittstelle J implementieren, obwohl die Schnittstelle J vollständig mit meiner eigenen Schnittstelle kompatibel ist.
- Wenn meine benutzerdefinierten Objekte die Schnittstelle J implementieren, würde dies einen erheblichen Overhead verursachen, da sie nicht alle diese Funktionen benötigen.
Wenn ich in der Lage wäre, die Schnittstelle J zu ändern, würde ich eine "Superschnittstelle" K erstellen, die diese Teilmenge der Funktionalität der Schnittstelle J aufweist, und die Schnittstelle J von der Schnittstelle K erben lassen. Aber ich kann die Schnittstelle J nicht ändern.
Was ist eine objektorientierte Lösung für dieses Problem? Implementiert die beste Lösung immer noch "nur" Interface J? Oder gibt es OOP-Möglichkeiten, ein Interface zu "überklassifizieren", ohne es zu verändern?