En general, me he enfrentado a muchos más problemas de mantenimiento asociados con interfaces puras que ABC, incluso ABC utilizados con herencia múltiple. YMMV - no sé, tal vez nuestro equipo los usó de manera inadecuada.
Dicho esto, si usamos una analogía del mundo real, ¿cuánto uso hay para interfaces puras completamente desprovistas de funcionalidad y estado? Si uso USB como ejemplo, es una interfaz razonablemente estable (creo que ahora estamos en USB 3.2, pero también ha mantenido la compatibilidad con versiones anteriores).
Sin embargo, no es una interfaz sin estado. No carece de funcionalidad. Es más como una clase base abstracta que una interfaz pura. En realidad, está más cerca de una clase concreta con requisitos funcionales y estatales muy específicos, siendo la única abstracción lo que se conecta al puerto como la única parte sustituible.
De lo contrario, sería un "agujero" en su computadora con un factor de forma estandarizado y requisitos funcionales mucho más flexibles que no harían nada por sí solo hasta que cada fabricante inventara su propio hardware para hacer que ese agujero hiciera algo, en ese momento se convierte en un estándar mucho más débil y nada más que un "agujero" y una especificación de lo que debe hacer, pero no hay una disposición central sobre cómo hacerlo. Mientras tanto, podríamos terminar con 200 formas diferentes de hacerlo después de que todos los fabricantes de hardware intenten encontrar sus propias formas de vincular la funcionalidad y el estado a ese "agujero".
Y en ese momento podríamos tener ciertos fabricantes que introducen diferentes problemas sobre otros. Si necesitamos actualizar la especificación, podríamos tener 200 implementaciones concretas de puertos USB diferentes con formas totalmente diferentes de abordar la especificación que debe actualizarse y probarse. Algunos fabricantes pueden desarrollar implementaciones estándar de facto que comparten entre sí (su clase base analógica implementando esa interfaz), pero no todas. Algunas versiones pueden ser más lentas que otras. Algunos podrían tener un mejor rendimiento pero una latencia peor o viceversa. Algunos pueden usar más batería que otros. Algunos pueden fallar y no funcionar con todo el hardware que se supone que funciona con puertos USB. Algunos pueden requerir que se conecte un reactor nuclear para operar, lo que tiende a dar a sus usuarios envenenamiento por radiación.
Y eso es lo que he encontrado, personalmente, con interfaces puras. Puede haber algunos casos en los que tengan sentido, como simplemente modelar el factor de forma de una placa base contra una caja de la CPU. Las analogías de los factores de forma son, de hecho, prácticamente apátridas y carecen de funcionalidad, como ocurre con el "agujero" analógico. Pero a menudo considero que es un gran error que los equipos consideren que de alguna manera es superior en todos los casos, ni siquiera cerca.
Por el contrario, creo que ABC resolvería muchos más casos que las interfaces si esas son las dos opciones, a menos que su equipo sea tan gigantesco que sea realmente deseable tener el equivalente analógico anterior de 200 implementaciones USB competidoras en lugar de un estándar central para mantener. En un antiguo equipo en el que estaba, tuve que luchar mucho para aflojar el estándar de codificación para permitir ABC y herencia múltiple, y principalmente en respuesta a estos problemas de mantenimiento descritos anteriormente.