2
respostas

Método Tributavel

Olá. Implementei uma nova parte do código, pensando em uma possível alteração das regras de tributação e não ter que sair mexendo depois em TODOS os possíveis tributáveis. Mas gostaria de saber se, da forma que eu fiz, seria possível acessar essa classe sem ser uma conta Tributável. Ex: conta poupança calcular imposto, sem ser necessário.

Conta Corrente

public class ContaCorrente extends Conta implements Tributavel{

    public ContaCorrente(int agencia, int numero) {
        super(agencia, numero);         
    }

    @Override
    public boolean saca(double valor) {
        valor += 0.20;
        return super.saca(valor);
    }

    @Override
    public void deposita(double valor) {
        super.saldo += valor;

    }

    @Override
    public double getValorTributavel() {
        return super.saldo;
    }

}

Seguro de Vida

public class SeguroDeVida implements Tributavel {

    @Override
    public double getValorTributavel() {
        return 42;
    }

}

Calculador de Imposto

public class CalculadorDeImposto {

    private double totalImposto;

    public void registra(Tributavel t) {

        TributadorUtil ir = new TributadorUtil();
        double valor = t.getValorTributavel();

        valor = ir.imposto(valor);

        this.totalImposto += valor;
    }

    public double getTotalImposto() {
        return totalImposto;
    }

}

Tributador Util

public class TributadorUtil {

    public double imposto(double saldo) {

        System.out.println("Valor recebido: " + saldo);

        if(saldo<= 1903.98) {
            System.out.println("Isento");
            return 0;
        }else if(saldo >1903.98 && saldo <= 2826.65) {
            saldo *= 0.075;
            System.out.println("Tribudado em 7.5%: " + saldo);
            return saldo;
        }else if(saldo >2826.65 && saldo <= 3751.05) {
            saldo *= 0.15;
            System.out.println("Tribudado em 15%: " + saldo);
            return saldo;
        }else if(saldo >3751.05 && saldo <= 4664.68) {
            saldo *= 0.225;
            System.out.println("Tribudado em 22.5%: " + saldo);
            return saldo;
        }else{
            saldo *= 0.275;
            System.out.println("Tribudado em 27.5%: " + saldo);
            return saldo;
        }        
    }
}

Esse código funcionou para me passar o valor de imposto, mas não sei se é gambiarra ou se dessa forma está correta. Aguardo retorno.

2 respostas

Fiz alguns testes e vi que deu certo. Não teria como usar a Conta Poupança pra chamar o tributável e ele aceitou utilizar esse método para colocar as regras de tributação. Agora a duvida que ficou é: Eu conseguiria dentro desse método identificar se é uma conta ou um seguro/aplicação/previdencia, para diferenciar as regras de cobrança, ou eu teria que fazer isso já de forma individual para cada código?

Olá Victor,

tente com instanceof.