Al desarrollar en OOP, a veces una interfaz / contrato es dado por una biblioteca que no puede alterar. Llamemos a esta interfaz J.
Ahora tiene un objeto de clase A que consume objetos que implementan esta interfaz. En el interior A solo se necesita una pequeña parte de las definiciones de la interfaz. Algunas de las clases de objetos las he creado durante el proyecto (llamemos a una de ellas tipo D), por lo que hay una sobrecarga en la implementación de todo lo que está dentro de la interfaz J.
Quiero implementar un subconjunto de la funcionalidad en la interfaz J, pero hasta ahora mis soluciones no me satisfacen:
- implementar todos los aspectos de J y luego lanzar "notImplementedExceptions" desinforma al usuario de mis objetos: parecería que mis objetos de tipo D cumplen con la interfaz J, pero no lo hacen, y otros consumidores de mis objetos (que aceptan los objetos que implementan la interfaz J) no pueden confiar en la integridad de mis objetos.
- La implementación de una interfaz recién definida me impide utilizar objetos que implementen solo la interfaz J, aunque la interfaz J es totalmente compatible con mi propia interfaz.
- Permitir que mis objetos personalizados implementen la interfaz J generaría una sobrecarga significativa, ya que no necesitan toda esta funcionalidad.
Cuando pude alterar la interfaz J, crearía una "super-interfaz" K que tenía este subconjunto de la funcionalidad de la interfaz J, y haría que la interfaz J se heredara de la interfaz K. Pero no puedo modificar la interfaz J.
¿Qué es una solución orientada a objetos para este problema? ¿La mejor solución sigue implementando "solo" la interfaz J? ¿O hay formas OOP de "superclase" una interfaz sin alterarla?