예제 #1
0
        static void MostrarOQueEhEncapsulamento()
        {
            tela.DesenharLinha();

            tela.EscreverNaCor("4) O que é encapsulamento?", Tela.corInformacaoDestaque);
            tela.PularLinha();

            tela.Escrever("Encapsulamento é a técnica que faz com que detalhes internos do funcionamento dos métodos de uma classe " +
                          "permaneçam ocultos para os objetos. Por conta dessa técnica, o conhecimento a respeito da implementação interna da classe " +
                          "é desnecessário do ponto de vista do objeto, uma vez que isso passa a ser responsabilidade dos métodos internos da classe.");
            // Fonte: https://www.devmedia.com.br/conceitos-encapsulamento-programacao-orientada-a-objetos/18702
            tela.PularLinha();

            tela.Escrever("No exemplo abaixo, a classe \"Conta\" possui o atributo \"saldo\" o qual não pode ser modificado diretamente, " +
                          "por estar encapsulado com visibilidade \"private\", sendo possível modificar o saldo apenas pelos métodos \"Sacar\" e \"Depositar\".");
            tela.PularLinha();

            var conta = new Conta();

            tela.EscreverNaMesmaLinha("Criada a conta, saldo atual: ");
            tela.EscreverNaMesmaLinhaENaCor(conta.Saldo.ToString(), Tela.corResultado);
            tela.PularLinha();

            tela.Escrever("É possível ler o atributo saldo pois o mesmo se encontra public para leitura.");
            tela.PularLinha();

            tela.Escrever("Não é possivel atribuir o valor ao atributo saldo diretamente, ocorre um erro de compilação, pelo motivo de estar " +
                          "encapsulado como private e ser acessível somente dentro da classe.");
            tela.EscreverNaCor("conta.saldo = 10;", Tela.corErro);
            tela.PularLinha();

            tela.Escrever("Modificando o atributo saldo pelo método Depositar (100)");
            conta.Depositar(100);

            tela.Escrever("Modificando o atributo saldo pelo método Sacar (50)");
            conta.Sacar(50);

            tela.EscreverNaMesmaLinha($"Saldo após lançamentos: ");
            tela.EscreverNaMesmaLinhaENaCor(conta.Saldo.ToString(), Tela.corResultado);
            tela.PularLinha(2);
        }