Lors du développement en POO, une interface / contrat est parfois fourni par une bibliothèque que vous ne pouvez pas modifier. Appelons cette interface J.
Vous avez maintenant un objet de classe A qui consomme des objets qui implémentent cette interface. A l'intérieur A, seule une petite partie des définitions de l'interface est nécessaire. Certaines des classes d'objets sont créées par moi pendant le projet (appelons l'une d'elles de type D), il y a donc un surcoût dans l'implémentation de tout à l'intérieur de l'interface J.
Je veux implémenter un sous-ensemble des fonctionnalités dans l'interface J, mais mes solutions jusqu'à présent ne me satisfont pas:
- implémenter tous les aspects de J et ensuite lancer "notImplementedExceptions" désinforme l'utilisateur de mes objets: il semblerait que mes objets de type D soient conformes à l'interface J, mais ils ne le font pas - et d'autres consommateurs de mes objets (qui acceptent les objets implémentant l'interface J) ne peut pas compter sur l'intégrité de mes objets.
- L'implémentation d'une interface nouvellement définie m'interdit d'utiliser des objets qui implémentent uniquement l'interface J, bien que l'interface J soit entièrement compatible avec ma propre interface.
- Laisser mes objets personnalisés implémenter l'interface J créerait une surcharge importante, car ils n'ont pas besoin de toutes ces fonctionnalités.
Lorsque je pouvais modifier l'interface J, je créais une "super-interface" K qui avait ce sous-ensemble de la fonctionnalité de l'interface J, et je faisais hériter l'interface J de l'interface K. Mais je ne peux pas altérer l'interface J.
Qu'est-ce qu'une solution orientée objet à ce problème? La meilleure solution est-elle toujours de mettre en œuvre l'interface "juste" J? Ou existe-t-il des moyens OOP pour "superclasser" une interface sans la modifier?