Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Calculo do imposto não desconta do saldo

Após ver o valor total de imposto aplicado na conta junto com o seguro de vida, de curiosidade fiz também o system out print do saldo para ver se descontaria.

Vi que não descontou e decidi tentar, porém algumas formas que fiz não deu certo e ainda aumentou o valor total de imposto.

Seria necessário criar outra classe ou outro método pára isso?

6 respostas

Oi Igor, tudo bem?

Manda o seu código aqui para que a gente possa analisar melhor!

Fico no aguardo!

public class ContaCorrente extends Conta implements Tributavel {

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

    }

    @Override
    public boolean saca(double valor) {

        double valorASacar = valor + 0.2;
        return super.saca(valorASacar);
    }

    //Praticando abstract
    @Override
    public void deposita(double valor) {

        if(valor >0) {

            super.saldo += valor;    

        }

    }

    @Override
    public double getValorImposto() {
        return super.saldo * 0.01;
    }

}
public class SeguroDeVida implements Tributavel {

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

}
public interface Tributavel {

    double getValorImposto ();

}
public class CalculadorImposto {

    private double totalImposto;

    public void registro(Tributavel t) {

        double valor = t.getValorImposto();
        this.totalImposto += valor;

    }

    public double getTotalImposto() {
        return totalImposto;
    }

}
public class TestaTributaveis {

    public static void main(String[] args) {

        ContaCorrente cc = new ContaCorrente(7777, 779955);
        cc.deposita(100);

        SeguroDeVida sv = new SeguroDeVida();

        CalculadorImposto ci = new CalculadorImposto();
        ci.registro(cc);
        ci.registro(sv);

        System.out.println(ci.getTotalImposto());
        System.out.println(cc.getSaldo());

    }

}

Aí desse último código saiu no console 43.0 e o outro 100.0

Minha curiosidade foi querer uma forma de já mostrar o saldo descontando o imposto. Tentei mudar algumas coisas na classe CalculadorImposto mas não deu certo porque pra puxar o saldo tem que estender a classe mãe, e se estender a classe mãe tem que montar o construtor.

solução!

E aí Igor, acho que agora entendi a sua motivação!

Veja que tanto na classe TestaTributaveis, quanto no CalculadorImposto, não implementamos nada que manipule o saldo como fizemos no método sobrescrito saca() da ContaCorrente que, de fato, tira o valor de 20 centavos toda vez que ocorre um saque na conta. Portanto, realmente é de se esperar que quando printamos o saldo em TestaTributaveis, nada aconteça, já que não usamos o método saca() na conta.

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

Em nosso caso, fazer alterações no CalculadorImposto não é a solução, já que a responsabilidade dessa classe é de registrar serviços - como conta corrente e seguro de vida - e somar seus impostos, nada mais do que isso. Sabendo disso, podemos pensar em uma maneira de cobrar os impostos da ContaCorrente.

Eu recomendo você tentar criar uma solução agora usando um método na ContaCorrente faz o pagamento do imposto. Mas se estiver sem paciência e quiser ver uma possível solução - mas que talvez não seja a melhor - é só continuar lendo! rs

Bom, uma solução mais simples pode ser criar um método na ContaCorrente que faz o pagamento do imposto, chamado pagaImposto(), por exemplo. Aqui, passamos como parâmetro o CalculadorImposto para que possamos ter acesso ao valor total do imposto que ele calculou, e depois descontamos o valor do imposto em cima do saldo da conta:

public void pagaImposto(CalculadorImposto ci) {
    super.saldo -= ci.getTotalImposto();
}

Testando o método na classe TestaTributaveis, temos o seguinte resultado:

Chamando método:

public class TestaTributaveis {

    public static void main(String[] args) {

        //Código omitido

        cc.pagaImposto(ci);

        System.out.println(ci.getTotalImposto());
        System.out.println(cc.getSaldo());
    }
}

Resultado:

43.0
57.0

Veja que agora o valor do imposto foi descontado no saldo! :D

Espero ter ajudado, se ficou qualquer dúvida é só avisar!

Bons estudos!!

Ajudou muito amigo, tenho que fazer na ContaCorrente mesmo agora que me liguei.

Irei fazer aqui, testar e se não der certo comparo com a forma que fez.

Muito obrigado!

Opa, é isso aí Igor!

No estado atual do nosso projeto, foi a solução que encontrei. Inclusive, uma coisa que esqueci de mencionar é que escolhi fazer a implementação do método na ContaCorrente, pois é uma má prática na Orientação a Objetos deixar outras classes manipularem o estado da ContaCorrente. O ideal seria que apenas ela tenha os métodos para fazer as alterações na própria classe.

Abraços e bons estudos!!

Sim compreendi, faz sentido assim pra mim também. Abração!