Podczas programowania w OOP czasami biblioteka / interfejs udostępnia interfejs, którego nie można zmienić. Nazwijmy ten interfejs J.
Teraz masz obiekt klasy A, który zużywa obiekty implementujące ten interfejs. Wewnątrz Potrzebna jest tylko niewielka część definicji interfejsu. Niektóre klasy obiektów są tworzone przeze mnie podczas projektu (nazwijmy jedną z nich typem D), więc na wdrożenie wszystkiego w interfejsie J. wiąże się narzut
Chcę zaimplementować podzbiór funkcjonalności w interfejsie J, ale moje dotychczasowe rozwiązania mnie nie satysfakcjonują:
- implementowanie każdego aspektu J, a następnie rzucanie „notImplementedExceptions” dezinformuje użytkownika moich obiektów: wydaje się, że moje obiekty typu D są zgodne z interfejsem J, ale nie - i inni odbiorcy moich obiektów (które akceptują obiekty implementujące interfejs J) nie mogę polegać na integralności moich obiektów.
- Implementowanie nowo zdefiniowanego interfejsu zabrania mi używania obiektów, które implementują tylko interfejs J, chociaż interfejs J jest w pełni kompatybilny z moim własnym interfejsem.
- Pozwolenie moim niestandardowym obiektom na implementację interfejsu J spowodowałoby znaczne obciążenie, ponieważ nie potrzebują one całej tej funkcjonalności.
Kiedy mogłem zmienić interfejs J, tworzyłem „superinterfejs” K, który posiadałby ten podzbiór funkcjonalności interfejsu J, i czyniłem interfejs J dziedziczonym z interfejsu K. Ale nie mogę zmienić interfejsu J.
Jakie jest obiektowe rozwiązanie tego problemu? Czy najlepsze rozwiązanie nadal implementuje interfejs „just” J? Czy są sposoby OOP na „nadklasę” interfejsu bez jego zmiany?