OOPで開発する場合、変更できないライブラリによってインターフェイス/コントラクトが与えられることがあります。このインターフェイスをJと呼びましょう。
これで、このインターフェイスを実装するオブジェクトを消費するクラスAのオブジェクトができました。Inside Aインターフェイスの定義のほんの一部だけが必要です。オブジェクトクラスの一部はプロジェクト中に私が作成します(そのうちの1つをタイプDと呼びましょう)。したがって、インターフェイスJ内のすべての実装にオーバーヘッドがあります。
インターフェイスJの機能のサブセットを実装したいのですが、これまでのソリューションでは満足できません。
- Jのあらゆる側面を実装し、「notImplementedExceptions」をスローすると、ユーザーにオブジェクトの情報が誤って通知されます。タイプDのオブジェクトはインターフェースJに準拠しているように見えますが、 J)オブジェクトの整合性に依存することはできません。
- 新しく定義されたインターフェイスを実装すると、インターフェイスJのみを実装するオブジェクトを使用できなくなりますが、インターフェイスJは自分のインターフェイスと完全に互換性があります。
- カスタムオブジェクトにインターフェイスJを実装させると、この機能をすべて必要としないため、かなりのオーバーヘッドが発生します。
インターフェースJを変更できた場合、インターフェースJの機能のこのサブセットを持つ「スーパーインターフェース」Kを作成し、インターフェースJをインターフェースKから継承させます。しかし、インターフェースJを変更することはできません。
この問題のオブジェクト指向ソリューションとは何ですか?最良のソリューションは、まだ「単なる」インターフェースJを実装していますか?または、インターフェイスを変更せずに「スーパークラス化」するOOPの方法はありますか?