Attribute initialisieren
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 9 von 70.
Der :new()-Konstruktor, den du kennengelernt hast, erstellt Objekte, aber jede Instanz beginnt identisch. Reale Objekte benötigen eindeutige Daten: Eine Person hat einen bestimmten Namen, ein Spieler hat eine Startpunktzahl. Damit Objekte nützlich sind, muss der Konstruktor Argumente akzeptieren und sie der neuen Instanz zuweisen.
So erweiterst du den Konstruktor, damit er Anfangswerte akzeptiert:
local Dog = {}
Dog.__index = Dog
function Dog:new(name, breed)
local instance = {}
setmetatable(instance, self)
instance.name = name
instance.breed = breed
return instance
end
function Dog:introduce()
print("I am " .. self.name .. ", a " .. self.breed)
endDer Konstruktor nimmt jetzt name und breed als Parameter entgegen. Nachdem wir die leere Instanz erstellt und ihre Metatabelle festgelegt haben, weisen wir diese Werte direkt den Feldern der Instanz zu. Jedes erstellte Objekt verfügt über ein eigenes name und breed.
local dog1 = Dog:new("Rex", "German Shepherd")
local dog2 = Dog:new("Bella", "Poodle")
dog1:introduce() -- Ausgabe: I am Rex, a German Shepherd
dog2:introduce() -- Ausgabe: I am Bella, a PoodleBeide Hunde teilen sich dieselbe :introduce()-Methode aus dem Prototyp, aber jeder hat seinen eigenen eindeutigen Namen und seine eigene Rasse, die in seiner Instanztabelle gespeichert sind. Das ist die Stärke der Kombination von Prototypen mit parametrisierten Konstruktoren: gemeinsames Verhalten mit individuellem Zustand.
Aufgabe
EinfachErstellen wir eine Person-Klasse, die eindeutige Personen mit eigenen Namen und Altersangaben erstellt. Du wirst deinen Code auf zwei Dateien verteilen, um eine korrekte Modulstruktur zu üben.
Du wirst Folgendes erstellen:
Person.lua: Definiere deinePerson-Klasse mit einem Konstruktor, der einen Namen und ein Alter akzeptiert. Füge eine:introduce()-Methode hinzu, mit der jede Person sich selbst vorstellen kann.main.lua: Binde dein Person-Modul ein und erstelle mithilfe der vorgegebenen Eingaben eine Personeninstanz. Lass sie sich anschließend vorstellen.
Dein :new(name, age)-Konstruktor sollte beide Werte akzeptieren und sie in der neuen Instanz speichern. Die :introduce()-Methode sollte exakt in diesem Format ausgeben:
Hello, my name is [name] and I am [age] years oldDu erhältst zwei Eingaben:
- Der Name der Person
- Das Alter der Person
Wenn die Eingaben beispielsweise Alice und 25 lauten, sollte die Ausgabe folgendermaßen aussehen:
Hello, my name is Alice and I am 25 years oldProbier es selbst
-- Das Person-Modul einbinden
local Person = require('Person')
-- Eingabe lesen
local name = io.read()
local age = io.read()
-- TODO: Erstelle eine neue Person-Instanz mit Person:new(name, age)
-- TODO: Rufe die introduce()-Methode auf deiner Person-Instanz 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