Revisão - Rastreador de Pontuação
Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 69 de 70.
Desafio
FácilVamos criar um sistema de acompanhamento de pontuações para uma tabela de classificação de jogos! Você criará duas classes que trabalham em conjunto: uma representando entradas de pontuação individuais e outra gerenciando a tabela de classificação com recursos de ordenação possibilitados pela sobrecarga de operadores.
Você organizará seu código em três arquivos:
ScoreEntry.lua: crie uma classe ScoreEntry que represente a pontuação de um único jogador. Cada entrada tem umplayerNamee umascore. Inclua um método:getInfo()que retorne uma string no formato"{playerName}: {score} points". O recurso principal aqui é implementar o método metamórfico__lt, mas lembre-se: para uma ordem decrescente (maiores pontuações primeiro), sua comparação deve retornartruequando a pontuação da primeira entrada for maior que a da segunda.Leaderboard.lua: crie uma classe Leaderboard que gerencie uma coleção de entradas de pontuação. Sua tabela de classificação precisa de::addEntry(entry): adiciona um ScoreEntry à lista interna:sort(): ordena as entradas da maior para a menor pontuação usandotable.sort:display(): exibe as informações de cada entrada, uma por linha
main.lua: reúna tudo! Crie um Leaderboard, adicione as entradas de pontuação com base nas entradas recebidas, ordene a tabela de classificação e exiba os resultados.
A parte elegante desse design é que table.sort usa automaticamente seu método metamórfico __lt para comparar objetos ScoreEntry. Ao definir como as entradas se comparam entre si, a ordenação integrada do Lua simplesmente funciona com seus objetos personalizados!
Você receberá seis entradas representando três jogadores:
- Nome do primeiro jogador
- Pontuação do primeiro jogador (um número)
- Nome do segundo jogador
- Pontuação do segundo jogador (um número)
- Nome do terceiro jogador
- Pontuação do terceiro jogador (um número)
Em seu arquivo principal, crie uma tabela de classificação, adicione as três entradas, chame :sort() e, em seguida, chame :display() para mostrar os resultados ordenados.
Por exemplo, se as entradas forem Alice, 1500, Bob, 2300, Charlie e 1800, a saída deverá ser:
Bob: 2300 points
Charlie: 1800 points
Alice: 1500 pointsSe as entradas forem Zara, 500, Max, 750, Luna e 600, a saída deverá ser:
Max: 750 points
Luna: 600 points
Zara: 500 pointsExperimente você mesmo
-- Arquivo principal: Reúna tudo
local ScoreEntry = require('ScoreEntry')
local Leaderboard = require('Leaderboard')
-- Leia as entradas para três jogadores
local name1 = io.read()
local score1 = tonumber(io.read())
local name2 = io.read()
local score2 = tonumber(io.read())
local name3 = io.read()
local score3 = tonumber(io.read())
-- TODO: Crie um novo Leaderboard
-- TODO: Crie objetos ScoreEntry para cada jogador
-- TODO: Adicione todas as três entradas ao leaderboard
-- TODO: Ordene o leaderboard
-- TODO: Exiba os resultados ordenados
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