Menu
Coddy logo textTech

Transferir fondos

Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 24 de 70.

challenge icon

Desafío

Fácil

¡Tu Banco Digital está casi completo! La última característica importante es la capacidad de transferir dinero entre cuentas. Aquí es donde tu diseño orientado a objetos realmente brilla: un objeto de cuenta puede interactuar directamente con otro objeto de cuenta.

Añadirás un método :transfer(targetAccount, amount) que mueve dinero de una cuenta a otra. Piensa en lo que realmente implica esta operación: es un retiro de la cuenta de origen seguido de un depósito en la cuenta de destino. ¡La belleza es que puedes reutilizar los métodos que ya has construido!

Continúa construyendo sobre tus archivos existentes:

  • Account.lua: Añade un método :transfer(targetAccount, amount) a tu clase Account. Este método debe intentar retirar el monto de self y, si tiene éxito, depositar ese monto en la targetAccount. Si el retiro falla (fondos insuficientes), la transferencia no debe realizarse. Mantén toda tu funcionalidad existente (constructor con ID, deposit, withdraw, getBalance y __tostring).
  • main.lua: Crea múltiples cuentas y demuestra transferencias entre ellas, mostrando cómo cambian los saldos a través de diferentes objetos de cuenta.

Recibirás cinco entradas:

  1. ID de la primera cuenta
  2. ID de la segunda cuenta
  3. Depósito inicial en la primera cuenta
  4. Monto de la primera transferencia (de la cuenta 1 a la cuenta 2)
  5. Monto de la segunda transferencia (de la cuenta 1 a la cuenta 2)

En tu archivo principal, crea dos cuentas con los IDs proporcionados (ambas comenzando con saldo 0), deposita el monto inicial en la primera cuenta, luego intenta ambas transferencias de la primera cuenta a la segunda. Después de cada intento de transferencia, imprime ambas cuentas (el __tostring mostrará su estado actual).

Por ejemplo, si las entradas son 101, 102, 500, 200 y 400, la salida debería ser:

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

La primera cuenta comienza con 500 después del depósito. La primera transferencia de 200 tiene éxito, dejando a la cuenta 101 con 300 y a la cuenta 102 con 200. La segunda transferencia de 400 falla porque la cuenta 101 solo tiene 300, por lo que ambos saldos permanecen sin cambios.

Pruébalo tú mismo

-- Requerir el módulo Account
local Account = require('Account')

-- Leer las 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())

-- Crear dos cuentas con IDs
local account1 = Account:new(id1)
local account2 = Account:new(id2)

-- Depositar el monto inicial en la primera cuenta
account1:deposit(initialDeposit)

-- TODO: Intentar la primera transferencia de account1 a account2

-- TODO: Imprimir ambas cuentas después de la primera transferencia

-- TODO: Intentar la segunda transferencia de account1 a account2

-- TODO: Imprimir ambas cuentas después de la segunda transferencia

Todas las lecciones de Object Oriented Programming