Menu
Coddy logo textTech

Transferir fondos

Parte de la sección Programación Orientada a Objetos 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 función importante es la capacidad de transferir dinero entre cuentas. Aquí es donde tu diseño orientado a objetos realmente destaca: 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 ventaja es que puedes reutilizar los métodos que ya has creado!

Continúa trabajando 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 importe de self y, si tiene éxito, depositar ese importe en targetAccount. Si el retiro falla (fondos insuficientes), la transferencia no debe realizarse. Conserva toda la funcionalidad existente (constructor con ID, deposit, withdraw, getBalance y __tostring).
  • main.lua: Crea varias cuentas y demuestra transferencias entre ellas, mostrando cómo cambian los saldos de los distintos 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. Primer importe de transferencia (de la cuenta 1 a la cuenta 2)
  5. Segundo importe de transferencia (de la cuenta 1 a la cuenta 2)

En tu archivo principal, crea dos cuentas con los ID proporcionados (ambas con un saldo inicial de 0), deposita el importe inicial en la primera cuenta y después intenta realizar ambas transferencias de la primera cuenta a la segunda. Después de cada intento de transferencia, imprime ambas cuentas (el método __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, por lo que la cuenta 101 queda con 300 y la cuenta 102 con 200. La segunda transferencia de 400 falla porque la cuenta 101 solo tiene 300, así que ambos saldos permanecen sin cambios.

Pruébalo tú mismo

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

-- Lee 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())

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

-- Deposita la cantidad inicial en la primera cuenta
account1:deposit(initialDeposit)

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

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

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

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

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Lua online