Wiederholung - Benutzerverwaltung
Teil des Abschnitts Objektorientierte Programmierung der Lua-Journey von Coddy. Lektion 68 von 70.
Aufgabe
EinfachLass uns ein Benutzerverwaltungssystem entwickeln: eine praktische Anwendung, die du in vielen Programmen aus der Praxis finden würdest! Du wirst zwei Klassen erstellen, die zusammenarbeiten: eine, die einzelne Benutzer repräsentiert, und eine weitere, die eine Sammlung dieser Benutzer effizient verwaltet.
Du wirst deinen Code auf drei Dateien aufteilen:
User.lua: Erstelle eine User-Klasse, die einen einzelnen Benutzer im System repräsentiert. Jeder Benutzer hat eineidund einenname. Füge eine:getInfo()-Methode hinzu, die einen String im Format"ID: {id}, Name: {name}"zurückgibt.UserManager.lua: Erstelle eine Manager-Klasse, die eine Sammlung von Benutzern verwaltet. Überlege, wie du Benutzer für eine effiziente Suche speichern kannst: Die ID des Benutzers als Tabellenschlüssel zu verwenden, macht das Finden und Entfernen von Benutzern deutlich einfacher, als sie in einer Liste zu suchen. Dein Manager benötigt::addUser(user): fügt der Sammlung ein User-Objekt hinzu:removeUser(id): entfernt einen Benutzer anhand seiner ID:findUser(id): gibt den User mit der passenden ID zurück odernil, wenn keiner gefunden wurde:listUsers(): gibt die Informationen zu allen Benutzern aus, einen pro Zeile
main.lua: Führe alles zusammen! Erstelle einen UserManager, füge einige Benutzer auf Grundlage der erhaltenen Eingaben hinzu, führe Operationen aus und zeige die Ergebnisse an.
Du erhältst fünf Eingaben:
- ID des ersten Benutzers (eine Zahl)
- Name des ersten Benutzers
- ID des zweiten Benutzers (eine Zahl)
- Name des zweiten Benutzers
- ID eines Benutzers, nach dem gesucht werden soll (eine Zahl)
In deiner Hauptdatei:
- Erstelle einen UserManager und füge beide Benutzer hinzu
- Rufe
:listUsers()auf, um alle Benutzer auszugeben - Entferne den ersten Benutzer (unter Verwendung der ersten ID)
- Gib
"After removal:"aus - Rufe
:listUsers()erneut auf - Suche nach dem Benutzer mit der ID aus der fünften Eingabe; wenn er gefunden wird, gib seine Informationen aus, andernfalls gib
"User not found"aus
Wenn die Eingaben beispielsweise 101, Alice, 102, Bob und 102 lauten, sollte die Ausgabe folgendermaßen aussehen:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobWenn die Eingaben 201, Charlie, 202, Diana und 201 lauten, sollte die Ausgabe folgendermaßen aussehen:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundBeachte im zweiten Beispiel: Nachdem der Benutzer 201 (Charlie) entfernt wurde, gibt die Suche nach dieser ID "User not found" zurück, da er sich nicht mehr im System befindet!
Probier es selbst
-- main.lua: Alles zusammenbringen
local User = require('User')
local UserManager = require('UserManager')
-- Eingaben lesen
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: Erstelle eine UserManager-Instanz
-- TODO: Erstelle zwei User-Objekte mit den Eingabedaten
-- TODO: Füge beide Benutzer zum Manager hinzu
-- TODO: Rufe listUsers() auf, um alle Benutzer auszugeben
-- TODO: Entferne den ersten Benutzer (mit id1)
-- TODO: Print "After removal:"
-- TODO: Rufe listUsers() erneut auf
-- TODO: Suche nach dem Benutzer mit searchId
-- If found, print their info; if not found, print "User not found"
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