1
resposta

Minha solução do desafio

namespace Teste4_Alura.ExercicioOO;

internal class PagamentoBoleto : Pessoa3, IPagamento
{
    public PagamentoBoleto(string nome, string email) : base(nome, email)
    {

    }

    public void ProcessarPagamento()
    {
        Console.WriteLine($"Processando pagamento via boleto para {Nome} - {Email}");
    }
}
namespace Teste4_Alura.ExercicioOO;

internal class PagamentoCredito : Pessoa3, IPagamento
{

    public PagamentoCredito(string nome, string email) : base(nome, email)
    {

    }

    public void ProcessarPagamento()
    {
        Console.WriteLine($"Processando pagamento com cartao de credito para {Nome} - {Email}");
    }
}
namespace Teste4_Alura.ExercicioOO;

internal interface IPagamento
{
    void ProcessarPagamento();
}
namespace Teste4_Alura.ExercicioOO;

internal class Pessoa3
{
    public string Nome { get; set; }
    public string Email { get; set; }
    public Pessoa3(string nome, string email)
    {
        Nome = nome;
        Email = email;
    }



}
#region Desafio Sistema de Pagamentos
using Teste4_Alura.ExercicioOO;

PagamentoCredito cliente1 = new PagamentoCredito("Andre","andre@email.com");
PagamentoBoleto cliente2 = new PagamentoBoleto("Juliana", "juliana@email.com");

cliente1.ProcessarPagamento();
cliente2.ProcessarPagamento();

#endregion
1 resposta

Oii Ulysses,

Parabéns pela resolução do desafio. O seu código ficou muito organizado e você aplicou corretamente os conceitos de Orientação a Objetos propostos.

Gostaria de destacar dois pontos muito positivos na sua implementação:

1. Reutilização de construtores
Você fez o uso correto da palavra-chave base(nome, email).Fazendo isso, você reaproveitou a lógica que já estava pronta na classe Pessoa3, evitando ter que digitar this.Nome = nome e this.Email = email repetidas vezes nas classes filhas. Isso facilita muito a manutenção do código.

2. Contrato da interface
Você respeitou perfeitamente o "contrato" da interface IPagamento. Ao obrigar que tanto o Boleto quanto o Crédito tenham o método ProcessarPagamento(), você garante que seu sistema seja previsível.

Uma curiosidade para seus próximos passos: como ambas as classes implementam a interface IPagamento, no futuro você poderá criar uma lista do tipo List<IPagamento>. Isso permitiria misturar boletos e cartões na mesma lista e processar todos com um único laço de repetição, sem precisar saber qual é qual. Isso é o polimorfismo na prática.

Continue praticando assim.

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