Récapitulatif - Gestionnaire d'utilisateurs
Fait partie de la section Object Oriented Programming du Journey Lua de Coddy — leçon 68 sur 70.
Défi
FacileConstruisons un système de gestion d'utilisateurs — une application pratique que vous trouveriez dans de nombreux programmes du monde réel ! Vous allez créer deux classes qui travaillent ensemble : l'une représentant les utilisateurs individuels, et l'autre qui gère une collection de ceux-ci de manière efficace.
Vous organiserez votre code sur trois fichiers :
User.lua: Créez une classe User qui représente un seul utilisateur dans le système. Chaque utilisateur a unidet unname. Incluez une méthode:getInfo()qui retourne une chaîne de caractères au format"ID: {id}, Name: {name}".UserManager.lua: Construisez une classe de gestionnaire qui manipule une collection d'utilisateurs. Réfléchissez à la manière de stocker les utilisateurs pour une recherche efficace — utiliser l'ID de l'utilisateur comme clé de table rend la recherche et la suppression d'utilisateurs beaucoup plus simples que de chercher dans une liste. Votre gestionnaire a besoin de ::addUser(user)— ajoute un objet User à la collection:removeUser(id)— supprime un utilisateur par son ID:findUser(id)— retourne l'User avec l'ID correspondant, ounils'il n'est pas trouvé:listUsers()— affiche les informations de tous les utilisateurs, une par ligne
main.lua: Rassemblez tout ! Créez un UserManager, ajoutez quelques utilisateurs basés sur les entrées que vous recevez, effectuez des opérations et affichez les résultats.
Vous recevrez cinq entrées :
- L'ID du premier utilisateur (un nombre)
- Le nom du premier utilisateur
- L'ID du deuxième utilisateur (un nombre)
- Le nom du deuxième utilisateur
- L'ID d'un utilisateur à rechercher (un nombre)
Dans votre fichier principal :
- Créez un UserManager et ajoutez les deux utilisateurs
- Appelez
:listUsers()pour afficher tous les utilisateurs - Supprimez le premier utilisateur (en utilisant le premier ID)
- Affichez
"After removal:" - Appelez
:listUsers()à nouveau - Recherchez l'utilisateur avec le cinquième ID d'entrée — s'il est trouvé, affichez ses informations ; s'il n'est pas trouvé, affichez
"User not found"
Par exemple, si les entrées sont 101, Alice, 102, Bob, et 102, la sortie devrait être :
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobSi les entrées sont 201, Charlie, 202, Diana, et 201, la sortie devrait être :
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundRemarquez dans le deuxième exemple, après avoir supprimé l'utilisateur 201 (Charlie), la recherche de cet ID retourne "User not found" puisqu'il n'est plus dans le système !
Essayez vous-même
-- main.lua: Rassembler tout le contenu
local User = require('User')
local UserManager = require('UserManager')
-- Lire les entrées
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: Créer une instance de UserManager
-- TODO: Créer deux objets User avec les données d'entrée
-- TODO: Ajouter les deux utilisateurs au gestionnaire
-- TODO: Appeler listUsers() pour afficher tous les utilisateurs
-- TODO: Supprimer le premier utilisateur (en utilisant id1)
-- TODO: Afficher "After removal:"
-- TODO: Appeler listUsers() à nouveau
-- TODO: Rechercher l'utilisateur avec searchId
-- Si trouvé, afficher ses informations ; sinon, afficher "User not found"
Toutes les leçons de Object Oriented Programming
1Le concept de « self »
Tables avec fonctions« self » expliciteLa syntaxe avec deux-pointsPoint vs deux-pointsRécapitulatif - Point mobile4Projet : Banque numérique
Configuration du projetMéthode de dépôt7Polymorphisme et Redéfinition
Redéfinition de méthodesAppeler des méthodes parentesDuck TypingInterface communeVérification du typeRécapitulatif - Rôles des employés10Projet : Gestionnaire de formes
Configuration du projetClasse Rectangle2Modèle de prototype de classe
Le concept de prototypeLiaison avec __indexLe constructeur :new()Initialisation des attributsInstances indépendantesRécapitulatif - Usine de voitures5Surcharge d'opérateurs en POO
Additionner des objetsSoustraire des objetsConcaténer des objetsComparer des objets (<, >)Récapitulatif - Calculs de portefeuille8Encapsulation
Conventions de nommageClosures pour la confidentialitéAccès via les ClosuresTables en lecture seuleLogique de validationRécapitulatif - Coffre-fort sécurisé11Patrons de conception (Lite)
Fonctions FactoryTable SingletonPatron IteratorObserver (Écouteur)Récapitulatif - Logger Factory3État et comportement des objets
Variables d'instanceMéthodes GetterMéthodes SetterPropriétés calculéesFormatage de chaînesVérifications d'égalitéRécapitulatif - Note de l'étudiant6Bases de l'héritage
Mise en place de l'héritageHériter des méthodesÉtendre le constructeurAjouter des méthodes enfantsPartagé vs UniqueRécapitulatif - Hiérarchie des formes9Composition et Mixins
Relation 'A un'DélégationMixins simplesAppliquer plusieurs MixinsMixins vs HéritageRécapitulatif - Assemblage de robots12Défis finaux
Récapitulatif - Système d'inventaireRécapitulatif - Gestionnaire d'utilisateursRécapitulatif - Suivi des scoresVérification finale POO