Verificação Final de POO
Parte da seção Object Oriented Programming do Journey de Lua da Coddy — lição 70 de 70.
Desafio
FácilVamos reunir tudo o que você aprendeu sobre POO em Lua! Você construirá um sistema de veículos que demonstra herança, encapsulamento por meio de convenções de nomenclatura e mixins para capacidades opcionais.
Você organizará seu código em cinco arquivos:
Vehicle.lua: A classe base para todos os veículos. Cada veículo tem umnamee um_speedde convenção privada (inicializado em 0). Inclua um getter:getName(), um getter:getSpeed()e um setter:setSpeed(value)que rejeita valores negativos (se negativo, imprima"Speed cannot be negative"e não altere o valor). Adicione um método:describe()que retorna"{name} moving at {speed}".Refuelable.lua: Uma tabela mixin contendo comportamento relacionado a combustível. Inclua um método:refuel(amount)que adiciona aoself._fuel, e um método:getFuel()que retorna o nível de combustível atual.Car.lua: Herda de Vehicle e usa o mixin Refuelable. O construtor aceita umnamee inicializa_fuelcomo 0. Sobrescreva:describe()para retornar"{name} moving at {speed}, fuel: {fuel}". Aplique o mixin Refuelable para dar aos carros capacidades de combustível.Bicycle.lua: Herda apenas de Vehicle — nenhuma funcionalidade de combustível é necessária. O construtor aceita apenas umname. As bicicletas usam o método:describe()herdado sem modificação.main.lua: Reúna tudo! Crie um carro e uma bicicleta com base nas entradas, demonstre suas diferentes capacidades e mostre como eles compartilham o comportamento comum de veículo enquanto possuem características distintas.
Você receberá quatro entradas:
- Nome do carro
- Nome da bicicleta
- Velocidade a ser definida para ambos os veículos (um número)
- Quantidade de combustível a ser adicionada ao carro (um número)
No seu arquivo principal:
- Crie um carro e uma bicicleta com os nomes fornecidos
- Defina a velocidade para ambos os veículos usando a terceira entrada
- Abasteça o carro com a quarta entrada
- Imprima a descrição do carro
- Imprima a descrição da bicicleta
Por exemplo, se as entradas forem "Sedan", "Mountain Bike", "60" e "45", a saída deve ser:
Sedan moving at 60, fuel: 45
Mountain Bike moving at 60Se as entradas forem "Sports Car", "Road Bike", "120" e "80", a saída deve ser:
Sports Car moving at 120, fuel: 80
Road Bike moving at 120Este desafio demonstra como a herança fornece comportamento compartilhado (ambos os veículos podem se mover), mixins adicionam capacidades opcionais (apenas carros precisam de combustível) e o encapsulamento protege a integridade dos dados (validação de velocidade). Cada técnica serve a um propósito diferente em seu design!
Experimente você mesmo
-- main.lua: Juntando tudo
local Car = require('Car')
local Bicycle = require('Bicycle')
-- Ler entradas
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())
-- TODO: Criar um carro com o nome fornecido
-- TODO: Criar uma bicicleta com o nome fornecido
-- TODO: Definir a velocidade para ambos os veículos
-- TODO: Abastecer o carro com a quantidade de combustível
-- TODO: Imprimir a descrição do carro
-- TODO: Imprimir a descrição da bicicleta
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