Przelew środków
Część sekcji Programowanie obiektowe ścieżki Lua w Coddy. Lekcja 24 z 70.
Wyzwanie
ŁatwyTwój Bank Cyfrowy jest prawie gotowy! Ostatnią dużą funkcją jest możliwość przelewania pieniędzy między kontami. Właśnie tutaj Twój projekt zorientowany obiektowo pokazuje swoje zalety: jeden obiekt konta może bezpośrednio współdziałać z innym obiektem konta.
Dodasz metodę :transfer(targetAccount, amount), która przenosi pieniądze z jednego konta na drugie. Zastanów się, na czym tak naprawdę polega ta operacja: to wypłata z konta źródłowego, a następnie wpłata na konto docelowe. Zaletą jest to, że możesz ponownie wykorzystać metody, które już utworzyłeś!
Kontynuuj pracę na istniejących plikach:
Account.lua: Dodaj do klasy Account metodę:transfer(targetAccount, amount). Metoda powinna spróbować wypłacić kwotę zself, a jeśli się powiedzie, wpłacić tę kwotę natargetAccount. Jeśli wypłata się nie powiedzie (z powodu niewystarczających środków), przelew nie powinien się odbyć. Zachowaj całą dotychczasową funkcjonalność (konstruktor z ID, wpłatę, wypłatę, getBalance i __tostring).main.lua: Utwórz wiele kont i zademonstruj przelewy między nimi, pokazując zmiany sald różnych obiektów kont.
Otrzymasz pięć danych wejściowych:
- ID pierwszego konta
- ID drugiego konta
- Początkowa wpłata na pierwsze konto
- Kwota pierwszego przelewu (z konta 1 na konto 2)
- Kwota drugiego przelewu (z konta 1 na konto 2)
W pliku głównym utwórz dwa konta o podanych ID (oba z początkowym saldem 0), wpłać początkową kwotę na pierwsze konto, a następnie spróbuj wykonać oba przelewy z pierwszego konta na drugie. Po każdej próbie przelewu wypisz oba konta (metoda __tostring pokaże ich aktualny stan).
Na przykład, jeśli danymi wejściowymi są 101, 102, 500, 200 i 400, wynikiem powinno być:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200Pierwsze konto ma po wpłacie saldo 500. Pierwszy przelew na kwotę 200 powiedzie się, pozostawiając saldo konta 101 równe 300, a saldo konta 102 równe 200. Drugi przelew na kwotę 400 nie powiedzie się, ponieważ na koncie 101 jest tylko 300, więc oba salda pozostaną bez zmian.
Spróbuj swoich sił
-- Załaduj moduł Account
local Account = require('Account')
-- Odczytaj pięć wartości wejściowych
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- Utwórz dwa konta z identyfikatorami
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Wpłać początkową kwotę na pierwsze konto
account1:deposit(initialDeposit)
-- TODO: Spróbuj wykonać pierwszy przelew z account1 na account2
-- TODO: Wyświetl oba konta po pierwszym przelewie
-- TODO: Spróbuj wykonać drugi przelew z account1 na account2
-- TODO: Wyświetl oba konta po drugim przelewie
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