Eu me deparei com o termo "programação para uma interface em vez de uma implementação" e acho que meio que entendo o que isso significa. Mas quero ter certeza de entender seus benefícios e possíveis implementações.
"Programar para uma interface" significa que, quando possível, deve-se referir a um nível mais abstrato de uma classe (uma interface, classe abstrata ou, às vezes, uma superclasse de algum tipo), em vez de se referir a uma implementação concreta.
Um exemplo comum em Java é usar:
List myList = new ArrayList();
em vez de ArrayList myList = new ArrayList();
.
Eu tenho duas perguntas sobre isso:
Quero ter certeza de que entendo os principais benefícios dessa abordagem. Eu acho que os benefícios são principalmente flexibilidade. Declarar um objeto como uma referência de mais alto nível, em vez de uma implementação concreta, permite mais flexibilidade e facilidade de manutenção ao longo do ciclo de desenvolvimento e do código. Isso está correto? A flexibilidade é o principal benefício?
Existem mais maneiras de 'programar para uma interface'? Ou "declarar uma variável como uma interface e não como uma implementação concreta" é a única implementação desse conceito?
Eu não estou falando sobre a interface de construção Java . Estou falando do princípio OO "programação para uma interface, não uma implementação". Nesse princípio, a "interface" mundial refere-se a qualquer "supertipo" de uma classe - uma interface, uma classe abstrata ou uma superclasse simples que é mais abstrata e menos concreta do que suas subclasses mais concretas.