Repaso - Gestor de usuarios
Parte de la sección Object Oriented Programming del Journey de Lua de Coddy — lección 68 de 70.
Desafío
Fácil¡Vamos a construir un sistema de gestión de usuarios, una aplicación práctica que encontrarías en muchos programas del mundo real! Crearás dos clases que trabajan juntas: una que representa a los usuarios individuales y otra que gestiona una colección de ellos de manera eficiente.
Organizarás tu código en tres archivos:
User.lua: Crea una clase User que represente a un único usuario en el sistema. Cada usuario tiene unidy unname. Incluye un método:getInfo()que devuelva una cadena con el formato"ID: {id}, Name: {name}".UserManager.lua: Construye una clase administradora que maneje una colección de usuarios. Piensa en cómo almacenar usuarios para una búsqueda eficiente; usar el ID del usuario como clave de tabla hace que encontrar y eliminar usuarios sea mucho más sencillo que buscar en una lista. Tu administrador necesita::addUser(user)— añade un objeto User a la colección:removeUser(id)— elimina un usuario por su ID:findUser(id)— devuelve el User con el ID coincidente, onilsi no se encuentra:listUsers()— imprime la información de todos los usuarios, uno por línea
main.lua: ¡Une todo! Crea un UserManager, añade algunos usuarios basados en las entradas que recibas, realiza operaciones y muestra los resultados.
Recibirás cinco entradas:
- ID del primer usuario (un número)
- Nombre del primer usuario
- ID del segundo usuario (un número)
- Nombre del segundo usuario
- ID de un usuario para buscar (un número)
En tu archivo principal:
- Crea un UserManager y añade ambos usuarios
- Llama a
:listUsers()para imprimir todos los usuarios - Elimina al primer usuario (usando el primer ID)
- Imprime
"After removal:" - Llama a
:listUsers()de nuevo - Busca al usuario con el quinto ID de entrada; si se encuentra, imprime su información; si no se encuentra, imprime
"User not found"
Por ejemplo, si las entradas son 101, Alice, 102, Bob, y 102, la salida debería ser:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobSi las entradas son 201, Charlie, 202, Diana, y 201, la salida debería ser:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not found¡Observa en el segundo ejemplo que, después de eliminar al usuario 201 (Charlie), buscar ese ID devuelve "User not found" ya que ya no está en el sistema!
Pruébalo tú mismo
-- main.lua: Unir todo
local User = require('User')
local UserManager = require('UserManager')
-- Leer entradas
local id1 = tonumber(io.read())
local name1 = io.read()
local id2 = tonumber(io.read())
local name2 = io.read()
local searchId = tonumber(io.read())
-- TODO: Crear una instancia de UserManager
-- TODO: Crear dos objetos User con los datos de entrada
-- TODO: Agregar ambos usuarios al manager
-- TODO: Llamar a listUsers() para imprimir todos los usuarios
-- TODO: Eliminar al primer usuario (usando id1)
-- TODO: Imprimir "After removal:"
-- TODO: Llamar a listUsers() nuevamente
-- TODO: Buscar al usuario con searchId
-- Si se encuentra, imprimir su información; si no se encuentra, imprimir "User not found"
Todas las lecciones de Object Oriented Programming
1El concepto de 'self'
Tablas con funciones'self' explícitoLa sintaxis de dos puntosPunto vs. dos puntosResumen - Punto en movimiento4Proyecto: Banco Digital
Configuración del proyectoMétodo de depósito2Patrón de prototipo de clase
El concepto de prototipoVinculación con __indexEl constructor :new()Inicialización de atributosInstancias independientesResumen - Fábrica de coches5Sobrecarga de operadores en POO
Sumar objetosRestar objetosConcatenar objetosComparar objetos (<, >)Resumen - Matemáticas de la billetera8Encapsulamiento
Convenciones de nomenclaturaClosures para privacidadAcceso mediante ClosuresTablas de solo lecturaLógica de validaciónResumen - Bóveda segura11Patrones de diseño (Lite)
Funciones FactoryTabla SingletonPatrón IteradorObserver (Listener)Resumen - Logger Factory3Estado y Comportamiento de los Objetos
Variables de InstanciaMétodos GetterMétodos SetterPropiedades CalculadasFormateo de StringsComprobaciones de IgualdadResumen - Calificación del Estudiante6Fundamentos de la herencia
Configuración de la herenciaHerencia de métodosExtender el constructorAñadir métodos hijosCompartido vs. ÚnicoResumen: Jerarquía de formas9Composición y Mixins
Relación "Tiene-Un"DelegaciónMixins simplesAplicación de múltiples MixinsMixins vs. HerenciaResumen - Ensamblaje de robots12Desafíos finales
Repaso - Sistema de inventarioRepaso - Gestor de usuariosRepaso - Seguimiento de puntuaciónVerificación final de OOP