Verifica finale di OOP
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 70 di 70.
Sfida
FacileMettiamo 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 unnamee uno_speedsecondo 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, stampaSpeed cannot be negativee 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 aself._fuele un metodo:getFuel()che restituisce il livello attuale di carburante.Car.lua: eredita da Vehicle e usa il mixin Refuelable. Il costruttore accetta unnamee inizializza_fuela 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 unname. 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:
- Nome dell'auto
- Nome della bicicletta
- Velocità da impostare per entrambi i veicoli (un numero)
- Quantità di carburante da aggiungere all'auto (un numero)
Nel file principale:
- Crea un'auto e una bicicletta con i nomi forniti
- Imposta la velocità di entrambi i veicoli usando il terzo input
- Fai rifornimento all'auto usando il quarto input
- Stampa la descrizione dell'auto
- 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 60Se 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 120Questa 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
1Il concetto di «self»
Tabelle con funzioni«self» esplicitoLa sintassi dei due puntiPunto o due puntiRiepilogo - Spostare il punto4Progetto: Banca digitale
Configurazione del progettoMetodo di deposito2Schema del prototipo di classe
Il concetto di prototipoCollegare con __indexIl costruttore :new()Inizializzare gli attributiIstanze indipendentiRiepilogo - Fabbrica di auto5Sovraccarico degli operatori nella OOP
Sommare oggettiSottrarre oggettiConcatenare oggettiConfrontare oggetti (<, >)Ripasso - Calcoli con il portafoglio8Incapsulamento
Convenzioni di denominazioneClosure per la privacyAccesso tramite closureTabelle di sola letturaLogica di convalidaRiepilogo - Cassaforte sicura11Modelli di progettazione (base)
Funzioni factoryTabella singletonPattern IteratorObserver (listener)Riepilogo - Factory per logger3Stato e comportamento degli oggetti
Variabili di istanzaMetodi getterMetodi setterProprietà calcolateFormattazione delle stringheControlli di uguaglianzaRiepilogo - Voto dello studente6Fondamenti dell'ereditarietà
Configurare l'ereditarietàEreditare i metodiEstendere il costruttoreAggiungere metodi alla classe figliaCondiviso vs specificoRiepilogo - Gerarchia delle forme9Composizione e mixin
Relazione Has-ADelegaMixin sempliciApplicare più mixinMixin vs ereditarietàRiepilogo - Assemblaggio di robot12Sfide finali
Ripasso - Sistema di inventarioRipasso - Gestore utentiRipasso - Tracciamento punteggiVerifica finale di OOPEsercitati da solo: Compilatore Lua online