Revisão - Gerenciador de Usuários
Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 68 de 70.
Desafio
FácilVamos criar 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 represente um único usuário no sistema. Cada usuário tem umide umname. Inclua um método:getInfo()que retorne uma string no formato"ID: {id}, Name: {name}".UserManager.lua: crie uma classe gerenciadora que lide com uma coleção de usuários. Pense em como armazenar os usuários para uma busca eficiente: usar o ID do usuário como chave de uma tabela torna a localização e a remoção de usuários muito mais simples do que procurar em uma lista. Seu gerenciador precisa de::addUser(user): adiciona um objeto User à coleção:removeUser(id): remove um usuário pelo 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 recebidas, execute 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 a ser pesquisado (um número)
No seu arquivo principal:
- Crie um UserManager e adicione os dois 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 o usuário com o quinto ID de entrada; se for 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 deverá 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 deverá ser:
ID: 201, Name: Charlie
ID: 202, Name: Diana
After removal:
ID: 202, Name: Diana
User not foundObserve que, no segundo exemplo, após remover o usuário 201 (Charlie), pesquisar por esse ID retorna "Usuário não encontrado", pois ele não está mais no sistema!
Experimente você mesmo
-- main.lua: Junte tudo
local User = require('User')
local UserManager = require('UserManager')
-- Leia as 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: Crie uma instância de UserManager
-- TODO: Crie dois objetos User com os dados de entrada
-- TODO: Adicione ambos os usuários ao manager
-- TODO: Chame listUsers() para imprimir todos os usuários
-- TODO: Remova o primeiro usuário (usando id1)
-- TODO: Print "After removal:"
-- TODO: Chame listUsers() novamente
-- TODO: Busque o usuário com searchId
-- If found, print their info; if not found, print "User not found"
Todas as lições de Programação Orientada a Objetos
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ânguloClasse CírculoMétodo PerímetroColeção de FormasÁrea TotalFiltrar Formas2Padrã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 POOPratique por conta própria: Compilador de Lua online