¿Deberían definirse todos los métodos de una clase en una interfaz implementada?

7

Puedo ver cómo las interfaces son muy útiles para forzar a diferentes clases a tener la misma funcionalidad.

Pero también hay acciones que están vinculadas a una clase específica (como actualizar una variable única que se usa para implementar un método desde una interfaz).

¿Debo escribir una nueva interfaz para implementar los métodos que no están cubiertos por la interfaz? Si no, ¿cómo mantengo una buena visión general de los métodos que son exclusivos de una clase?

PS: marca de duplicación de @gnat: no estoy preguntando si todas las clases deben implementar e interactuar. Estoy preguntando si todos los métodos deben definirse en una interfaz. (o cómo organizarlos para que quede claro que esos métodos son exclusivos de la clase)

    
pregunta RMo 10.04.2018 - 18:12

1 respuesta

7

Yo diría que no. No estoy seguro de qué idioma es este, pero antes de nada, algunos métodos (¿la mayoría?) En una clase deben ser privados. Son detalles de implementación y no deben exponerse en absoluto.

Entonces, si asumimos que solo se trata de métodos públicos, sigo argumentando que la respuesta es: no. El punto de una interfaz es definir los métodos que se utilizarán en contextos donde la clase de implementación no se conoce y no importa. Si bien sería posible crear interfaces de "relleno" que especifiquen métodos específicos de implementación, esto es solo una maniobra cruzada a menos que haya algún código que haga referencia a esa interfaz de una manera independiente de la implementación. Esto seguramente dará como resultado que se convierta en algo que se aproxime a tener una interfaz por clase que es algo que considero ruido.

Por ejemplo, digamos que he definido una interfaz de diccionario simple de solo lectura para usar en un algoritmo:

interface ReadOnlyDict<E> {
  E get(Object key);
}

A mi algoritmo no le importa cómo implementas ese método. Tal vez sea un Map . Tal vez use una instrucción switch para llamar a diferentes métodos en un objeto. Tal vez se lee desde un archivo, tal vez se llama desde el servicio web remoto. En cada uno de estos casos, puede haber muchas cosas que el código que crea esos objetos debe poder llamar para prepararlo para su uso. Tal vez esos métodos están definidos por otras interfaces y eso es genial. Pero si no lo son, crear una interfaz simplemente para que se definan en uno es un ejercicio sin sentido, en mi opinión.

    
respondido por el JimmyJames 10.04.2018 - 19:01

Lea otras preguntas en las etiquetas