Finaler OOP-Check
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 70 von 70.
Aufgabe
EinfachFühren wir alles zusammen, was du über OOP in Lua gelernt hast! Du erstellst ein Fahrzeugsystem, das Vererbung, Kapselung durch Namenskonventionen und Mixins für optionale Fähigkeiten demonstriert.
Du organisierst deinen Code über fünf Dateien:
Vehicle.lua: Die Basisklasse für alle Fahrzeuge. Jedes Fahrzeug hat einennameund einen privaten_speedgemäß der Namenskonvention (initialisiert auf 0). Füge einen Getter:getName(), einen Getter:getSpeed()und einen Setter:setSpeed(value)hinzu, der negative Werte ablehnt (bei einem negativen Wert sollSpeed cannot be negativeausgegeben und der Wert nicht geändert werden). Füge eine:describe()-Methode hinzu, die"{name} moving at {speed}"zurückgibt.Refuelable.lua: Eine Mixin-Tabelle mit tankbezogenem Verhalten. Füge eine:refuel(amount)-Methode hinzu, dieself._fuelerhöht, sowie eine:getFuel()-Methode, die den aktuellen Tankfüllstand zurückgibt.Car.lua: Erbt von Vehicle und verwendet das Refuelable-Mixin. Der Konstruktor akzeptiert einennameund initialisiert_fuelauf 0. Überschreibe:describe(), sodass"{name} moving at {speed}, fuel: {fuel}"zurückgegeben wird. Wende das Refuelable-Mixin an, damit Autos über Tankfunktionen verfügen.Bicycle.lua: Erbt ausschließlich von Vehicle: Es wird keine Tankfunktion benötigt. Der Konstruktor akzeptiert nur einenname. Fahrräder verwenden die geerbte:describe()-Methode ohne Änderungen.main.lua: Führe alles zusammen! Erstelle anhand der Eingaben ein Auto und ein Fahrrad, demonstriere ihre unterschiedlichen Fähigkeiten und zeige, wie sie gemeinsames Fahrzeugverhalten teilen und zugleich individuelle Merkmale besitzen.
Du erhältst vier Eingaben:
- Name des Autos
- Name des Fahrrads
- Geschwindigkeit, die für beide Fahrzeuge festgelegt werden soll (eine Zahl)
- Dem Auto hinzuzufügende Kraftstoffmenge (eine Zahl)
In deiner Hauptdatei:
- Erstelle ein Auto und ein Fahrrad mit den angegebenen Namen
- Lege die Geschwindigkeit für beide Fahrzeuge mithilfe der dritten Eingabe fest
- Betanke das Auto mit der vierten Eingabe
- Gib die Beschreibung des Autos aus
- Gib die Beschreibung des Fahrrads aus
Wenn die Eingaben beispielsweise Sedan, Mountain Bike, 60 und 45 lauten, sollte die Ausgabe wie folgt aussehen:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60Wenn die Eingaben Sports Car, Road Bike, 120 und 80 lauten, sollte die Ausgabe wie folgt aussehen:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120Diese Aufgabe zeigt, wie Vererbung gemeinsames Verhalten bereitstellt (beide Fahrzeuge können sich bewegen), Mixins optionale Fähigkeiten hinzufügen (nur Autos benötigen Kraftstoff) und Kapselung die Datenintegrität schützt (Validierung der Geschwindigkeit). Jede Technik erfüllt in deinem Entwurf einen anderen Zweck!
Probier es selbst
-- main.lua: Alles zusammenbringen
local Car = require('Car')
local Bicycle = require('Bicycle')
-- Eingaben lesen
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: Erstelle ein Auto mit dem gegebenen Namen
-- TODO: Erstelle ein Fahrrad mit dem gegebenen Namen
-- TODO: Setze die Geschwindigkeit für beide Fahrzeuge
-- TODO: Tanke das Auto mit der Kraftstoffmenge auf
-- TODO: Gib die Beschreibung des Autos aus
-- TODO: Gib die Beschreibung des Fahrrads aus
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