Pessoal, estou com uma duvida …
peguei uma implementação aqui da seguinte forma,
interface Table {
int getNumberOfColumns();
Collection<Column> getColumns();
Column getColumn(String name);
// ... continua ...
}
class ConcreteTable implements Table {
//... atributos
// implementação dos metodos da interface
// sets
public setColumns(Collection<Column> columns) {
// ...
}
}
Eu entendo que da forma como esta a interface, eu garanto de certa forma o encapsulamento, já que publico apenas o que deve ser visivel para classes interessadas na minha inteface, porem, existe o problema de inicializar os atributos da minha classe concreta, o que eu faria atraves de um construtor. Hoje isso é feito pelos sets contidos nas classes concretas. O problema é que para fazer isso, ao inves de utilizar a interface, utiliza-se a classe concreta por todo código como referencia.
Fica as pergunta, pra que existe a interface se todo restante do código utiliza referencia a classe concreta?
Considerando que quem vai utilizar meu codigo só se interesse pela interface, a implementação estaria correta, porem se eu precisar mudar algo internamente, como criar uma nova implementacao de Table, teria problemas?
Colocar os sets na interface seria uma solução na opiniao de voces?
nao sei se expressei claramente minha duvida,
conto com a colaboração de todos,
[]s