1
resposta

Faça como eu fiz: validação de saque

ContaBancaria.cs

namespace SistemaBanco.Modelos;
public class ContaBancaria {

    private decimal saldo;
    public string? Titular {get;set;}
    public decimal Saldo => saldo;

    public ContaBancaria(decimal saldo, string? titular) {
        this.saldo = saldo;
        Titular = titular;
    }

    public void Sacar(decimal valor) {
        if (SegurancaConta.ValidarSaque(valor)) {
            saldo -= valor;
            Console.WriteLine($"Saque de R${valor.ToString("F2")} realizado com sucesso.");
            Console.WriteLine($"Saldo atual: R${Saldo.ToString("F2")}");
        }
        else {
            Console.WriteLine("Saque negado pela política de segurança.");
        }
    }

}

SegurancaConta.cs

namespace SistemaBanco.Modelos;
internal class SegurancaConta {
    
    public static bool ValidarSaque(decimal valor) {
        return valor <= 1000; 
    }

}

Program.cs

using SistemaBanco.Modelos;
ContaBancaria conta = new ContaBancaria(2500, "Silvio Tasso");

Console.Clear();
conta.Sacar(1005);
conta.Sacar(800);
1 resposta

Olá, Diego, como vai?

Seu código atende perfeitamente aos requisitos propostos para o exercício de encapsulamento e delegação de lógica. A separação de responsabilidades entre a classe de conta e a classe de segurança interna foi implementada de maneira correta, garantindo que a validação do limite de saque ocorra conforme solicitado. É interessante notar como o uso do modificador internal na classe de segurança restringe o acesso ao mesmo assembly, reforçando o controle sobre as regras de negócio do sistema bancário.

Parabéns pelo excelente trabalho e por compartilhar sua solução com a comunidade. Continue praticando os conceitos de orientação a objetos e postando suas evoluções por aqui.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!