Test finale della banca
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 25 di 70.
Sfida
FacileCongratulazioni per aver creato un sistema completo di banca digitale! La tua classe Account ora gestisce depositi, prelievi, controlli del saldo, identificazione dei conti e trasferimenti tra conti. Mettiamo tutto alla prova con uno scenario bancario realistico con più conti.
In questa sfida finale, simulerai una piccola banca con tre clienti che effettuano varie transazioni. Questo verificherà che tutti i tuoi metodi funzionino correttamente insieme e che i conti mantengano davvero uno stato indipendente.
I tuoi due file:
Account.lua: la tua classe Account completa, con tutte le funzionalità che hai sviluppato durante questo progetto (costruttore con ID, deposito, prelievo, getBalance, __tostring e trasferimento).main.lua: uno script di simulazione che crea più conti ed esegue una serie di transazioni tra di essi.
Riceverai sei input:
- ID del conto 1
- ID del conto 2
- ID del conto 3
- Deposito iniziale per il conto 1
- Deposito iniziale per il conto 2
- Deposito iniziale per il conto 3
Nel tuo file principale, simula la seguente giornata bancaria:
- Crea tre conti con gli ID forniti
- Deposita gli importi iniziali nei rispettivi conti
- Il conto 1 trasferisce 100 al conto 2
- Il conto 2 trasferisce 150 al conto 3
- Il conto 3 trasferisce 50 al conto 1
- Il conto 1 tenta di trasferire 1000 al conto 3 (l'operazione dovrebbe fallire)
- Stampa tutti e tre i conti nell'ordine indicato (conto 1, poi 2, poi 3)
Ad esempio, se gli input sono A001, A002, A003, 500, 300 e 200, l'output dovrebbe essere:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Ripercorriamo i passaggi: il conto 1 parte da 500, trasferisce 100 al conto 2 (ora ha 400), poi riceve 50 dal conto 3 (ora ha 450). Il conto 2 parte da 300, riceve 100 (ora ha 400) e trasferisce 150 al conto 3 (ora ha 250). Il conto 3 parte da 200, riceve 150 (ora ha 350) e trasferisce 50 al conto 1 (ora ha 300). Il trasferimento finale di 1000 non va a buon fine perché il conto 1 ha solo 450.
Provalo tu
-- Carica il modulo Account
local Account = require('Account')
-- Leggi i sei valori di input
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())
-- Crea tre account con ID
-- TODO: crea account1, account2, account3 usando Account:new()
-- Deposita gli importi iniziali nei rispettivi account
-- TODO: deposita initialDeposit1 in account1, initialDeposit2 in account2, initialDeposit3 in account3
-- Account 1 trasferisce 100 ad Account 2
-- TODO: account1:transfer(account2, 100)
-- Account 2 trasferisce 150 ad Account 3
-- TODO: account2:transfer(account3, 150)
-- Account 3 trasferisce 50 ad Account 1
-- TODO: account3:transfer(account1, 50)
-- Account 1 tenta di trasferire 1000 a Account 3 (l'operazione dovrebbe fallire)
-- TODO: account1:transfer(account3, 1000)
-- Stampa tutti e tre gli account in ordine
-- TODO: print account1, account2, account3
Tutte le lezioni di Programmazione orientata agli oggetti
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle formeEsercitati da solo: Compilatore Lua online