3
respostas

Duvida sobre metodo transferencia usando Herença

Pessoal estou montando uma atividade e fiz o sistema de contas só que usando herença.

Na minha classe super estar da seguinte forma:

package projetofinal.modelo;

/**
 * Conta
 */
public abstract class Conta {
    private int numeroConta;
    private double saldoConta;

    public Conta(int numeroConta) {
        this.numeroConta = numeroConta;
        this.saldoConta = 0;

    }

    public int getNumeroConta() {
        return numeroConta;
    }

    public double getSaldoConta() {
        return saldoConta;
    }

    public boolean depositar(double valor) {
        if (valor > 0) {
            saldoConta += valor; // saldo = saldo + valor;
            return true;
        }
        return false;
    }

    public boolean sacar(double valor) {
        if (valor > 0) {
            saldoConta -= valor;
            return true;
        }
        return false;
    }

    public boolean tranferir(Conta contaDestino, double valor) {
        if (this.getSaldoConta() >= valor) {
            this.sacar(valor);
            contaDestino.depositar(valor);
            return false;
        }
        return true;
    }



    @Override
    public String toString() {
        return numeroConta + " saldo: R$ " + saldoConta;
    }
}

Eu tenho uma classe de gerenciamento dos metodos que vou usar no main:

package projetofinal.servico;

import java.util.ArrayList;

import projetofinal.modelo.Conta;
import projetofinal.modelo.ContaCorrente;
import projetofinal.modelo.ContaPoupança;

public class ServicoApp {


    private ArrayList<Conta> listaContas;


    public ServicoApp() {
        listaContas = new ArrayList<>();
    }


    public void menuEntrada() {
        System.out.println("1- Criar Conta Corrente");
        System.out.println("2- Criar Conta Poupança");
        System.out.println("3- Depositar");
        System.out.println("4- Sacar");
        System.out.println("5- Extrato/Saldo");
        System.out.println("6- Transferência");
        System.out.println("7- Encerrar Programa");
    }

    public String contaSaldo(int numeroConta) {
        for (Conta contas : listaContas) {

            if (contas.getNumeroConta() == numeroConta) {
                return contas.toString();
            }
        }

        return "Conta não encontrada";
    }

    public void novaContaCorrente(int numeroConta) {

        listaContas.add(new ContaCorrente(numeroConta));
    }

    public void novaContaPoupanca(int numeroConta) {

        listaContas.add(new ContaPoupança(numeroConta));

    }

    public boolean depositarConta(int numeroConta, double valorDeposito) {
        for (Conta conta : listaContas) {
            if (conta.getNumeroConta() == numeroConta) {
                return conta.depositar(valorDeposito);
            }

        }
        return false;
    }

    public boolean sacarConta(int numeroConta, double valorSaque) {
        for (Conta conta : listaContas) {
            if (conta.getNumeroConta() == numeroConta) {
                return conta.sacar(valorSaque);
            }

        }
        return false;
    }

    public void transfereConta(int contaOrigem, int contaDestino, double valor) {

        for (Conta conta : listaContas) {


        }

    }


}

O problema começa aqui , eu não estou entendo e conseguindo fazer o metodo de transferencia pra usar no meu main.Não estou conseguindo entender a parte o metodo que estar no super ,vou usar ele pra receber o numero da conta e fazer a transferencia, mais tudo no metodo da classe de gerenciamento.

Socorro

3 respostas

Oi Ruan,

O método tranferir que está na classe super Conta contem a regra de negócio de fato da transferência, e pela definição inicial da OO, ela deve continuar lá em Conta.

Entendi que esse transfereConta do seu service precisa na verdade pesquisar 2 contas na sua listaContas, e acessar o método transferir de uma delas, passando a outra como parâmetro.

Conseguiu avançar no exercício?

Bom dia.

Sim consegui avançar nesse exercício.

Na minha classe mão criei o método abaixo.


    public boolean transfere(Conta contaDestino, double valor) {
        if (this.getSaldoConta() >= valor) {
            this.sacar(valor);
            contaDestino.depositar(valor);
            return true;
        }
        return false;

Na minha classe serviço criei um método de pesquisa dentro da minha listaContas para verificar se existe dentro da minha lista.

private Conta localizaConta(int numeroConta) {
        for (Conta conta : listaContas) {
            if (conta.getNumeroConta() == numeroConta) {
                return conta;
            }
        }
        return null;
    }

Também dentro da minha classe serviço criei o método transfereConta que recebe como parâmetro conta origem ,conta destino e valor de transferência. Dentro desse método eu chamo o método de localizaConta para verificar as contas origem e destino e chamo os métodos de saque e deposita, por que basicamente uma transferência é sacar de uma conta e depositar em outra. O código ficou assim :

  public boolean transfereConta(int numeroContaOrigem, int numeroContaDestino, double valor) {

        Conta contaOrigem = localizaConta(numeroContaOrigem);
        Conta contaDestino = localizaConta(numeroContaDestino);


        if (contaOrigem != null && contaDestino != null) {

            if (contaOrigem.sacar(valor)) {
                contaDestino.depositar(valor);
                return true;
            }
        }
        return false;
    }

Oi Ruan!

Muito bom! Parabéns pelo empenho nos estudos!

Continue praticando e qualquer dúvida pode contar com a gente.