none
Iniciante em c# necessitando de ajuda RRS feed

Todas as Respostas

  • Olá, Stryker00!

    Segue um exemplo de aplicação:

    namespace FaturamentoCliente
    {
        class Program
        {
            static void Main(string[] args)
            {
                var f = new Faturamento();
                var pessoaFisica = new ClientePessoaFisica();
                var pessoaJuridica = new ClientePessoaJuridica();
                var governo = new ClienteGoverno();
    
                Console.WriteLine(f.Faturar(pessoaFisica));
                Console.WriteLine(f.Faturar(pessoaJuridica));
                Console.WriteLine(f.Faturar(governo));
            }
        }
    
        public interface IFaturavel
        {
            double ObterDesconto();
            int DiasParaPagar();
        }
    
        public class Faturamento
        {
            public string Faturar (IFaturavel faturavel)
            {
                // Aqui vai a lógica de cálculo de faturamento 
                return string
                    .Format("Este cliente possui {0} dias para pagar e recebe {1}% de desconto", faturavel.DiasParaPagar(), faturavel.ObterDesconto() * 100);
            } 
        }
    
        public abstract class Cliente
        {
            // Descreva propriedades comuns a todos clientes
            // Ex: nome, endereço, telefone, etc.
        }
    
        public class ClientePessoaFisica : Cliente, IFaturavel
        {
            public int DiasParaPagar()
            {
                // 30 dias para pagar
                return 30;
            }
    
            public double ObterDesconto()
            {
                // 15% de desconto
                return 0.15;            
            }
        }
    
        public class ClientePessoaJuridica : Cliente, IFaturavel
        {
            public int DiasParaPagar()
            {
                // 60 dias para pagar
                return 60;
            }
    
            public double ObterDesconto()
            {
                // 20% de desconto
                return 0.20;
            }
        }
    
        public class ClienteGoverno : Cliente, IFaturavel
        {
            public int DiasParaPagar()
            {
                return 0;
            }
    
            public double ObterDesconto()
            {
                return 0;
            }
        }
    }

    Observe que foi implementada a interface IFaturavel e que o faturamento foi baseado nela. Isso permite que você consiga criar outros clientes com outras regras de faturamento sem precisar alterar o código da classe Faturamento. Basta fazer com que esses clientes também sejam faturáveis, como esses que estão implementados no código acima.

    Observe, também, que os clientes pessoa física, jurídica e governo herdam a classe Cliente. Faz sentido, uma vez que todos são clientes. A vantagem é que você pode escrever propriedades comuns a todos clientes dentro da classe Cliente e, automaticamente, todos os outros tipos herdariam tais propriedades.

    O bloco Try.. Catch poderia ser utilizado dentro do método Faturar, uma vez que cálculos matemáticos poderiam gerar exceções (uma divisão por zero, por exemplo).

    Dependendo da implementação, a exceção de tentar ler mais clientes do que existem talvez nem ocorra. Basta saber a quantidade total de clientes a serem faturados, antes de começar o faturamento. 

    Espero ter ajudado!

    Att, Wallace.


    “First do it, then do it right, then do it better.”

    • Marcado como Resposta Stryker00 sexta-feira, 19 de abril de 2019 18:49
    • Não Marcado como Resposta Stryker00 segunda-feira, 22 de abril de 2019 14:09
    quinta-feira, 18 de abril de 2019 12:45