Projeto para casa em java: Private(-) e Public(+)

Re: Projeto para casa em java: Private(-) e Public(+)

por Gustavo Ansaldi Oliva -
Número de respostas: 0

Sim, mantenha todos os atributos privados. A hierarquia, contudo, é uma exceção: promova os atributos de funcionario para "protected". Um resumo sobre os níveis de acesso em Java pode ser encontrado aqui: http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

E por que encapsulamos atributos via métodos get/set? Existem várias situações que justificam isso. Imagine, por exemplo, que você tem uma classe "Pagina" que tem um atributo chamado "conteudo" que armazena o texto dessa pagina. Se esse conteúdo for grande (muito texto), talvez seja interessante comprimir (compactar) esse texto e guarda-lo na forma de um atributo do tipo byte[]. Contudo, você não quer que as outras classes que dependem de Pagina tenham que lidar com um array de bytes. Portanto, no "getter" desse método, a classe Pagina pode descompactar o texto on-the-fly e devolver uma String pra quem pediu (note que é alguma outra classe que descompacta o texto em si, já que não é responsabilidade da classe Pagina saber como compactar e descompactar textos). Feito isso, ela devolve a String pra quem pediu (embora o atributo continue sendo o array de bytes). O Setter age de modo análogo. Portanto, nesse caso, usamos getter/setter pra esconder a complexidade e simplificar a interface da classe Página. Se você não tivesse os getters/setters desde o começo, o seu código estaria com esse array de bytes espalhado por todos os lados e ficaria bem mais complicado de arrumar. Por isso, colocamos getters/setters desde o começo.

Uma reflexão importante, por outro lado, é que embora getters e setters aumentem o encapsulamento, esse aumento não é muito alto (principalmente quando o Get é público). Alguns atributos são internos a uma classe e só fazem sentido no escopo dela. Nesses casos, o atributo é privado e não há nem get e nem set para esse atributo. Sempre tente manter o nível de encapsulamento alto, pois isso torna o seu código mais previsível e mais fácil de manter.