Información de la cuenta
Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 23 de 70.
Desafío
Fácil¡Tu banco digital se está volviendo más profesional! Ahora hagamos que tus cuentas se muestren correctamente al imprimirlas. Al añadir un método metamágico __tostring, puedes controlar exactamente cómo aparece una cuenta: mostrando tanto un ID de cuenta como el saldo actual en un formato limpio y fácil de leer.
Seguirás trabajando sobre tus archivos existentes:
Account.lua: Amplía tu clase Account con dos nuevas funcionalidades:- Modifica el constructor
:new()para que acepte un parámetroidque identifique cada cuenta - Añade un método metamágico
__tostringque devuelva una cadena formateada con la información de la cuenta
- Modifica el constructor
main.lua: Crea cuentas con ID y demuestra cómo se muestran al imprimirlas.
El método __tostring debe devolver una cadena con este formato exacto:
Account [ID]: Balance = BALANCEDonde ID es el ID de la cuenta y BALANCE es el saldo actual.
Recibirás cuatro entradas:
- ID de la primera cuenta
- Importe del depósito de la primera cuenta
- ID de la segunda cuenta
- Importe del depósito de la segunda cuenta
En tu archivo principal, crea dos cuentas con los ID proporcionados, deposita los importes correspondientes en cada una y, después, imprime cada cuenta directamente usando print(). El método metamágico __tostring se llamará automáticamente cuando imprimas el objeto de la cuenta.
Por ejemplo, si las entradas son 1001, 500, 1002 y 750, la salida debería ser:
Account [1001]: Balance = 500
Account [1002]: Balance = 750Ahora cada cuenta tiene una identidad única y puede describirse claramente: ¡una experiencia bancaria mucho más profesional!
Pruébalo tú mismo
-- Requiere el módulo Account
local Account = require('Account')
-- Lee las cuatro entradas
local id1 = io.read()
local deposit1 = tonumber(io.read())
local id2 = io.read()
local deposit2 = tonumber(io.read())
-- Crea dos cuentas con IDs
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Deposita las cantidades respectivas
account1:deposit(deposit1)
account2:deposit(deposit2)
-- Imprime cada cuenta (usa __tostring)
print(account1)
print(account2)
Todas las lecciones de Programación Orientada a Objetos
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 formasPractica por tu cuenta: Compilador de Lua online