1
resposta

[Projeto] Sistema de pagamentos

package pagamentos.de.sistema;

public abstract class Pagamento {
    protected double valor;

    public Pagamento(double valor) {
        this.valor = valor;
    }

    public abstract void confirmarPagamento();
}

package pagamentos.de.sistema;

public class CartaoCredito extends Pagamento implements CalcularTaxa{
    public CartaoCredito(double valor) {
        super(valor);
    }

    @Override
    public double calcularTaxa() {
        return valor * 0.03;
    }

    @Override
    public void confirmarPagamento() {
        System.out.printf("Pagamento de R$%.2f confirmado no Cartão de Crédito (Taxa: R$%.2f)\n",valor, calcularTaxa());

    }
}

package pagamentos.de.sistema;

public class Boleto extends Pagamento implements CalcularTaxa{
    public Boleto(double valor) {
        super(valor);
    }

    @Override
    public double calcularTaxa() {
        return valor * 0.01;
    }

    @Override
    public void confirmarPagamento() {
        System.out.printf("Boleto de R$%.2f gerado com sucesso (Taxa: R$%.2f)\n",valor, calcularTaxa());

    }
}

package pagamentos.de.sistema;

public class Pix extends Pagamento{
    public Pix(double valor) {
        super(valor);
    }

    @Override
    public void confirmarPagamento() {
        System.out.printf("Pagamento via Pix de R$%.2f confirmado\n", valor);
    }
}

package pagamentos.de.sistema;

public interface CalcularTaxa {

    public double calcularTaxa();
}

package pagamentos.de.sistema;

public class SistemaDePagamento {
    public static void main(String[] args) {

        Pagamento cartao = new CartaoCredito(250.00);
        Pagamento boleto = new Boleto(500.00);
        Pagamento pix = new Pix(300.00);

        cartao.confirmarPagamento();
        boleto.confirmarPagamento();
        pix.confirmarPagamento();
    }
}
1 resposta

Oi, Augusto. Como vai?

Obrigada por compartilhar seu código com a comunidade Alura.

Gostei bastante da forma como você estruturou a classe Pagamento como abstrata e utilizou interface para o cálculo de taxa em CartaoCredito e Boleto.

Essa decisão mostra um bom entendimento de herança e polimorfismo, permitindo que todos os tipos sejam tratados como Pagamento no main. Isso deixa o código mais organizado, desacoplado e preparado para receber novos meios de pagamento no futuro, sem grandes alterações na estrutura principal.

Uma sugestão de melhoria é sobrescrever o método toString() nas classes, para facilitar a exibição das informações do objeto e evitar repetição de código ao imprimir dados. Por exemplo:


@Override
public String toString() {
    return "Valor: R$" + valor;
}

Dessa forma, você pode utilizar diretamente:

System.out.println(objeto);

Isso torna o código mais limpo, reutilizável e alinhado às boas práticas de orientação a objetos.

Continue praticando. Sua base em conceitos de POO está bem construída e isso fará diferença nos próximos desafios.

Alura

Conte com o apoio da comunidade Alura na sua jornada. Bons estudos.