Der :new()-Konstruktor
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 8 von 70.
Objekte manuell zu erstellen, eine leere Tabelle anzulegen, ihre Metatabelle festzulegen und __index zu verknüpfen, wird schnell wiederholend. Die standardmäßige Lösung besteht darin, direkt in der Klasse eine :new()-Konstruktormethode zu definieren, die all das für dich erledigt.
Hier ist das Muster:
local Dog = {}
Dog.__index = Dog
function Dog:new()
local instance = {}
setmetatable(instance, self)
return instance
end
function Dog:bark()
print("Woof!")
endSehen wir uns an, was innerhalb von :new() passiert. Zuerst erstellen wir eine leere Tabelle namens instance. Dann setzen wir ihre Metatabelle auf self, also auf Dog, wenn wir Dog:new() aufrufen.
Da Dog.__index auf Dog selbst verweist, kann die Instanz alle in Dog definierten Methoden finden. Schließlich geben wir das neue Objekt zurück.
Beachte die Zeile Dog.__index = Dog außerhalb des Konstruktors. Dies ist eine gängige Abkürzung: Statt eine separate Metatabelle zu erstellen, dient die Klassentabelle sowohl als Prototyp als auch als Metatabelle.
Jetzt ist das Erstellen von Objekten sauber und konsistent:
local myDog = Dog:new()
myDog:bark() -- Ausgabe: Woof!Jede Klasse, die du erstellst, wird dieser gleichen Struktur folgen. Der Konstruktor :new() wird zum einzigen Ort, an dem die Objekterstellung stattfindet, wodurch dein Code übersichtlich und vorhersehbar wird.
Aufgabe
EinfachLass uns eine Cat-Klasse mit dem Standard-Konstruktor-Muster erstellen, das du gerade gelernt hast. Du wirst deinen Code auf zwei Dateien aufteilen, um eine ordnungsgemäße Modulstruktur zu üben.
Du wirst Folgendes erstellen:
Cat.lua: Definiere deineCat-Klasse mit dem vollständigen Konstruktor-Muster. Deine Klasse sollte Folgendes enthalten:- Die Klassentabelle mit
__index, das auf sich selbst verweist - Einen
:new()-Konstruktor, der eine Instanz erstellt, ihre Metatabelle festlegt und sie zurückgibt - Eine
:meow()-Methode, die das Geräusch der Katze ausgibt
- Die Klassentabelle mit
main.lua: Binde dein Cat-Modul ein und verwende den Konstruktor, um eine Katzeninstanz zu erstellen. Rufe anschließend ihre Methode auf, um zu überprüfen, dass alles korrekt verknüpft ist.
Du erhältst eine Eingabe: die Anzahl der Male, die deine Katze miauen soll.
Deine :meow()-Methode sollte exakt Folgendes ausgeben:
Meow!Erstelle in deiner Hauptdatei eine Katze mit Cat:new() und rufe :meow() so oft auf, wie angegeben.
Wenn die Eingabe beispielsweise 3 lautet, sollte die Ausgabe wie folgt aussehen:
Meow!
Meow!
Meow!Probier es selbst
-- Das Cat-Modul einbinden
local Cat = require('Cat')
-- Eingabe lesen: Anzahl der Male zum Miauen
local times = tonumber(io.read())
-- TODO: Erstelle eine Cat-Instanz mit Cat:new()
-- TODO: Rufe die :meow()-Methode die angegebene Anzahl von Malen auf
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
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