2010-03-19 10 views
7

Sé que esto podría parecer una pregunta controvertida, pero realmente no debe ser. hay una cantidad óptima de métodos en una interfaz.número de métodos en una interfaz

Por ejemplo, personalmente odio una interfaz con 20 métodos. Es simplemente difícil de implementar. El contrato parece difícil de mantener. De manera similar si el número de métodos es solo 1. Me hace preguntarme si realmente es una buena abstracción.

¿Alguna idea?

+4

Esto debería estar en el wiki de la comunidad por cierto ... – Ascalonian

+3

"Del mismo modo, si el número de métodos es sólo 1. Esto hace que me pregunte si es realmente una buena abstracción." <- ¿Por qué? Hay muchas interfaces con solo un método que se usan mucho. Comparable e Iterable vienen a la mente, definitivamente son bastante útiles. – sepp2k

Respuesta

15

Una interfaz debe tener exactamente tantos métodos como necesite. Ejemplos:

java.lang.Iterable - 1 Método
java.lang.Comparable - 1 Método
java.util.Collection - 14 Métodos
java.util.List - 25 métodos (incluyendo los de colección)

Así que la respuesta es - no tome el número como un criterio para su interfaz. En su lugar, ponga los métodos en las interfaces donde pertenecen lógicamente.

+1

java.lang.Runnable - 1 método :) –

+2

java.io.Serializable - 0 métodos :) – pgmura

+0

'Serializable' es una historia bastante diferente;) (' Cloneable' es incluso otra historia diferente) – Bozho

5

Hay un well-known study que sugiere que la cantidad de elementos de información que podemos procesar a la vez es siete, más o menos dos. A menudo encuentro que esta es una buena regla general para este tipo de preguntas; en este caso, si la interfaz está diseñada para administrar un solo conjunto de funcionalidades relacionadas, probablemente no podamos entender la funcionalidad como una sola establecer si es mucho más que siete.

Sin embargo, para muchas interfaces, un desarrollador no necesita ser capaz de entender la funcionalidad como un solo conjunto relacionado, en cuyo caso esta regla no sería relevante.

0

La forma de manejar muchos métodos cuando solo necesita implementar unos pocos es Abstract clases que proporcionan implementaciones predeterminadas o throw NotImplementedException. Si solo hay un método, probablemente esté bien porque hay métodos que solo esperan ese Iterface y lo llaman un método. Hay muchos patrones, Vistor, por ejemplo, que solo necesita un método.

4

Las interfaces de pozo con un método generalmente tienen su propósito y puede implementarlas de forma anónima más fácilmente. Mi regla de oro es tantos métodos como necesite tener. Pero muchos métodos en una interfaz generalmente sugieren que puede dividirlo en varias otras interfaces, especialmente cuando afecta a diferentes áreas de tareas (por ejemplo, una UserLoginAndAdministrationInterface se convierte en una interfaz UserLogin y una UserAdministration). Puede implementar tantas interfaces como desee en una clase y también se pueden subclasificar. Así que dividirlos no duele en absoluto.

4

Una interfaz debe tener exactamente tantos métodos como necesita.

Si ese número es grande, la justificación debe examinarse cuidadosamente, pero puede ser válida.

Por otro lado, hay (al menos) una instancia en Java donde la interfaz no necesita métodos (serializables) y, por lo tanto, no tiene ninguno. Menos métodos, definitivamente hace que sea más fácil implementar la interfaz, pero aún puede proporcionar una abstracción muy útil. Hay una serie de interfaces con un método.

4

Me preocuparía más que la interfaz sea lógicamente consistente, ya que tiene una cantidad arbitraria óptima de métodos.Dicho esto, una gran cantidad de métodos podría indicar un objeto "dios", que debería ser refactorizado. La indicación más clara es que los métodos no son cohesivos, pero la cantidad de métodos puede ser más fácil de observar y conducir a un examen más detallado. A veces, sin embargo, solo necesitas tener muchos métodos porque hay muchas operaciones posibles que te gustaría hacer en objetos de ese tipo. Un ejemplo de esto sería algo como IEnumerable<T> en .NET. No puedo pensar en ninguna razón válida para dividirlas en interfaces separadas, sin embargo, hay muchos métodos en la interfaz.

3

Hay no cantidad óptima de métodos en una interfaz. Las interfaces se utilizan para todo tipo de cosas diferentes, y lo que es apropiado depende completamente de qué.

En un extremo, una interfaz puede ser generada automáticamente por un programa para su consumo por otro programa, y ​​podría tener, por buenas razones, 1,000 métodos en ella.

Para códigos legibles por humanos, las reglas no pueden sustituir el juicio.

0

Esos veinte métodos capturan algo útil juntos o no. Si lo hacen, entonces necesita implementar todos ellos para proporcionar una implementación a esa cosa que capturan. Será coherente alojarlos en la misma interfaz en este caso.

-1

la respuesta es - no tome el número como un criterio para su interfaz. En su lugar, ponga los métodos en las interfaces donde pertenecen lógicamente y puede usarlos en las diferentes clases , puede usar un método de interfaz en dos o más clases, así que no dude en utilizar la interfaz, es una buena técnica de programación.

+1

¿Por qué copió y pegó mi respuesta? ¿Con la esperanza de ganar reputación? Esta no es la manera. – Bozho

+0

lo siento querido, pero estoy tratando de dar mi respuesta. – Sanjeev

1

No hay una respuesta correcta o incorrecta a cuántos métodos son aceptables para una interfaz. Algunos pueden tener cero, otros uno, y probablemente muy pocos excederán un centenar. La interfaz más grande que he escrito fue de casi treinta métodos, pero fue una fachada para los clientes.

Sin embargo, creo que una interfaz que tiene más de 8-10 métodos sería un posible código de humo, algo que justificaría 5 segundos para investigar.

Cuestiones relacionadas