(En el contexto de .NET por lo que vale)¿Cuándo se necesitan las interfaces?
Tiendo a no utilizar la herencia y rara vez uso interfaces. Me encontré con alguien que piensa que las interfaces son lo mejor desde Spit. Él los usa en todas partes. No entiendo esto y de ahí las preguntas que siguen. Solo quiero verificar mi comprensión de las interfaces.
Si está utilizando interfaces en todas partes, supongo que puede predecir el futuro, los requisitos de su aplicación están definidos y nada cambiará en su aplicación. Para mí, especialmente durante el desarrollo temprano, las interfaces se vuelven un lastre. La aplicación es muy dinámica a lo largo de su vida. Si necesita restar o agregar miembros a la interfaz, muchas cosas se romperán. El chico de arriba dice que crea otra interfaz para manejar los nuevos miembros. Nada se rompe
¿No es esa composición? ¿Por qué no usar composición sin interfaces? Mas flexible.
¿Cómo maneja el caso donde se debe restar un miembro de la interfaz? Básicamente no lo hace. Las cosas simplemente se rompen y eso es genial porque ahora puedes ver todas las áreas afectadas y arreglarlas. En lugar de averiguar más elegantemente dónde están todas las rutas de código relacionadas, ¿deberíamos arrancar partes de las clases a través de la fuerza bruta?
Pienso en una aplicación de software como un gráfico. Un gráfico completo es el peor caso, teniendo n (n-1)/2. Esto significa que cada clase habla a cada clase. Una tela de araña confusa. n-1 es el mejor, en el que se trata de una estricta jerarquía de comunicación. Agregar otra interfaz solo para compensar un nuevo miembro necesario agrega una vertici al gráfico, lo que significa más bordes y una mayor realización de la ecuación n (n-1)/2. La composición sin interfaces se parece más a mixins. Solo las clases seleccionadas usan métodos particulares. Con una interfaz, todas las clases están obligadas a usar miembros, incluso si no los necesitan. El enfoque composition/mixin no agrega nuevos bordes innecesarios.
Tengo que estar en desacuerdo con algunas de sus suposiciones. Las interfaces y la herencia tienen sus usos y es de esperar que se refactorice la aplicación a lo largo de su vida útil. "¿Por qué no usar composición sin interfaces?" Porque puede probar elegantemente si los objetos dispares exponen una interfaz. – overslacked
En realidad, su análisis gráfico es correcto, pero su conclusión es incorrecta. Si tiene n llamadas que llaman m, tiene n * m bordes. Si todas esas llamadas pueden organizarse a través de una única interfaz (optimista pero plausible), entonces solo tiene n + m bordes. La implementación efectiva de interfaces reducirá en gran medida la complejidad del gráfico. – CurtainDog
"... todas esas llamadas pueden organizarse a través de una única interfaz ..." Quizás en una aplicación muy simple. "... entonces solo tienes n + m bordes."Si la interfaz es heredada por clases que usan todos los miembros de la interfaz, entonces es un lavado. Mi escenario se refiere al caso de que te vuelves loco con las interfaces. Lee la segunda a la última oración nuevamente – 4thSpace