Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Sugestão] No curso de solid há uma questão que mostra um conceito que não totalmente verdadeiro

No curso de Solid, item 6, na questão que discute "encapsulamento", a questão fornece como itens corretos o item "a" e "c". Porém, acho incorreto dizer que a utilização do getter e setter "não fornece nenhum tipo de encapsulamento". Isso é incorreto!! O simples fato de termos que instanciar um objeto para então fazer a atribuição de um valor usando o setter, já é uma forma de proteção que evita casos de em um código ruim podermos simplesmente adicionar um valor de forma direta(sem o setter). Logo, queria saber o que vcs acham disso. Muito obrigado.

1 resposta
solução!

Oi Thiago!

Isso vai depender muito de como foi implementado o código. Por exemplo considere o seguinte código:

Conta c = new Conta();

c.saldo = new BigDecimal("2500.00");

O código anterior não está encapsulado, pois permite a manipulação direta do saldo da conta, sem realizar as validações necessárias.

Porém, mesmo se adicionar um getter/setter o código pode continuar não encapsulado:

Conta c = new Conta();

c.setSaldo(new BigDecimal("2500.00"));

Repare que, do ponto de vista do encapsulamento, adicionar o setter de nada adiantou, pois continuamos podendo alterar o saldo da conta diretamente, sem realizar as validações.

Nesse exemplo que utilizei o correto é não declarar o método setter do atributo saldo e sim criar métodos que o manipulem(sacar, depositar, transferir, etc.), pois esses métodos é que vão encapsular a lógica de atualização de saldo do objeto, realizando as validações necessárias.

Bons estudos!