¿Cuándo se deberían usar interfaces?


Cuando empezamos en este interesante mundo de la programación nos topamos con que varios proyectos o ejemplos que encontramos en la red, o que nos pasan algunos colegas, usan mucho una de las características de la programación orientada a objetos: Las interfaces. Para evitar confusiones, no estoy hablando de las interfaces gráficas de usuario (GUI), sino de aquellas "clases" marcadas como <<interface>> (por lo que, técnicamente, dejan de ser clases) y que otras clases puden implementar. Pues si, trabajar con interfaces a veces trae algunos problemas, como estos:


  • Añade otro archivo en el sistema, lo que muchas veces complica progresivamente el proyecto en cuestión.
  • En un IDE como Eclipse, NetBeans, Visual Studio o tu preferido, cuando se intenta navegar hacia un método directamente del código, te lleva a la interfaz en vez de a algún código en el que se pueda observar que es lo que está pasando. Esto es a veces muy molesto, además del hecho que también se oculta muchas veces de donde viene la implementación de los métodos porque a veces están en ubicaciones no muy obvias.
  • Una cuestión muy grave es que las interfaces te dan pocas opciones para evolucionar las declaraciones o las hacen mas complicadas.
Así que al parecer es una pesadilla trabajar con interfaces o que haya algún beneficio oculto de usarlas. Las interfaces le dan un mayor nivel de abstracción al desarrollo del código y su beneficio solo se manifiesta si se mantiene una interfaz de un framework como ILog o los frameworks de .NET como IDisposable porque se necesita una muy buena razón para añadir o cambiar métodos, ya que afectaría a miles de implementaciones alrededor del mundo.
En conclusión, en proyectos pequeños, personales o de un grupo reducido de personas, usar interfaces sería una complicación que se debería evitar.

1 comentario:

  1. Muchas gracias por tu comentario. Ya está arreglada la redacción y se agregaron algunas aclaraciones para evitar confusiones respecto a las GUI.

    ResponderEliminar