Yo creo que el debate no consiste en si son útiles las interfaces, que sí lo son. La cuestión es si pueden usarse clases simplemente para definir interfaces, sin usar 'interface'.
¿ Qué ventaja tiene , aparte de la herencia múltiple , una 'interface' sobre una superclase abstracta?
-- "En teoría no hay diferencia entre teoría y práctica. En la práctica, sí la hay."
¿ Qué ventaja tiene , aparte de la herencia múltiple , una 'interface' sobre una superclase abstracta?
Para mi es un tema de disenio.
Hay funcionalidad comun en un grupo de clases? A lo mejor merece la pena definir una clase abstracta y poner esa funcionalidad comun ahi. No hay funcionalidad comun, pero hay una relacion entre diferentes clases que pueden indicar polimorfismo? Lo defino como una interfaz.
Una clase abstracta permite mejor compatibilidad hacia atras (se pueden aniadir metodos no abstractos en cualquier momento sin molestar al codigo que se haya compilado para versiones anteriores), un interfaz te permite mas control sobre el contrato de una clase...
Personalmente me parece que los interfaces indican mejor la separacion entre disenio e implementacion, pero esto es ya una opinion totalmente personal. En general, en mi caso, no suelo usar clases abstractas a menos que de verdad sean necesarias (funcionalidad comun, como he dicho antes, para evitar duplicacion de codigo).
--
Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.
¿ Qué ventaja tiene , aparte de la herencia múltiple , una 'interface' sobre una superclase abstracta?
No tener que heredar. En vez de tener que aplicar la semántica "es un" de la herencia, con todas sus implicaciones reales (en los ejemplos académicos no suelen buscar precisamente casos conflictivos) aplicas la semántica "funciona como". Te permite tener un acuerdo tácito en lo que se espera de la "relación" entre objetos sin la vinculación fuerte de la herencia, de modo que puedes evolucionar la clase con menores restricciones.
En Java, el propósito de una interface no es lograr heréncia múltiple (que no la logra), sino generar tipos de datos.
Si quiero reutilizar mi código y decir que mi clase A es un caso particular de la clase B, entonces uso herencia (siendo la clase B abstracta o concreta, da igual).
Ahora bien, si quiero decir "este objeto de la clase A es polimórfico a este de la clase B, pero su comportamiento no es similar" (es decir, mismo qué pero independientes cómos), ahí uso una interface...
El único propósito es lograr que el compilador no chille.
Interfaces vs superclases abstractas
(Puntos:3, Interesante)( http://barrapunto.com/~Grohl/bitacora | Última bitácora: Lunes, 09 Marzo de 2015, 09:07h )
Yo creo que el debate no consiste en si son útiles las interfaces, que sí lo son.
La cuestión es si pueden usarse clases simplemente para definir interfaces, sin usar 'interface'.
¿ Qué ventaja tiene , aparte de la herencia múltiple , una 'interface' sobre una superclase abstracta?
"En teoría no hay diferencia entre teoría y práctica. En la práctica, sí la hay."
Re:Interfaces vs superclases abstractas
(Puntos:1)( http://barrapunto.com/ | Última bitácora: Lunes, 24 Febrero de 2014, 10:03h )
Hay funcionalidad comun en un grupo de clases? A lo mejor merece la pena definir una clase abstracta y poner esa funcionalidad comun ahi. No hay funcionalidad comun, pero hay una relacion entre diferentes clases que pueden indicar polimorfismo? Lo defino como una interfaz.
Una clase abstracta permite mejor compatibilidad hacia atras (se pueden aniadir metodos no abstractos en cualquier momento sin molestar al codigo que se haya compilado para versiones anteriores), un interfaz te permite mas control sobre el contrato de una clase...
Personalmente me parece que los interfaces indican mejor la separacion entre disenio e implementacion, pero esto es ya una opinion totalmente personal. En general, en mi caso, no suelo usar clases abstractas a menos que de verdad sean necesarias (funcionalidad comun, como he dicho antes, para evitar duplicacion de codigo).
Dale fuego a un hombre y estara caliente un dia, prendele fuego y estara caliente el resto de su vida.
Re:Interfaces vs superclases abstractas
(Puntos:2, Interesante)( Última bitácora: Miércoles, 05 Marzo de 2014, 08:44h )
Re:Interfaces vs superclases abstractas
(Puntos:1)( http://enunacalesita.wordpress.com/ )
Si quiero reutilizar mi código y decir que mi clase A es un caso particular de la clase B, entonces uso herencia (siendo la clase B abstracta o concreta, da igual).
Ahora bien, si quiero decir "este objeto de la clase A es polimórfico a este de la clase B, pero su comportamiento no es similar" (es decir, mismo qué pero independientes cómos), ahí uso una interface...
El único propósito es lograr que el compilador no chille.