Metodo di prelievo
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 21 di 70.
Sfida
FacileLa tua banca digitale sta crescendo! Ora i conti possono ricevere depositi, ma una vera banca deve anche permettere ai clienti di prelevare denaro. Aggiungiamo un metodo :withdraw(amount), con un importante controllo di sicurezza.
A differenza dei depositi, i prelievi possono non andare a buon fine. Se un cliente cerca di prelevare più denaro di quanto ne abbia, la banca non dovrebbe consentirlo. Il tuo metodo withdraw deve controllare che ci siano fondi sufficienti prima di detrarre l’importo.
Continuerai a lavorare con i tuoi due file:
Account.lua: aggiungi un metodo:withdraw(amount)alla classe Account esistente. Se il conto ha un saldo sufficiente, sottrai l’importo e restituiscitrue. Se i fondi non sono sufficienti, stampaInsufficient fundse restituiscifalsesenza modificare il saldo.main.lua: crea un conto, effettua un deposito per aggiungere fondi e poi prova a eseguire diversi prelievi per osservare sia le transazioni riuscite sia quelle non riuscite.
Riceverai quattro valori in input:
- Importo del deposito iniziale
- Importo del primo prelievo
- Importo del secondo prelievo
- Importo del terzo prelievo
Nel tuo file principale, crea un conto, deposita l’importo iniziale e poi prova a eseguire ogni prelievo nell’ordine indicato. Dopo ogni tentativo di prelievo, stampa il saldo corrente su una nuova riga. Ricorda che anche i prelievi non riusciti stamperanno Insufficient funds prima che tu stampi il saldo.
Ad esempio, se i valori in input sono 100, 30, 50 e 40, l’output dovrebbe essere:
70
20
Insufficient funds
20Dopo il deposito, il conto parte da 100. Il primo prelievo di 30 riesce (saldo: 70), il secondo prelievo di 50 riesce (saldo: 20), ma il terzo prelievo di 40 non riesce perché rimangono solo 20, quindi il saldo resta 20.
Provalo tu
-- Carica il modulo Account
local Account = require('Account')
-- Leggi i quattro input
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Crea un solo conto
local account = Account:new()
-- Deposita l'importo iniziale
account:deposit(initialDeposit)
-- Tenta il primo prelievo e stampa il saldo
-- TODO: chiama account:withdraw(withdrawal1) qui
print(account.balance)
-- Tenta il secondo prelievo e stampa il saldo
-- TODO: chiama account:withdraw(withdrawal2) qui
print(account.balance)
-- Tenta il terzo prelievo e stampa il saldo
-- TODO: chiama account:withdraw(withdrawal3) qui
print(account.balance)
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