Geld überweisen
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 24 von 70.
Aufgabe
EinfachDeine Digitalbank ist fast fertig! Das letzte große Feature ist die Möglichkeit, Geld zwischen Konten zu überweisen. Hier zeigt sich dein objektorientiertes Design wirklich von seiner besten Seite: Ein Kontoobjekt kann direkt mit einem anderen Kontoobjekt interagieren.
Du fügst eine :transfer(targetAccount, amount)-Methode hinzu, die Geld von einem Konto auf ein anderes überträgt. Überlege, was dieser Vorgang tatsächlich umfasst: Es handelt sich um eine Abhebung vom Quellkonto, gefolgt von einer Einzahlung auf das Zielkonto. Das Schöne daran ist, dass du die bereits erstellten Methoden wiederverwenden kannst!
Baue auf deinen vorhandenen Dateien weiter auf:
Account.lua: Füge deiner Account-Klasse eine:transfer(targetAccount, amount)-Methode hinzu. Diese Methode sollte versuchen, den Betrag vonselfabzuheben, und bei Erfolg diesen Betrag auf dastargetAccounteinzuzahlen. Falls die Abhebung fehlschlägt (unzureichendes Guthaben), darf die Überweisung nicht stattfinden. Behalte alle vorhandenen Funktionen bei (Konstruktor mit ID, deposit, withdraw, getBalance und __tostring).main.lua: Erstelle mehrere Konten und demonstriere Überweisungen zwischen ihnen. Zeige dabei, wie sich die Kontostände verschiedener Kontoobjekte ändern.
Du erhältst fünf Eingaben:
- ID des ersten Kontos
- ID des zweiten Kontos
- Anfangseinzahlung auf das erste Konto
- Erster Überweisungsbetrag (von Konto 1 zu Konto 2)
- Zweiter Überweisungsbetrag (von Konto 1 zu Konto 2)
Erstelle in deiner Hauptdatei zwei Konten mit den angegebenen IDs (beide mit einem Anfangsguthaben von 0), zahle den Anfangsbetrag auf das erste Konto ein und versuche anschließend beide Überweisungen vom ersten auf das zweite Konto. Gib nach jedem Überweisungsversuch beide Konten aus (__tostring zeigt ihren aktuellen Zustand an).
Wenn die Eingaben beispielsweise 101, 102, 500, 200 und 400 lauten, sollte die Ausgabe wie folgt aussehen:
Account [101]: Balance = 300
Account [102]: Balance = 200
Insufficient funds
Account [101]: Balance = 300
Account [102]: Balance = 200Das erste Konto startet nach der Einzahlung mit 500. Die erste Überweisung über 200 ist erfolgreich, sodass Konto 101 noch 300 und Konto 102 nun 200 hat. Die zweite Überweisung über 400 schlägt fehl, weil Konto 101 nur über 300 verfügt. Daher bleiben beide Kontostände unverändert.
Probier es selbst
-- Das Account-Modul einbinden
local Account = require('Account')
-- Die fünf Eingaben lesen
local id1 = io.read()
local id2 = io.read()
local initialDeposit = tonumber(io.read())
local transfer1 = tonumber(io.read())
local transfer2 = tonumber(io.read())
-- Zwei Konten mit IDs erstellen
local account1 = Account:new(id1)
local account2 = Account:new(id2)
-- Den Anfangsbetrag auf das erste Konto einzahlen
account1:deposit(initialDeposit)
-- TODO: Ersten Transfer von account1 zu account2 versuchen
-- TODO: Beide Konten nach dem ersten Transfer ausgeben
-- TODO: Zweiten Transfer von account1 zu account2 versuchen
-- TODO: Beide Konten nach dem zweiten Transfer ausgeben
Alle Lektionen in Objektorientierte Programmierung
1Das 'self'-Konzept
Tabellen mit FunktionenExplizites 'self'Die Doppelpunkt-SyntaxPunkt vs. DoppelpunktZusammenfassung – Beweglicher Punkt4Projekt: Digitale Bank
Projekt-SetupEinzahlungsmethode7Polymorphie & Überschreiben
Methoden überschreibenElternmethoden aufrufenDuck TypingGemeinsames InterfaceTyp prüfenRückblick - Mitarbeiterrollen10Projekt: Formen-Manager
Projekt-SetupRechteck-KlasseKreis-KlasseUmfang-MethodeFormen-SammlungGesamtflächeFormen filtern2Klassen-Prototyp-Muster
Das Prototyp-KonzeptVerknüpfung mit __indexDer :new()-KonstruktorAttribute initialisierenUnabhängige InstanzenZusammenfassung – Autofabrik5Operatorüberladung in OOP
Objekte addierenObjekte subtrahierenObjekte verkettenObjekte vergleichen (<, >)Rückblick – Wallet-Mathematik3Objektzustand und -verhalten
InstanzvariablenGetter-MethodenSetter-MethodenBerechnete EigenschaftenStrings formatierenGleichheitsprüfungenZusammenfassung – Studentennote6Grundlagen der Vererbung
Das Vererbungs-SetupMethoden vererbenDen Konstruktor erweiternChild-Methoden hinzufügenGemeinsam vs. EinzigartigZusammenfassung - Formen-Hierarchie9Komposition & Mixins
Has-A-BeziehungDelegationEinfache MixinsAnwendung mehrerer MixinsMixins vs. VererbungZusammenfassung – Roboter-Montage12Abschluss-Herausforderungen
Wiederholung - InventarsystemWiederholung - BenutzerverwaltungWiederholung - Score-TrackerFinaler OOP-CheckÜbe selbstständig: Online-Lua-Compiler