Menu
Coddy logo textTech

Transferir Fundos

Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 24 de 70.

challenge icon

Desafio

Fácil

Seu Banco Digital está quase completo! O último recurso importante é a capacidade de transferir dinheiro entre contas. É aqui que seu design orientado a objetos realmente se destaca: um objeto de conta pode interagir diretamente com outro objeto de conta.

Você adicionará um método :transfer(targetAccount, amount) que move dinheiro de uma conta para outra. Pense no que essa operação realmente envolve: é um saque da conta de origem seguido de um depósito na conta de destino. O melhor é que você pode reutilizar os métodos que já criou!

Continue desenvolvendo seus arquivos existentes:

  • Account.lua: Adicione um método :transfer(targetAccount, amount) à sua classe Account. Esse método deve tentar sacar o valor de self e, se for bem-sucedido, depositar esse valor em targetAccount. Se o saque falhar (fundos insuficientes), a transferência não deve acontecer. Mantenha todas as funcionalidades existentes (construtor com ID, depósito, saque, getBalance e __tostring).
  • main.lua: Crie várias contas e demonstre transferências entre elas, mostrando como os saldos mudam entre diferentes objetos de conta.

Você receberá cinco entradas:

  1. ID da primeira conta
  2. ID da segunda conta
  3. Depósito inicial na primeira conta
  4. Primeiro valor de transferência (da conta 1 para a conta 2)
  5. Segundo valor de transferência (da conta 1 para a conta 2)

Em seu arquivo principal, crie duas contas com os IDs fornecidos (ambas começando com saldo 0), deposite o valor inicial na primeira conta e, em seguida, tente fazer ambas as transferências da primeira conta para a segunda. Após cada tentativa de transferência, imprima ambas as contas (o __tostring mostrará o estado atual delas).

Por exemplo, se as entradas forem 101, 102, 500, 200 e 400, a saída deverá ser:

Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200

A primeira conta começa com 500 após o depósito. A primeira transferência de 200 é bem-sucedida, deixando a conta 101 com 300 e a conta 102 com 200. A segunda transferência de 400 falha porque a conta 101 tem apenas 300, portanto ambos os saldos permanecem inalterados.

Experimente você mesmo

-- Requer o módulo Account
local Account = require('Account')

-- Lê as cinco entradas
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())

-- Cria duas contas com IDs
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- Deposita o valor inicial na primeira conta
account1:deposit(initialDeposit)

-- TODO: Tenta a primeira transferência de account1 para account2

-- TODO: Imprime ambas as contas após a primeira transferência

-- TODO: Tenta a segunda transferência de account1 para account2

-- TODO: Imprime ambas as contas após a segunda transferência

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Lua online