Conta Corrente - DAO e Observer

Exercício

Dadas as quatro classes a seguir, elabore uma classe abstrata Transacao que permita representá-las, generalizando todas as operações possíveis:


In [1]:
public class Debito {
    private float valor;
    public Debito(float valor) {
        this.valor = valor;
    }
    public float operacao(float saldo) {
        return saldo - valor;
    }
}

public class Credito {
    private float valor;
    public Credito(float valor) {
        this.valor = valor;
    }
    public float operacao(float saldo) {
        return saldo + valor;
    }
}

public class Rendimento {
    private float valor;
    public Rendimento(float valor) {
        this.valor = valor;
    }
    public float operacao(float saldo) {
        return saldo * (1 + valor/100);
    }
}

public class Depreciacao {
    private float valor;
    public Depreciacao(float valor) {
        this.valor = valor;
    }
    public float operacao(float saldo) {
        return saldo * (1 - valor/100);
    }
}

Resolução


In [ ]:

Exercício

Implemente uma classe Conta aplicar uma série de movimentos em uma conta bancária de um cliente, capaz de realizar as seguintes operações:

  • construtor - recebe como parâmetro o número da conta e o seu saldo inicial;
  • novaTransacao - aplica a transação (classe Transacao) recebida como parâmetro sobre o saldo e mostra o saldo atualizado na tela.

Crie uma interface para abstrair a operação de movimento.

Resolução


In [ ]:

Exercício

Considere que caixas bancários, caixas eletrônicos e o site do banco na internet (dentre outros) são Pontos de Transação. Esse tipo de ponto gera transações.

Tomando como base o pattern Observer, escreva uma interface IPontoTransacao que permita que diversos objetos IMovimento sejam capazes de monitorar cada objeto de Ponto de Transação. Cada vez que for executada uma transação no Ponto de Transação ela é enviada para todas as contas assinantes, que a aplicam nas respectivas contas.

Para fins de simplificação, considere que todas as transações sempre se destinarão à conta assinante.

Resolução


In [ ]:

Exercício

Expanda o método de assinatura de tal maneira que a assinatura seja personalizada, ou seja, ao assinar um Ponto de Transação o assinante informa o seu número da conta. Toda a transação realizada no Ponto de Transação deve passar a ter o número da conta associada. O ponto só notificará os assinantes cujo número da conta seja compatível com a transação.

Resolução


In [ ]:

Exercício

Considere uma estratégia de serialização em que um objeto herdeiro de Transacao transforma o seu estado completo em uma única String. Crie uma variante do método novaTransacao chamado novaTransacaoStr, em que é passado como parâmetro a String serializada para o assinante.

Um objeto herdeiro de Transacao também deve ter um método que seja capaz de converter a String serializada em seu estado interno (deserialização). O objeto assinante ao receber a String serializada pelo método novaTransacaoStr deve deserializá-lo e aplicar a operação, tal como acontece no método novaTransacao.

Resolução


In [ ]: