1
resposta

Duvida quanto a encapsulamento

Nesse caso como eu sei se os atributos estão ou não como privado ou não, visto não estar disponibilizado a classe conta?

1 resposta

Oi Tatiani, tudo bem?

O ponto aí não é apenas o atributo estar privado ou não.

Quando utilizamos as Auto-Implemented Properties, um atributo privado que não temos acesso será automaticamente criado pelo C#.

Sempre que fazemos:

c.Saldo = 10;

Levando em consideração que Saldo é uma propertie, o que estamos fazendo aí é executar o bloco set desta propertie, e neste bloco podemos, por exemplo, atribuir para um atributo privado o valor passado para a propertie.

--

Pensando no nosso contexto da conta, será que faz sentido atribuir um valor diretamente para o saldo? Talvez não. Se pensarmos em uma conta do mundo real, normalmente as operações em cima do saldo nunca são uma atribuição diretamente, são sempre um incremento (deposito) ou um decremento (saque).

Portanto sempre que formos fazer um deposito, por exemplo, temos que obter o valor atual do saldo e somar com o valor a ser depositado:

Conta c = new Conta();
double valorADepositar = 200.0;
c.Saldo += valorADepositar;

Mas isso abre espaço para atribuirmos um valor diretamente para o Saldo:

Conta c = new Conta();
c.Saldo = 100;

De onde vem esse valor 100? Um deposito? E se já tivermos 200 no saldo? Estamos sobrescrevendo o valor do saldo.

Para evitar esse tipo de situação, podemos bloquear o acesso a escrita no saldo do lado de fora da nossa classe Conta. Na propertie, podemos fazer isso deixando o set privado:

private double Saldo { get; private set; }

Desta forma, sempre que alguém tentar fazer:

Conta c = new Conta();
c.Saldo = 100;

Resultará em um erro de compilação.

Agora sempre que alguém quiser fazer uma operação que envolva o saldo, deverá interagir com os métodos que representam melhor as operações da nossa conta: o Saca() e o Deposita().

É por isso que no exercício fala que a operação de depósito não está encapsulada.

Você pode ver um pouco mais sobre isso aqui: https://www.caelum.com.br/apostila-csharp-orientacao-objetos/encapsulamento-e-modificadores-de-acesso/

faz sentido?

Abraço!