Últimamente, he estado leyendo publicaciones que hablan de la supuesta noción errónea de que las interfaces son abstracciones. Una de esas publicaciones es http://blog.ploeh.dk/2010/12/02/InterfacesAreNotAbstractions.aspxLas interfaces (interfaz/clase abstracta) no son abstracciones?
Estoy un poco confundido. Si no tengo interfaces (interfaz/clase abstracta), ¿cómo inyectaré mis dependencias y me burlaré de ellas?
Además, escuché a la gente hablar acerca de no usar interfaces que tiene un solo implementador. Como este blog aquí - http://simpleprogrammer.com/2010/11/02/back-to-basics-what-is-an-interface/
Ahora todo esto, ¿no viola el principio - Programa a una interfaz y no a la implementación?
* Cuando decimos "interfaz" en términos de programación a una interfaz. Ese tipo de interfaz significa los métodos y propiedades exteriores de una clase. No tiene que ser una interfaz de nivel de idioma. * Entonces, ¿me equivoqué todo el tiempo? Entonces, ¿una clase concreta puede ser una interfaz de acuerdo a usted? – Sandbox
Correcto. Más específicamente, las firmas públicas de los métodos y propiedades conforman la interfaz de esa clase. Cada vez que creas una clase, lo que sea que elijas exponer se convierte en parte de la interfaz externa de esa clase. Al cambiarlo, rompe aquellos que dependen de él. Si otra clase confía más en su interfaz (confía en los detalles específicos de implementación dentro de la clase, por ejemplo, cómo se ordena una lista o se almacenan los datos), incluso cambiar pequeñas cosas internas los rompería. –
Pero cuando el código se refiere a un tipo concreto, ¿no significa que si tenemos otra clase mañana de tipo similar, tendremos que cambiar el código?En cambio, con interfaces/clases abstractas puede cambiar una implementación diferente en tiempo de ejecución. – Sandbox