Menu
Coddy logo textTech

Verifica finale di OOP

Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 70 di 70.

challenge icon

Sfida

Facile

Mettiamo insieme tutto ciò che hai imparato sulla programmazione orientata agli oggetti in Lua! Costruirai un sistema di veicoli che dimostra l'ereditarietà, l'incapsulamento tramite convenzioni di denominazione e i mixin per le funzionalità opzionali.

Organizzerai il codice in cinque file:

  • Vehicle.lua: la classe base per tutti i veicoli. Ogni veicolo ha un name e uno _speed secondo una convenzione per i campi privati (inizializzato a 0). Includi un getter :getName(), un getter :getSpeed() e un setter :setSpeed(value) che rifiuta i valori negativi (se il valore è negativo, stampa Speed cannot be negative e non modificarlo). Aggiungi un metodo :describe() che restituisce "{name} moving at {speed}".
  • Refuelable.lua: una tabella mixin che contiene comportamenti relativi al carburante. Includi un metodo :refuel(amount) che aggiunge carburante a self._fuel e un metodo :getFuel() che restituisce il livello attuale di carburante.
  • Car.lua: eredita da Vehicle e usa il mixin Refuelable. Il costruttore accetta un name e inizializza _fuel a 0. Sovrascrivi :describe() affinché restituisca "{name} moving at {speed}, fuel: {fuel}". Applica il mixin Refuelable per fornire alle auto la funzionalità relativa al carburante.
  • Bicycle.lua: eredita solo da Vehicle; non serve alcuna funzionalità relativa al carburante. Il costruttore accetta solo un name. Le biciclette usano il metodo :describe() ereditato senza modificarlo.
  • main.lua: metti insieme tutto! Crea un'auto e una bicicletta in base agli input, mostra le loro diverse funzionalità e illustra come condividono i comportamenti comuni dei veicoli pur avendo caratteristiche distintive.

Riceverai quattro input:

  1. Nome dell'auto
  2. Nome della bicicletta
  3. Velocità da impostare per entrambi i veicoli (un numero)
  4. Quantità di carburante da aggiungere all'auto (un numero)

Nel file principale:

  1. Crea un'auto e una bicicletta con i nomi forniti
  2. Imposta la velocità di entrambi i veicoli usando il terzo input
  3. Fai rifornimento all'auto usando il quarto input
  4. Stampa la descrizione dell'auto
  5. Stampa la descrizione della bicicletta

Ad esempio, se gli input sono Sedan, Mountain Bike, 60 e 45, l'output dovrebbe essere:

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

Se gli input sono Sports Car, Road Bike, 120 e 80, l'output dovrebbe essere:

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

Questa sfida mostra come l'ereditarietà fornisca comportamenti condivisi (entrambi i veicoli possono muoversi), i mixin aggiungano funzionalità opzionali (solo le auto hanno bisogno di carburante) e l'incapsulamento protegga l'integrità dei dati (convalida della velocità). Ogni tecnica svolge una funzione diversa nel tuo progetto!

Provalo tu

-- main.lua: Metti tutto insieme

local Car = require('Car')
local Bicycle = require('Bicycle')

-- Leggi gli input
local carName = io.read()
local bicycleName = io.read()
local speed = tonumber(io.read())
local fuelAmount = tonumber(io.read())

-- TODO: Crea un'auto con il nome indicato

-- TODO: Crea una bicicletta con il nome indicato

-- TODO: Imposta la velocità di entrambi i veicoli

-- TODO: Rifornisci l'auto con la quantità di carburante indicata

-- TODO: Stampa la descrizione dell'auto

-- TODO: Stampa la descrizione della bicicletta

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Lua online