2
respostas

[Dúvida] Existe alguma forma de se alterar o atributo privado de uma classe com outra?

Entendi que com o encapsulamento um atributo só poderá ser alterado dentro da própria Classe, mas existe alguma exceção? Um exemplo seria de uma Classe professor que pudesse alterar as notas de uma Classe aluno, sendo que essas notas não poderiam ser alteradas pela Classe aluno, ela só poderiam ver a nota.

Com base no que foi apresentado durante todo o curso, o que se pode fazer nesse caso? Ou para fazer essa comunicação de classes, o encapsulamento fica inviável?

2 respostas

Olá, Daniel!

Existe uma forma de acessar atributos privados através de outra classe em Java, muitos frameworks utilizam isto e tem curso aqui no Alura sobre a Reflection API. No entanto, entendo que não é o que você precisa neste caso.

Programaticamente, é possível que a classe Aluno mude o atributo nota se este atributo for dela e, se for privado, o Professor só terá acesso através de um setter ou um método qualquer (ex: receberNota(double nota)) que permita a alteração deste atributo.

Agora, para impedir que o aluno mude, basta que você programador não escreva código que vai permitir isso, mas não vejo uma forma de impedir que seja feito de forma programática. As pessoas desenvolvedoras têm muitos truques e se quiserem vão conseguir fazer besteira no código. xD

Pensando em um caso onde Professor e Aluno são classes do sistema, mas são também usuários reais. Pode ser um pouco confuso, mas o design das suas classes nem sempre representa os atores ou usuários, mas sim o seu modelo de negócios.

Mas vale pensar mais sobre isso e dá pra viajar bastante hehe... Pensa assim, se o aluno não pode mudar a própria nota, talvez essa nota não seja dele e sim de um currículo acadêmico que ele só pode consultar, mas que o professor pode alterar. Como programador, é você quem determina se a Classe X pode mudar o atributo da Classe Y e o encapsulamento é uma forma de dizer a outros programadores e a você mesmo "Quem está de fora não pode mexer aqui", mas ele não impede que seja feito e funciona mais como um alerta para pessoas desenvolvedoras.

Obrigado Gabriel. O meu erro foi pensar em Professor e Aluno apenas como usuários, sendo que O.O é mais que isso.