Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução

package com.github.lucasdevrj.exercicios.sistemabancario;

public interface AcaoBancaria {

    void executar();

}
package com.github.lucasdevrj.exercicios.sistemabancario;

import java.math.BigDecimal;

public abstract class OperacaoBancaria implements AcaoBancaria {

    private BigDecimal valor;

    public OperacaoBancaria(BigDecimal valor) {
        this.valor = valor;
    }

    public BigDecimal getValor() {
        return valor;
    }
}
package com.github.lucasdevrj.exercicios.sistemabancario;

import java.math.BigDecimal;

public class Deposito extends OperacaoBancaria {

    public Deposito(BigDecimal valor) {
        super(valor);
    }

    @Override
    public void executar() {
        String deposito = String.format("Depósito de R$%.2f realizado", getValor());
        System.out.println(deposito);
    }
}
package com.github.lucasdevrj.exercicios.sistemabancario;

import java.math.BigDecimal;

public class Saque extends OperacaoBancaria {

    public Saque(BigDecimal valor) {
        super(valor);
    }

    @Override
    public void executar() {
        String saque = String.format("Saque de R$%.2f realizado", getValor());
        System.out.println(saque);
    }
}
package com.github.lucasdevrj.exercicios.sistemabancario;

import java.math.BigDecimal;

public class Principal {
    public static void main(String[] args) {
        Deposito deposito = new Deposito(new BigDecimal("120.00"));
        Saque saque = new Saque(new BigDecimal("80.00"));

        deposito.executar();
        saque.executar();
    }
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Tudo certin?

1 resposta

Olá, Lucas! Como vai?

Parabéns pela resolução da atividade!

Vi que você estruturou muito bem o sistema bancário usando interfaces e classes abstratas em Java. A interface AcaoBancaria define o contrato, a classe abstrata OperacaoBancaria centraliza o atributo valor, e as classes concretas Deposito e Saque implementam o comportamento específico.

Esse padrão mostra claramente o uso de polimorfismo e herança, deixando o código organizado e extensível. Uma dica interessante para o futuro é criar uma classe Conta que mantenha o saldo e receba operações (Deposito e Saque) para atualizar esse saldo. Assim, você simula de forma mais realista o funcionamento de uma conta bancária:

public class Conta {
    private BigDecimal saldo = BigDecimal.ZERO;

    public void executarOperacao(OperacaoBancaria operacao) {
        operacao.executar();
        if (operacao instanceof Deposito) {
            saldo = saldo.add(operacao.getValor());
        } else if (operacao instanceof Saque) {
            saldo = saldo.subtract(operacao.getValor());
        }
        System.out.println("Saldo atual: R$" + saldo);
    }
}

E na Principal:

Conta conta = new Conta();
conta.executarOperacao(new Deposito(new BigDecimal("120.00")));
conta.executarOperacao(new Saque(new BigDecimal("80.00")));

Isso deixa o sistema mais próximo de um cenário real, onde operações afetam diretamente o saldo da conta.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Validação de saldo: impedir saques maiores que o saldo disponível.
  • Uso de exceções personalizadas: lançar erros claros em operações inválidas.
  • Testes unitários: garantir que depósitos e saques funcionem corretamente em diferentes cenários.

Ah, uma pergunta: você acha que adicionar uma classe Conta para gerenciar saldo deixaria o sistema mais robusto e próximo de um banco real ou prefere manter as operações isoladas para simplificar o exercício?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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