Menu
Coddy logo textTech

Repaso - Gestor de usuarios

Parte de la sección Programación Orientada a Objetos del Journey de Lua de Coddy. Lección 68 de 70.

challenge icon

Desafío

Fácil

Construyamos 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 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 solo usuario del sistema. Cada usuario tiene un id y un name. Incluye un método :getInfo() que devuelva una cadena con el formato "ID: {id}, Name: {name}".
  • UserManager.lua: Crea una clase administradora que gestione una colección de usuarios. Piensa en cómo almacenar los usuarios para realizar búsquedas eficientes: usar el ID del usuario como clave de una tabla hace que encontrar y eliminar usuarios sea mucho más sencillo que buscarlos en una lista. Tu administrador necesita:
    • :addUser(user): añade un objeto User a la colección
    • :removeUser(id): elimina un usuario mediante su ID
    • :findUser(id): devuelve el User con el ID coincidente, o nil si no se encuentra
    • :listUsers(): imprime la información de todos los usuarios, uno por línea
  • main.lua: ¡Reúne todo! Crea un UserManager, añade algunos usuarios basándote en las entradas que recibas, realiza operaciones y muestra los resultados.

Recibirás cinco entradas:

  1. ID del primer usuario (un número)
  2. Nombre del primer usuario
  3. ID del segundo usuario (un número)
  4. Nombre del segundo usuario
  5. ID del usuario que se debe buscar (un número)

En tu archivo principal:

  1. Crea un UserManager y añade ambos usuarios
  2. Llama a :listUsers() para imprimir todos los usuarios
  3. Elimina el primer usuario (usando el primer ID)
  4. Imprime "After removal:"
  5. Vuelve a llamar a :listUsers()
  6. Busca al usuario con el ID de la quinta entrada; si se encuentra, imprime su información; si no, 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: Bob

Si 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 que, en el segundo ejemplo, después de eliminar al usuario 201 (Charlie), buscar ese ID devuelve "User not found", ya que el usuario ya no está en el sistema.

Pruébalo tú mismo

-- main.lua: Reúne todo

local User = require('User')
local UserManager = require('UserManager')

-- Lee las 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: Crea una instancia de UserManager

-- TODO: Crea dos objetos User con los datos de entrada

-- TODO: Añade ambos usuarios al manager

-- TODO: Llama a listUsers() para imprimir todos los usuarios

-- TODO: Elimina el primer usuario (usando id1)

-- TODO: Print "After removal:"

-- TODO: Llama a listUsers() de nuevo

-- TODO: Busca el usuario con searchId
-- If found, print their info; if not found, print "User not found"

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de Lua online