Récapitulatif - Gestionnaire d'utilisateurs
Fait partie de la section Programmation orientée objet du Journey Lua de Coddy. Leçon 68 sur 70.
Défi
FacileConstruisons un système de gestion des utilisateurs : une application pratique que l'on trouve dans de nombreux programmes du monde réel ! Vous allez créer deux classes qui fonctionnent ensemble : l'une représentant des utilisateurs individuels, et l'autre gérant efficacement une collection de ces utilisateurs.
Vous organiserez votre code dans trois fichiers :
User.lua: créez une classe User qui représente un seul utilisateur du système. Chaque utilisateur possède unidet unname. Incluez une méthode:getInfo()qui renvoie une chaîne au format"ID: {id}, Name: {name}".UserManager.lua: construisez une classe de gestionnaire qui gère une collection d'utilisateurs. Réfléchissez à la manière de stocker les utilisateurs pour permettre une recherche efficace : utiliser l'ID de l'utilisateur comme clé de table rend la recherche et la suppression des utilisateurs beaucoup plus simples que de parcourir une liste. Votre gestionnaire doit inclure ::addUser(user): ajoute un objet User à la collection:removeUser(id): supprime un utilisateur à l'aide de son ID:findUser(id): renvoie l'utilisateur dont l'ID correspond, 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 des utilisateurs à partir des entrées reçues, effectuez des opérations et affichez les résultats.
Vous recevrez cinq entrées :
- ID du premier utilisateur (un nombre)
- Nom du premier utilisateur
- ID du deuxième utilisateur (un nombre)
- Nom du deuxième utilisateur
- ID de l'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 (à l'aide du premier ID)
- Affichez
"After removal:" - Appelez à nouveau
:listUsers() - Recherchez l'utilisateur correspondant à l'ID de la cinquième entrée ; s'il est trouvé, affichez ses informations ; sinon, 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 que dans le deuxième exemple, après la suppression de l'utilisateur 201 (Charlie), la recherche de cet ID renvoie "User not found", puisqu'il ne fait plus partie du système !
REQUIRED OUTPUT FORMAT:Essayez vous-même
-- main.lua : Rassembler le tout
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 manager
-- TODO: Appeler listUsers() pour afficher tous les utilisateurs
-- TODO: Supprimer le premier utilisateur (en utilisant id1)
-- TODO: Print "After removal:"
-- TODO: Appeler listUsers() à nouveau
-- TODO: Rechercher l'utilisateur avec searchId
-- If found, print their info; if not found, print "User not found"
Toutes les leçons de Programmation orientée objet
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 RectangleClasse CercleMéthode PérimètreCollection de formesAire totaleFiltrer les formes2Modè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 POOEntraînez-vous par vous-même : Compilateur Lua en ligne