Metoda wypłaty
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 21 z 70.
Wyzwanie
ŁatwyTwój Bank Cyfrowy się rozwija! Na konta można już wpłacać pieniądze, ale prawdziwy bank musi też umożliwiać klientom ich wypłacanie. Dodajmy metodę :withdraw(amount), ale z ważnym zabezpieczeniem.
W przeciwieństwie do wpłat wypłaty mogą się nie powieść. Jeśli klient spróbuje wypłacić więcej pieniędzy, niż ma na koncie, bank nie powinien na to pozwolić. Metoda wypłaty musi sprawdzić, czy dostępne środki są wystarczające, zanim odejmie daną kwotę.
Kontynuujesz pracę z dwoma plikami:
Account.lua: Dodaj metodę:withdraw(amount)do istniejącej klasy Account. Jeśli saldo konta jest wystarczające, odejmij daną kwotę i zwróćtrue. Jeśli środków jest za mało, wypiszInsufficient fundsi zwróćfalse, nie zmieniając salda.main.lua: Utwórz konto, wpłać na nie pewną kwotę, a następnie spróbuj wykonać kilka wypłat, aby zobaczyć zarówno udane, jak i nieudane transakcje.
Otrzymasz cztery dane wejściowe:
- Kwota początkowej wpłaty
- Kwota pierwszej wypłaty
- Kwota drugiej wypłaty
- Kwota trzeciej wypłaty
W pliku głównym utwórz konto, wpłać początkową kwotę, a następnie spróbuj wykonać kolejno każdą wypłatę. Po każdej próbie wypłaty wypisz bieżące saldo w nowej linii. Pamiętaj, że nieudane wypłaty również wypiszą Insufficient funds, zanim wypiszesz saldo.
Na przykład, jeśli danymi wejściowymi są 100, 30, 50 i 40, wynikiem powinno być:
70
20
Insufficient funds
20Po wpłacie saldo konta wynosi 100. Pierwsza wypłata w wysokości 30 kończy się powodzeniem (saldo: 70), druga wypłata w wysokości 50 również się udaje (saldo: 20), ale trzecia wypłata w wysokości 40 kończy się niepowodzeniem, ponieważ pozostało tylko 20, więc saldo pozostaje równe 20.
Spróbuj swoich sił
-- Załaduj moduł Account
local Account = require('Account')
-- Odczytaj cztery wartości wejściowe
local initialDeposit = tonumber(io.read())
local withdrawal1 = tonumber(io.read())
local withdrawal2 = tonumber(io.read())
local withdrawal3 = tonumber(io.read())
-- Utwórz jedno konto
local account = Account:new()
-- Wpłać kwotę początkową
account:deposit(initialDeposit)
-- Spróbuj wykonać pierwszą wypłatę i wyświetl saldo
-- TODO: wywołaj tutaj account:withdraw(withdrawal1)
print(account.balance)
-- Spróbuj wykonać drugą wypłatę i wyświetl saldo
-- TODO: wywołaj tutaj account:withdraw(withdrawal2)
print(account.balance)
-- Spróbuj wykonać trzecią wypłatę i wyświetl saldo
-- TODO: wywołaj tutaj account:withdraw(withdrawal3)
print(account.balance)
Wszystkie lekcje w sekcji Programowanie obiektowe
1Koncepcja „self”
Tabele z funkcjamiJawne „self”Składnia z dwukropkiemKropka czy dwukropekPodsumowanie — poruszający się punkt4Projekt: Bank cyfrowy
Konfiguracja projektuMetoda wpłaty7Polimorfizm i nadpisywanie
Nadpisywanie metodWywoływanie metod klasy nadrzędnejTypowanie kaczeWspólny interfejsSprawdzanie typuPodsumowanie — role pracowników10Projekt: Menedżer kształtów
Konfiguracja projektuKlasa prostokątaKlasa kołaMetoda obwoduKolekcja kształtówPole całkowiteFiltrowanie kształtów2Wzorzec prototypu klasy
Koncepcja prototypuŁączenie za pomocą __indexKonstruktor :new()Inicjalizacja atrybutówNiezależne instancjePodsumowanie – fabryka samochodów5Przeciążanie operatorów w OOP
Dodawanie obiektówOdejmowanie obiektówŁączenie obiektówPorównywanie obiektów (<, >)Powtórka — działania na portfelu8Hermetyzacja
Konwencje nazewnictwaDomknięcia dla prywatnościDostęp za pomocą domknięćTabele tylko do odczytuLogika walidacjiPodsumowanie — bezpieczny sejf11Wzorce projektowe (podstawy)
Funkcje fabrykująceTabela SingletonWzorzec iteratoraObserwator (nasłuchujący)Powtórka — fabryka loggera3Stan i zachowanie obiektu
Zmienne instancjiMetody dostępoweMetody ustawiająceWłaściwości obliczaneFormatowanie ciągów znakówSprawdzanie równościPodsumowanie – ocena ucznia6Podstawy dziedziczenia
Konfiguracja dziedziczeniaDziedziczenie metodRozszerzanie konstruktoraDodawanie metod potomnychWspólne i unikalne elementyPowtórka — hierarchia kształtówPoćwicz samodzielnie: Kompilator Lua online