Al desarrollar en OOP, a veces una biblioteca / interfaz proporciona una interfaz / contrato que no puede modificar. Llamemos a esta interfaz J.
Ahora tiene un objeto de clase A que consume objetos que implementan esta interfaz. Dentro de A solo se necesita una pequeña parte de las definiciones de la interfaz. Creé algunas de las clases de objetos durante el proyecto (llamemos a una de ellas tipo D), por lo que hay una sobrecarga en la implementación de todo dentro de la interfaz J.
Quiero implementar un subconjunto de la funcionalidad en la interfaz J, pero mis soluciones hasta ahora no me satisfacen:
- implementar todos los aspectos de J y luego arrojar "notImplementedExceptions" desinforma al usuario de mis objetos: parecería que mis objetos de tipo D se ajustan a la interfaz J, pero no lo hacen, y otros consumidores de mis objetos (que aceptan objetos que implementan la interfaz J) no puedo confiar en la integridad de mis objetos.
- Implementar una interfaz recién definida me prohíbe usar objetos que implementen solo la interfaz J, aunque la interfaz J es totalmente compatible con mi propia interfaz.
- Dejar que mis objetos personalizados implementen la interfaz J crearía una sobrecarga significativa, porque no necesitan toda esta funcionalidad.
Cuando podía alterar la interfaz J, creaba una "superinterfaz" K que tenía este subconjunto de la funcionalidad de la interfaz J, y hacía que la interfaz J heredara de la interfaz K. Pero no puedo alterar la interfaz J.
¿Cuál es una solución orientada a objetos para este problema? ¿La mejor solución sigue implementando la interfaz "justa" J? ¿O hay formas OOP de "superclasificar" una interfaz sin alterarla?