Menu
Coddy logo textTech

Verificação Final de POO

Parte da seção Programação Orientada a Objetos do Journey de Lua da Coddy. Lição 70 de 70.

challenge icon

Desafio

Fácil

Vamos reunir tudo o que você aprendeu sobre OOP em Lua! Você criará 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 um name e um _speed de convenção privada (inicializado como 0). Inclua um getter :getName(), um getter :getSpeed() e um setter :setSpeed(value) que rejeita valores negativos (se for 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 de mixin contendo comportamento relacionado a combustível. Inclua um método :refuel(amount) que adiciona a self._fuel, e um método :getFuel() que retorna o nível atual de combustível.
  • Car.lua: Herda de Vehicle e usa o mixin Refuelable. O construtor aceita um name e inicializa _fuel como 0. Substitua :describe() para retornar "{name} moving at {speed}, fuel: {fuel}". Aplique o mixin Refuelable para dar aos carros capacidades relacionadas a combustível.
  • Bicycle.lua: Herda apenas de Vehicle: nenhuma funcionalidade de combustível é necessária. O construtor aceita somente um name. As bicicletas usam o método :describe() herdado sem modificações.
  • main.lua: Reúna tudo! Crie um carro e uma bicicleta com base nas entradas, demonstre suas diferentes capacidades e mostre como eles compartilham comportamentos comuns de veículos, embora tenham características distintas.

Você receberá quatro entradas:

  1. Nome do carro
  2. Nome da bicicleta
  3. Velocidade a ser definida para ambos os veículos (um número)
  4. Quantidade de combustível a adicionar ao carro (um número)

No seu arquivo principal:

  1. Crie um carro e uma bicicleta com os nomes fornecidos
  2. Defina a velocidade de ambos os veículos usando a terceira entrada
  3. Abasteça o carro com a quarta entrada
  4. Imprima a descrição do carro
  5. Imprima a descrição da bicicleta

Por exemplo, se as entradas forem Sedan, Mountain Bike, 60 e 45, a saída deverá ser:

Sedan moving at 60, fuel: 45
Mountain Bike moving at 60

Se as entradas forem Sports Car, Road Bike, 120 e 80, a saída deverá ser:

Sports Car moving at 120, fuel: 80
Road Bike moving at 120

Este desafio demonstra como a herança fornece comportamento compartilhado (ambos os veículos podem se mover), os mixins adicionam capacidades opcionais (somente os carros precisam de combustível) e o encapsulamento protege a integridade dos dados (validação da velocidade). Cada técnica tem uma finalidade diferente no seu design!

Experimente você mesmo

-- main.lua: Reúna 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: Crie um carro com o nome fornecido

-- TODO: Crie uma bicicleta com o nome fornecido

-- TODO: Defina a velocidade para ambos os veículos

-- TODO: Abasteça o carro com a quantidade de combustível

-- TODO: Imprima a descrição do carro

-- TODO: Imprima a descrição da bicicleta

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Lua online