Me he encontrado con el término "programar para una interfaz en lugar de una implementación", y creo que entiendo lo que significa. Pero quiero asegurarme de entender sus beneficios y sus posibles implementaciones.
"Programación en una interfaz" significa que, cuando sea posible, uno debe referirse a un nivel más abstracto de una clase (una interfaz, clase abstracta o, a veces, una superclase de algún tipo), en lugar de referirse a una implementación concreta.
Un ejemplo común en Java es usar:
List myList = new ArrayList();
en lugar de ArrayList myList = new ArrayList();
.
Tengo dos preguntas con respecto a esto:
Quiero asegurarme de comprender los principales beneficios de este enfoque. Creo que los beneficios son principalmente flexibilidad. Declarar un objeto como una referencia de más alto nivel, en lugar de una implementación concreta, permite una mayor flexibilidad y mantenimiento durante todo el ciclo de desarrollo y en todo el código. ¿Es esto correcto? ¿Es la flexibilidad el principal beneficio?
¿Hay más formas de 'programar en una interfaz'? ¿O es "declarar una variable como una interfaz en lugar de una implementación concreta" la única implementación de este concepto?
No estoy hablando de la interfaz de construcción Java . Estoy hablando del principio OO "programar en una interfaz, no en una implementación". En este principio, la "interfaz" mundial se refiere a cualquier "supertipo" de una clase : una interfaz, una clase abstracta o una superclase simple que es más abstracta y menos concreta que sus subclases más concretas.