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

O metodo transfere...

Nao consegui entender como, no metodo transfere, é que o programa faz a ligacao da variavel valor da conta de destino com o valor total da conta destino em questao. Quando criamos o metodo, criamos uma variavel destino do tipo conta? O que é " transfere(valor, conta destino)".? Digo pq a palavra destino nao foi declarada em lugar algum...minha duvida é com ela. Abraço.

insira seu código aqui
4 respostas

Boa noite José,

A variável destino é do tipo Conta. Desta forma, ela recebe uma conta, que receberá a transferência, por exemplo. Digamos que eu vá te transferir uma grana, 50 reais. Exemplo bem básico.

Conta contaRodrigo = new Conta();
contaRodrigo.saldo = 1000;

Conta contaJose = new Conta();
contaJose.saldo = 1000;

// Como sou eu que vou transferir, você deve chamar o metodo transfere da variável contaRodrigo e definir o destino como contaJose

contaRodrigo.transfere(50, contaJose);

// ou seja, o metodo acima quer dizer, Rodrigo, transfira 50 reais para a conta do José

Espero ter esclarecido a dúvida. Abraço!

Vamos ao método:

class Conta {

    // atributos e métodos...

    void transfere(Conta destino, double valor) {
        this.saldo = this.saldo - valor;
        destino.saldo = destino.saldo + valor;
    }
}

O método transfere é do tipo void, ou seja, não retorna nada. Isso faz sentido, uma vez que eu quero transferir algo e não preciso de retorno. Daria pra retornar uma mensagem de OK ou de erro, mas foi feito assim pra simplificar. Note que esse método faz parte da classe Conta, logo você utiliza ele em um objeto da classe Conta para transferir algo de uma conta.

Novamente, observe a assinatura do método:

void transfere(Conta destino, double valor) { ... }

O que está entre parênteses chamamos de parâmetros/argumentos que o método utilizará pra algo. Se você tem uma conta, de qual informação seu banco precisa para fazer uma transferência? De uma Conta e do valor que vai transferir. E é isso que esse método pede, uma Conta de destino (tem que instanciar outro objeto do tipo Conta) e o valor que vai transferir. Olhe um exemplo utilizando o método:

class Teste {
    public static void main(String[] args) {
        Conta minhaConta = new Conta();
        minhaConta.titular.nome = "Bruno";

        Conta contaJose= new Conta();
        minhaConta.titular.nome = "José Antônio";

    minhaConta.transfere(contaJose, 55.75); // Sempre cuidado com a ordem dos parâmetros, se pedi primeiro Conta e depois double, tenho que passar assim pro método
    }
}

Com isso, transferi R$ 55.75 da conta de nome minhaConta para a conta de nome contaJose.

Esse método poderia se chamar transferePara, ficando com uma nomenclatura mais fácil de entender o propósito do método.

Entao quando eu chamo o metodo transfere, ele pega o valor que esta em destino.saldo e armazena no saldo da conta que informei? Essa ligacao entre o nome da conta destino usada na hora de chamar o metodo e a variavel destino.saldo que nao ficou clara pra mim.

solução!

Não, ele vai pegar o valor do parâmetro e adicionar no atributo saldo da conta destino.

No exemplo que dei transferindo R$ 55.75, ficaria assim:

destino.saldo = destino.saldo + valor;

Ou pra ficar mais simplificado:

destino.saldo += valor;

Os dois exemplos fazem a mesma coisa.

Perceba que passei para o método transfere contaJose e 55.75:

minhaConta.transfere(contaJose, 55.75);

Mas no exemplo acima usei os nomes destino e valor. Você entende o motivo disso? Quando você criou o método transfere, declarou que o método receberia dois parâmetros, um do tipo Conta e um do tipo double, e deu nomes a eles: destino e valor:

void transfere(Conta destino, double valor) {
        this.saldo = this.saldo - valor;
        destino.saldo = destino.saldo + valor;
    }

Ou seja, essa é apenas a declaração do método. Dentro dele, ele vai tratar o primeiro parâmetro como um objeto do tipo Conta e não importa o nome que você enviar da sua classe de teste, ele vai chamar de destino, assim como o segundo parâmetro que é do tipo double, ele vai chamar de valor. Então, o contaJose que eu mandei no teste lá em cima, para o método, se chama destino e o 55.75, ficará na variável valor.

Não importa os nomes dentro da declaração do método, só se importe em colocar nomes que façam sentido. Contudo, quando utilizar os métodos através das instâncias (objetos), o que importa é passar os parâmetros com os tipos corretos. O que acontecerá por trás não importa agora. Você sabe que o método vai transferir o dinheiro e ponto final.