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.
Desafío
FácilConstruyamos 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 unidy unname. 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, onilsi 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:
- ID del primer usuario (un número)
- Nombre del primer usuario
- ID del segundo usuario (un número)
- Nombre del segundo usuario
- ID del usuario que se debe 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 el primer usuario (usando el primer ID)
- Imprime
"After removal:" - Vuelve a llamar a
:listUsers() - 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: 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 foundObserva 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
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 OOPPractica por tu cuenta: Compilador de Lua online