Wiederholung - Benutzerverwaltung
Teil des Abschnitts Object Oriented Programming der Lua-Journey von Coddy — Lektion 68 von 70.
Aufgabe
EinfachLassen Sie uns ein Benutzerverwaltungssystem erstellen – eine praktische Anwendung, wie man sie in vielen realen Programmen findet! Sie werden zwei Klassen erstellen, die zusammenarbeiten: eine, die einzelne Benutzer repräsentiert, und eine andere, die eine Sammlung von ihnen effizient verwaltet.
Sie werden Ihren Code über drei Dateien organisieren:
User.lua: Erstellen Sie eine User-Klasse, die einen einzelnen Benutzer im System repräsentiert. Jeder Benutzer hat eineidund einenname. Fügen Sie eine:getInfo()-Methode hinzu, die einen String im Format"ID: {id}, Name: {name}"zurückgibt.UserManager.lua: Erstellen Sie eine Manager-Klasse, die eine Sammlung von Benutzern verwaltet. Überlegen Sie, wie Sie Benutzer für eine effiziente Suche speichern können – die Verwendung der ID des Benutzers als Tabellenschlüssel macht das Finden und Entfernen von Benutzern viel einfacher als das Durchsuchen einer Liste. Ihr Manager benötigt::addUser(user)— fügt ein User-Objekt zur Sammlung hinzu:removeUser(id)— entfernt einen Benutzer anhand seiner ID:findUser(id)— gibt den User mit der passenden ID zurück, odernil, falls nicht gefunden:listUsers()— gibt die Informationen für alle Benutzer aus, eine pro Zeile
main.lua: Bringen Sie alles zusammen! Erstellen Sie einen UserManager, fügen Sie einige Benutzer basierend auf den erhaltenen Eingaben hinzu, führen Sie Operationen aus und zeigen Sie die Ergebnisse an.
Sie erhalten 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 zu suchenden Benutzers (eine Zahl)
In Ihrer Hauptdatei:
- Erstellen Sie einen UserManager und fügen Sie beide Benutzer hinzu
- Rufen Sie
:listUsers()auf, um alle Benutzer auszugeben - Entfernen Sie den ersten Benutzer (unter Verwendung der ersten ID)
- Geben Sie
"After removal:"aus - Rufen Sie
:listUsers()erneut auf - Suchen Sie nach dem Benutzer mit der fünften Eingabe-ID – falls gefunden, geben Sie dessen Info aus; falls nicht gefunden, geben Sie
"User not found"aus
Wenn die Eingaben beispielsweise 101, Alice, 102, Bob und 102 sind, sollte die Ausgabe wie folgt 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 sind, sollte die Ausgabe wie folgt aussehen:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundBeachten Sie im zweiten Beispiel, dass nach dem Entfernen von Benutzer 201 (Charlie) die Suche nach dieser ID "User not found" zurückgibt, da dieser nicht mehr im System ist!
Probier es selbst
-- main.lua: Alles zusammenführen
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: Eine UserManager-Instanz erstellen
-- TODO: Zwei User-Objekte mit den Eingabedaten erstellen
-- TODO: Beide Benutzer zum Manager hinzufügen
-- TODO: listUsers() aufrufen, um alle Benutzer auszugeben
-- TODO: Den ersten Benutzer entfernen (unter Verwendung von id1)
-- TODO: "After removal:" ausgeben
-- TODO: listUsers() erneut aufrufen
-- TODO: Nach dem Benutzer mit searchId suchen
-- Wenn gefunden, dessen Info ausgeben; wenn nicht gefunden, "User not found" ausgeben
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