Revisão - Gerenciador de Usuários
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 68 de 70.
Desafio
FácilVamos construir um sistema de gerenciamento de usuários—uma aplicação prática que você encontraria em muitos programas do mundo real! Você criará duas classes que trabalham juntas: uma representando usuários individuais e outra que gerencia uma coleção deles de forma eficiente.
Você organizará seu código em três arquivos:
User.lua: Crie uma classe User que representa um único usuário no sistema. Cada usuário possui umide umname. Inclua um método:getInfo()que retorna uma string no formato"ID: {id}, Name: {name}".UserManager.lua: Construa uma classe gerenciadora que lida com uma coleção de usuários. Pense em como armazenar usuários para uma busca eficiente—usar o ID do usuário como uma chave de tabela torna a localização e a remoção de usuários muito mais simples do que pesquisar em uma lista. Seu gerenciador precisa de::addUser(user)— adiciona um objeto User à coleção:removeUser(id)— remove um usuário pelo seu ID:findUser(id)— retorna o User com o ID correspondente, ounilse não for encontrado:listUsers()— imprime as informações de todos os usuários, uma por linha
main.lua: Reúna tudo! Crie um UserManager, adicione alguns usuários com base nas entradas que você receber, realize operações e exiba os resultados.
Você receberá cinco entradas:
- ID do primeiro usuário (um número)
- Nome do primeiro usuário
- ID do segundo usuário (um número)
- Nome do segundo usuário
- ID de um usuário para pesquisar (um número)
No seu arquivo principal:
- Crie um UserManager e adicione ambos os usuários
- Chame
:listUsers()para imprimir todos os usuários - Remova o primeiro usuário (usando o primeiro ID)
- Imprima
"After removal:" - Chame
:listUsers()novamente - Pesquise pelo usuário com o ID da quinta entrada—se encontrado, imprima suas informações; se não for encontrado, imprima
"User not found"
Por exemplo, se as entradas forem 101, Alice, 102, Bob e 102, a saída deve ser:
ID: 101, Name: Alice
ID: 102, Name: Bob
After removal:
ID: 102, Name: Bob
ID: 102, Name: BobSe as entradas forem 201, Charlie, 202, Diana e 201, a saída deve ser:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundObserve no segundo exemplo que, após remover o usuário 201 (Charlie), a busca por esse ID retorna "User not found", pois ele não está mais no sistema!
Experimente você mesmo
-- main.lua: Reúne tudo
local User = require('User')
local UserManager = require('UserManager')
-- Ler 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: Criar uma instância de UserManager
-- TODO: Criar dois objetos User com os dados de entrada
-- TODO: Adicionar ambos os usuários ao gerenciador
-- TODO: Chamar listUsers() para imprimir todos os usuários
-- TODO: Remover o primeiro usuário (usando id1)
-- TODO: Imprimir "After removal:"
-- TODO: Chamar listUsers() novamente
-- TODO: Procurar pelo usuário com searchId
-- Se encontrado, imprimir suas informações; se não encontrado, imprimir "User not found"
Todas as lições de Object Oriented Programming
1O Conceito 'Self'
Tabelas com Funções'self' ExplícitoA Sintaxe de Dois-pontosPonto vs Dois-pontosRecapitulação - Movendo o Ponto4Projeto: Banco Digital
Configuração do ProjetoMétodo de Depósito7Polimorfismo e Sobrescrita
Sobrescrita de MétodosChamando Métodos da Classe PaiDuck TypingInterface ComumVerificando o TipoRecapitulação - Papéis de Funcionários10Projeto: Gerenciador de Formas
Configuração do ProjetoClasse Retângulo2Padrão de Protótipo de Classe
O Conceito de ProtótipoVinculando com __indexO Construtor :new()Inicializando AtributosInstâncias IndependentesRecapitulação - Fábrica de Carros5Sobrecarga de Operadores em POO
Somando ObjetosSubtraindo ObjetosConcatenando ObjetosComparando Objetos (<, >)Recapitulação - Matemática de Carteira8Encapsulamento
Convenções de NomenclaturaClosures para PrivacidadeAcesso via ClosuresTabelas Somente LeituraLógica de ValidaçãoRecapitulação - Cofre Seguro11Padrões de Projeto (Lite)
Funções FactoryTabela SingletonPadrão IteratorObserver (Listener)Recapitulação - Logger Factory3Estado e Comportamento do Objeto
Variáveis de InstânciaMétodos GetterMétodos SetterPropriedades CalculadasFormatação de StringsVerificações de IgualdadeRecapitulação - Nota do Aluno6Fundamentos de Herança
Configurando a HerançaHerdando MétodosEstendendo o ConstrutorAdicionando Métodos FilhosCompartilhado vs ÚnicoRecapitulação - Hierarquia de Formas9Composição e Mixins
Relacionamento Tem-UmDelegaçãoMixins SimplesAplicando Múltiplos MixinsMixins vs HerançaRecapitulação - Montagem de Robô12Desafios Finais
Revisão - Sistema de InventárioRevisão - Gerenciador de UsuáriosRevisão - Rastreador de PontuaçãoVerificação Final de POO