Prueba bancaria final
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 25 de 70.
Desafío
Fácil¡Felicitaciones por construir un sistema de Banco Digital completo! Tu clase Account ahora maneja depósitos, retiros, verificaciones de saldo, identificación de cuentas y transferencias entre cuentas. Vamos a ponerlo todo a prueba con un escenario bancario realista de múltiples cuentas.
En este desafío final, simularás un pequeño banco con tres clientes realizando diversas transacciones. Esto verificará que todos tus métodos funcionen correctamente juntos y que las cuentas mantengan verdaderamente un estado independiente.
Tus dos archivos:
Account.lua: Tu clase Account completa con toda la funcionalidad que has construido a lo largo de este proyecto (constructor con ID, deposit, withdraw, getBalance, __tostring y transfer).main.lua: Un script de simulación que crea múltiples cuentas y ejecuta una serie de transacciones entre ellas.
Recibirás seis entradas:
- ID de la Cuenta 1
- ID de la Cuenta 2
- ID de la Cuenta 3
- Depósito inicial para la Cuenta 1
- Depósito inicial para la Cuenta 2
- Depósito inicial para la Cuenta 3
En tu archivo principal, simula el siguiente día bancario:
- Crea tres cuentas con los IDs proporcionados
- Deposita los montos iniciales en cada cuenta respectiva
- La Cuenta 1 transfiere 100 a la Cuenta 2
- La Cuenta 2 transfiere 150 a la Cuenta 3
- La Cuenta 3 transfiere 50 a la Cuenta 1
- La Cuenta 1 intenta transferir 1000 a la Cuenta 3 (esto debería fallar)
- Imprime las tres cuentas en orden (Cuenta 1, luego 2, luego 3)
Por ejemplo, si las entradas son A001, A002, A003, 500, 300 y 200, la salida debería ser:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Hagamos un seguimiento: la Cuenta 1 comienza con 500, transfiere 100 a la Cuenta 2 (ahora 400), luego recibe 50 de la Cuenta 3 (ahora 450). La Cuenta 2 comienza con 300, recibe 100 (ahora 400), transfiere 150 a la Cuenta 3 (ahora 250). La Cuenta 3 comienza con 200, recibe 150 (ahora 350), transfiere 50 a la Cuenta 1 (ahora 300). La transferencia final de 1000 falla porque la Cuenta 1 solo tiene 450.
Pruébalo tú mismo
-- Requerir el módulo Account
local Account = require('Account')
-- Leer las seis entradas
local id1 = io.read()
local id2 = io.read()
local id3 = io.read()
local initialDeposit1 = tonumber(io.read())
local initialDeposit2 = tonumber(io.read())
local initialDeposit3 = tonumber(io.read())
-- Crear tres cuentas con IDs
-- TODO: crear account1, account2, account3 usando Account:new()
-- Depositar los montos iniciales en cada cuenta respectiva
-- TODO: depositar initialDeposit1 en account1, initialDeposit2 en account2, initialDeposit3 en account3
-- La Cuenta 1 transfiere 100 a la Cuenta 2
-- TODO: account1:transfer(account2, 100)
-- La Cuenta 2 transfiere 150 a la Cuenta 3
-- TODO: account2:transfer(account3, 150)
-- La Cuenta 3 transfiere 50 a la Cuenta 1
-- TODO: account3:transfer(account1, 50)
-- La Cuenta 1 intenta transferir 1000 a la Cuenta 3 (esto debería fallar)
-- TODO: account1:transfer(account3, 1000)
-- Imprimir las tres cuentas en orden
-- TODO: imprimir account1, account2, account3
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas