Finaler OOP-Check
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 70 von 70.
Aufgabe
EinfachLassen Sie uns alles zusammenbringen, was Sie über OOP in Lua gelernt haben! Sie werden ein Fahrzeugsystem bauen, das Vererbung, Kapselung durch Namenskonventionen und Mixins für optionale Funktionen demonstriert.
Sie werden Ihren Code über fünf Dateien organisieren:
Vehicle.lua: Die Basisklasse für alle Fahrzeuge. Jedes Fahrzeug hat einennameund eine nach privater Konvention benannte_speed(initialisiert auf 0). Fügen Sie einen:getName()Getter, einen:getSpeed()Getter und einen:setSpeed(value)Setter hinzu, der negative Werte ablehnt (wenn negativ, geben Sie"Speed cannot be negative"aus und ändern Sie den Wert nicht). Fügen Sie eine:describe()Methode hinzu, die"{name} moving at {speed}"zurückgibt.Refuelable.lua: Eine Mixin-Tabelle, die treibstoffbezogenes Verhalten enthält. Fügen Sie eine:refuel(amount)Methode hinzu, die zuself._fueladdiert, und eine:getFuel()Methode, die den aktuellen Treibstoffstand zurückgibt.Car.lua: Erbt von Vehicle und verwendet das Refuelable-Mixin. Der Konstruktor akzeptiert einennameund initialisiert_fuelauf 0. Überschreiben Sie:describe(), um"{name} moving at {speed}, fuel: {fuel}"zurückzugeben. Wenden Sie das Refuelable-Mixin an, um Autos Treibstoff-Funktionen zu geben.Bicycle.lua: Erbt nur von Vehicle – keine Treibstoff-Funktionalität erforderlich. Der Konstruktor akzeptiert nur einenname. Fahrräder verwenden die geerbte:describe()Methode ohne Modifikation.main.lua: Bringen Sie alles zusammen! Erstellen Sie ein Auto und ein Fahrrad basierend auf den Eingaben, demonstrieren Sie deren unterschiedliche Fähigkeiten und zeigen Sie, wie sie gemeinsames Fahrzeugverhalten teilen, während sie unterschiedliche Merkmale aufweisen.
Sie erhalten vier Eingaben:
- Name des Autos
- Name des Fahrrads
- Geschwindigkeit, die für beide Fahrzeuge eingestellt werden soll (eine Zahl)
- Treibstoffmenge, die dem Auto hinzugefügt werden soll (eine Zahl)
In Ihrer Hauptdatei:
- Erstellen Sie ein Auto und ein Fahrrad mit den angegebenen Namen
- Stellen Sie die Geschwindigkeit für beide Fahrzeuge mit der dritten Eingabe ein
- Tanken Sie das Auto mit der vierten Eingabe auf
- Geben Sie die Beschreibung des Autos aus
- Geben Sie die Beschreibung des Fahrrads aus
Wenn die Eingaben beispielsweise "Sedan", "Mountain Bike", "60" und "45" sind, 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" sind, sollte die Ausgabe wie folgt aussehen:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120Diese Herausforderung zeigt, wie Vererbung gemeinsames Verhalten ermöglicht (beide Fahrzeuge können sich bewegen), Mixins optionale Fähigkeiten hinzufügen (nur Autos benötigen Treibstoff) und Kapselung die Datenintegrität schützt (Geschwindigkeitsvalidierung). Jede Technik dient einem anderen Zweck in Ihrem Design!
Probier es selbst
-- main.lua: Alles zusammenführen
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 angegebenen Namen
-- TODO: Erstelle ein Fahrrad mit dem angegebenen Namen
-- TODO: Setze die Geschwindigkeit für beide Fahrzeuge
-- TODO: Betanke das Auto mit der Kraftstoffmenge
-- TODO: Gib die Beschreibung des Autos aus
-- TODO: Gib die Beschreibung des Fahrrads aus
Alle Lektionen in Object Oriented Programming
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-Klasse2Klassen-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