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

[Dúvida] Aula 03 ativade 10 - Mão na massa: Criando Métodos

Boa tarde pessoal, no final da descrição da atividade do projeto bytebank o professor Paulo nos propõe o seguinte desafio. 6) Fica como desafio alterar o método transfere para reutilizar nosso código implementado em saca para simplificar o código.

Não consegui pensar em uma forma de fazer isso, alguém conseguiu fazer dessa forma diferente para e simplificar o código? Gostaria de um direcionamento sobre para entender melhor como isso seria feito.

2 respostas
solução!

Fala Alexandre, tudo certo?

Primeiramente, parabéns pela dedicação e por ter procurado resolver o desafio, para ampliar ainda mais seus conhecimentos!

Vamos pensar primeiro em o que acontece em uma transação de saque:

  • É solicitado o saque de um valor x
  • É verificado se o saldo é suficiente, isso é, se saldo é maior que x
  • Caso seja, esse valor é sacado e subtraído do saldo na conta bancária

Agora, vamos pensar na operação de transferência:

  • A partir de uma conta, queremos fazer a transferência para uma outra conta informada, com o valor y
  • É verificado se na conta origem o saldo é suficiente
  • Caso seja, o valor é subtraído da conta de origem
  • Finalmente, o valor é adicionado na conta destino.

Pensando nisso, podemos notar uma semelhança entre as duas operações: a verificação de saldo e subtração no saldo, caso tenha disponibilidade. Agora que entendemos o contexto do problema, podemos olhar para o código:

Método saca():

public boolean saca(double valor){

    if (this.saldo >= valor) {
        this.saldo = this.saldo - valor;
        return true;
    }
    return false;
}

Onde vimos que existe justamente a operação em comum nas duas operações, e por fim é retornado um valor verdadeiro ou falso no caso de sucesso ou insucesso da operação. Pensando nisso, podemos utilizar esse valor para fazer uma verificação booleana! Algo como:


public boolean transfere(double valor, Conta destino){

    if(this.saca(valor)){
        destino.deposita(valor);
        return true;
    }
    return false;
}

Onde aproveitamos o comportamento do método saca() e caso ele seja executado com sucesso, isso é, retorne true, o bloco de código responsável por finalizar a transferência é executado e o valor verdadeiro é retornado, para indicar o sucesso na transferência, caso contrário é retornado false, para indicar falha.

Em caso de dúvidas, estou à disposição.

Um grande abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Olá Arthur, obrigado pela agilidade na resposta, consegui fazer antes de ver sua resposta, porém ainda assim teve uma diferença que faltou um pouco de minha atenção, onde o this.saca(valor) invés de eu coloca-lo como condição do nosso if, coloquei ele dentro do if, funciona também mas a sua forma acredito ser mais correta. Abaixo tem como ficou meu código vou ajusta-lo e deixa-lo como o seu, novamente obrigado pela resposta

public boolean transfere(double valor, Conta destino) {
        if(this.saldo >= valor) {
            this.saca(valor);  //com o this, defini que o método saca está se referindo a conta que invocou o método transfere
            destino.deposita(valor);
            return true;
        }
        return false;
    }