Quando si sviluppa in OOP, a volte un'interfaccia / contratto viene fornito da una libreria che non è possibile modificare. Chiamiamo questa interfaccia J.
Ora hai un oggetto di classe A che consuma oggetti che implementano questa interfaccia. All'interno È necessaria solo una piccola parte delle definizioni dell'interfaccia. Alcune delle classi di oggetti sono state create da me durante il progetto (chiamiamone una di tipo D), quindi c'è un overhead nell'implementazione di tutto all'interno dell'interfaccia J.
Voglio implementare un sottoinsieme delle funzionalità nell'interfaccia J, ma le mie soluzioni finora non mi soddisfano:
- implementando ogni aspetto di J e quindi lanciando "notImplementedExceptions" disinforma l'utente dei miei oggetti: sembrerebbe che i miei oggetti di tipo D siano conformi all'interfaccia J, ma non lo fanno - e altri consumatori dei miei oggetti (che accettano oggetti che implementano l'interfaccia J) non posso fare affidamento sull'integrità dei miei oggetti.
- L'implementazione di un'interfaccia appena definita mi impedisce di utilizzare oggetti che implementano solo l'interfaccia J, sebbene l'interfaccia J sia pienamente compatibile con la mia interfaccia.
- Lasciare che i miei oggetti personalizzati implementino l'interfaccia J creerebbe un notevole sovraccarico, perché non hanno bisogno di tutte queste funzionalità.
Quando potessi modificare l'interfaccia J, avrei creato una "super-interfaccia" K che aveva questo sottoinsieme della funzionalità dell'interfaccia J e avrei reso l'interfaccia J ereditata dall'interfaccia K. Ma non posso modificare l'interfaccia J.
Qual è una soluzione orientata agli oggetti a questo problema? La soluzione migliore sta ancora implementando l'interfaccia "solo" J? O ci sono modi OOP per "superclassare" un'interfaccia senza alterarla?