Ripasso - Gestore utenti
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 68 di 70.
Sfida
FacileCostruiamo un sistema di gestione degli utenti: un'applicazione pratica che troveresti in molti programmi del mondo reale! Creerai due classi che collaborano: una rappresenta i singoli utenti e l'altra gestisce in modo efficiente una raccolta di utenti.
Organizzerai il codice in tre file:
User.lua: crea una classe User che rappresenta un singolo utente del sistema. Ogni utente ha unide unname. Includi un metodo:getInfo()che restituisca una stringa nel formato"ID: {id}, Name: {name}".UserManager.lua: crea una classe manager che gestisce una raccolta di utenti. Pensa a come memorizzare gli utenti per consentire ricerche efficienti: usare l'ID dell'utente come chiave della tabella rende trovare e rimuovere gli utenti molto più semplice che cercarli in una lista. Il manager deve avere::addUser(user): aggiunge un oggetto User alla raccolta:removeUser(id): rimuove un utente usando il suo ID:findUser(id): restituisce l'User con l'ID corrispondente, oppurenilse non viene trovato:listUsers(): stampa le informazioni di tutti gli utenti, uno per riga
main.lua: metti insieme ogni elemento! Crea un UserManager, aggiungi alcuni utenti in base agli input ricevuti, esegui delle operazioni e mostra i risultati.
Riceverai cinque input:
- ID del primo utente (un numero)
- Nome del primo utente
- ID del secondo utente (un numero)
- Nome del secondo utente
- ID dell'utente da cercare (un numero)
Nel file principale:
- Crea un UserManager e aggiungi entrambi gli utenti
- Chiama
:listUsers()per stampare tutti gli utenti - Rimuovi il primo utente (usando il primo ID)
- Stampa
"After removal:" - Chiama di nuovo
:listUsers() - Cerca l'utente con l'ID del quinto input; se viene trovato, stampa le sue informazioni, altrimenti stampa
"User not found"
Per esempio, se gli input sono 101, Alice, 102, Bob e 102, l'output dovrebbe essere:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobSe gli input sono 201, Charlie, 202, Diana e 201, l'output dovrebbe essere:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundNota che nel secondo esempio, dopo aver rimosso l'utente 201 (Charlie), la ricerca di quell'ID restituisce "User not found" perché l'utente non è più nel sistema!
Provalo tu
-- main.lua: Metti tutto insieme
local User = require('User')
local UserManager = require('UserManager')
-- Leggi gli input
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: Crea un'istanza di UserManager
-- TODO: Crea due oggetti User con i dati di input
-- TODO: Aggiungi entrambi gli utenti al manager
-- TODO: Chiama listUsers() per stampare tutti gli utenti
-- TODO: Rimuovi il primo utente (usando id1)
-- TODO: Stampa "After removal:"
-- TODO: Chiama di nuovo listUsers()
-- TODO: Cerca l'utente con searchId
-- Se lo trovi, stampa le sue informazioni; altrimenti, stampa "User not found"
Tutte le lezioni di Programmazione orientata agli oggetti
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle forme9Composizione e mixin
Relazione Has-ADelegaMixin sempliciApplicare più mixinMixin vs ereditarietàRiepilogo - Assemblaggio di robot12Sfide finali
Ripasso - Sistema di inventarioRipasso - Gestore utentiRipasso - Tracciamento punteggiVerifica finale di OOPEsercitati da solo: Compilatore Lua online