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

Dúvida no Ex. 6 da Aula 5 - Estados que variam e o State

Pessoal me surgiu uma dúvida sobre onde de fato, colocar as classes de estado no meu projeto.

O que eu consigo perceber é que, as classes de estado representam única e exclusivamente os estados da classe em si.

Portanto é necessário mesmo criarmos os estados em um arquivo separado, visto que, apenas 1 objeto pode utilizar aqueles estados?

Poderíamos, ao invés de criar classes separadas, criarmos os estados dentro da própria classe que a utiliza, ou seja, classes internas?

Dessa forma:

public class Conta {

    private double saldo;

    private EstadoDaConta estadoAtual;

    public Conta(double saldo) {
        this.saldo = saldo;

        if (this.saldo > 0) {
            this.estadoAtual = new ContaPositiva();
        }

    }

    public void sacar(double valorSaque) {
        estadoAtual.sacarDa(this, valorSaque);
    }

    public void depositar(double valorDeposito) {
        estadoAtual.depositarNa(this, valorDeposito);
    }

    public double getSaldo() {
        return saldo;
    }

    private class ContaPositiva implements EstadoDaConta {

        @Override
        public void sacarDa(Conta conta, double valorSaque) {

            conta.saldo -= valorSaque;

            if (conta.saldo < 0) {

                conta.estadoAtual = new ContaNegativa();

            }

        }

        @Override
        public void depositarNa(Conta conta, double valorDeposito) {

            conta.saldo += valorDeposito * 0.98;

        }

    }

    private class ContaNegativa implements EstadoDaConta {

        @Override
        public void sacarDa(Conta conta, double valorSaque) {
            throw new RuntimeException("Conta negativa, não permitido realizar saques!");
        }

        @Override
        public void depositarNa(Conta conta, double valorDeposito) {

            conta.saldo += valorDeposito * 0.95;

            if (conta.saldo > 0) {

                conta.estadoAtual = new ContaPositiva();

            }

        }

    }

}
2 respostas
solução!

Oi Rafael,

Boa pergunta. Acho que isso é um pouco questão de gosto.

Eu também tento deixar essas classes perto da classe grande, mas prefiro deixar em arquivos separados, pois meu olho não gosta de ver um arquivo muito longo!

O que vc acha?

Maurício, concordo contigo. E pensando bem faz mais sentido realmente ter os estados do objeto em classes separadas.

No caso do exercício, a classe Orçamento é bem simples, porém no dia a dia, dificilmente pegamos classes tão simples quanto essa. Geralmente é uma classe grande e que é difícil dar manutenção. Criar classes private dentro da classe que usa os estados, me parece uma solução desagradável visto que, estenderia ainda mais a classe.

Muito obrigado Maurício!