Końcowy test banku
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 25 z 70.
Wyzwanie
ŁatwyGratulacje! Udało Ci się zbudować kompletny system bankowości cyfrowej! Twoja klasa Account obsługuje teraz wpłaty, wypłaty, sprawdzanie salda, identyfikację kont i przelewy między kontami. Przetestujmy to wszystko w realistycznym scenariuszu bankowym obejmującym wiele kont.
W tym ostatnim wyzwaniu zasymulujesz działanie małego banku, w którym trzech klientów wykonuje różne transakcje. Dzięki temu sprawdzisz, czy wszystkie metody poprawnie ze sobą współpracują i czy konta rzeczywiście zachowują niezależny stan.
Twoje dwa pliki:
Account.lua: kompletna klasa Account ze wszystkimi funkcjonalnościami, które utworzyłeś w trakcie tego projektu (konstruktor z ID, deposit, withdraw, getBalance, __tostring i transfer).main.lua: skrypt symulacyjny, który tworzy wiele kont i wykonuje serię transakcji między nimi.
Otrzymasz sześć danych wejściowych:
- ID konta 1
- ID konta 2
- ID konta 3
- Początkowa wpłata na konto 1
- Początkowa wpłata na konto 2
- Początkowa wpłata na konto 3
W pliku głównym zasymuluj następujący dzień w banku:
- Utwórz trzy konta z podanymi ID
- Wpłać początkowe kwoty na odpowiednie konta
- Konto 1 przelewa 100 na konto 2
- Konto 2 przelewa 150 na konto 3
- Konto 3 przelewa 50 na konto 1
- Konto 1 próbuje przelać 1000 na konto 3 (ta operacja powinna się nie powieść)
- Wyświetl wszystkie trzy konta w kolejności (najpierw konto 1, potem 2, a następnie 3)
Na przykład, jeśli danymi wejściowymi są A001, A002, A003, 500, 300 i 200, wynik powinien być następujący:
Insufficient funds
Account [A001]: Balance = 450
Account [A002]: Balance = 250
Account [A003]: Balance = 300Prześledźmy przebieg: konto 1 zaczyna z kwotą 500, przelewa 100 na konto 2 (pozostaje 400), a następnie otrzymuje 50 od konta 3 (ma teraz 450). Konto 2 zaczyna z kwotą 300, otrzymuje 100 (ma teraz 400), a potem przelewa 150 na konto 3 (pozostaje 250). Konto 3 zaczyna z kwotą 200, otrzymuje 150 (ma teraz 350), a następnie przelewa 50 na konto 1 (pozostaje 300). Ostatni przelew na kwotę 1000 nie powiedzie się, ponieważ konto 1 ma tylko 450.
Spróbuj swoich sił
-- Załaduj moduł Account
local Account = require('Account')
-- Wczytaj sześć wartości wejściowych
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())
-- Utwórz trzy konta z identyfikatorami
-- TODO: utwórz account1, account2, account3 za pomocą Account:new()
-- Wpłać początkowe kwoty na odpowiednie konta
-- TODO: wpłać initialDeposit1 na account1, initialDeposit2 na account2, initialDeposit3 na account3
-- Konto 1 przelewa 100 na konto 2
-- TODO: account1:transfer(account2, 100)
-- Konto 2 przelewa 150 na konto 3
-- TODO: account2:transfer(account3, 150)
-- Konto 3 przelewa 50 na konto 1
-- TODO: account3:transfer(account1, 50)
-- Konto 1 próbuje przelać 1000 na Konto 3 (ta operacja powinna się nie powieść)
-- TODO: account1:transfer(account3, 1000)
-- Wyświetl wszystkie trzy konta po kolei
-- TODO: wyświetl account1, account2, account3 za pomocą print
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