Під час розробки в OOP іноді інтерфейс / контракт надається бібліотекою, яку ви не можете змінити. Назвемо цей інтерфейс Дж.
Тепер у вас є об'єкт класу A, який споживає об'єкти, що реалізують цей інтерфейс. Всередині Потрібна лише невелика частина визначень інтерфейсу. Деякі з об'єктних класів створюються мною під час проекту (назвемо один з них типу D), тому в реалізації всього інтерфейсу J є накладні витрати.
Я хочу реалізувати підмножину функціональності в інтерфейсі J, але поки що мої рішення не задовольняють мене:
- реалізовуючи кожен аспект J, а потім кидаючи "notImplementedExceptions", дезінформує користувача моїх об'єктів: здавалося б, мої об'єкти типу D відповідають інтерфейсу J, але вони не відповідають - та іншим споживачам моїх об'єктів (які приймають об'єкти, що реалізують інтерфейс J) не можу покластися на цілісність моїх об'єктів.
- Реалізація щойно визначеного інтерфейсу забороняє мені використовувати об'єкти, що реалізують лише інтерфейс J, хоча інтерфейс J повністю сумісний з моїм власним інтерфейсом.
- Якщо дозволити моїм власним об'єктам реалізувати інтерфейс J, це створило б значні накладні витрати, оскільки їм не потрібна вся ця функціональність.
Коли мені вдалося змінити інтерфейс J, я створив "суперінтерфейс" K, який мав цей підмножина функціональності інтерфейсу J, і зробив інтерфейс J успадкованим від інтерфейсу K. Але я не можу змінити інтерфейс Ж.
Яке об’єктно-орієнтоване рішення цієї проблеми? Чи найкраще рішення все ж реалізує "просто" інтерфейс J? Або є OOP-способи "суперкласифікувати" інтерфейс, не змінюючи його?