Riepilogo - Gerarchia delle forme
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 36 di 70.
Sfida
FacileCostruiamo da zero una gerarchia completa di forme! Creerai una classe genitore Shape da cui ereditano tutte le forme, poi creerai le classi figlie Circle e Square, ciascuna con proprietà uniche e funzionalità condivise.
Organizzerai il codice in quattro file:
Shape.lua: la classe base da cui erediteranno tutte le forme. Dovrebbe avere un costruttore:new(color)che memorizza il colore della forma e un metodo:getColor()che lo restituisce. Grazie a questa proprietà condivisa, ogni forma, che sia un cerchio o un quadrato, avrà un colore.Circle.lua: una classe figlia che eredita da Shape. Il suo costruttore:new(color, radius)dovrebbe chiamare il costruttore genitore per il colore, poi aggiungere il raggio come attributo univoco. Includi un metodo:describe()che stampa i dettagli del cerchio.Square.lua: un'altra classe figlia che eredita da Shape. Anche il suo costruttore:new(color, side)dovrebbe chiamare il costruttore genitore, poi memorizzare la lunghezza del lato. Includi anche un metodo:describe()per i quadrati.main.lua: metti insieme il tutto creando istanze di entrambe le forme e dimostrando che ereditano correttamente da Shape, mantenendo al contempo le loro proprietà uniche.
Riceverai due input:
- Dati del cerchio: colore e raggio separati da una virgola (ad es.,
blue,5) - Dati del quadrato: colore e lunghezza del lato separati da una virgola (ad es.,
red,4)
Nel tuo file principale, crea un Circle e un Square con i valori specificati. Poi stampa quanto segue su righe separate:
- Chiama
:describe()sul cerchio - Chiama
:describe()sul quadrato - Stampa il colore del cerchio usando
:getColor() - Stampa il colore del quadrato usando
:getColor()
Il metodo :describe() di Circle dovrebbe stampare:
Circle with radius {radius}Il metodo :describe() di Square dovrebbe stampare:
Square with side {side}Ad esempio, se gli input sono blue,5 e red,4, l'output dovrebbe essere:
Circle with radius 5
Square with side 4
blue
redQuesto dimostra il modello completo di ereditarietà: entrambe le forme ereditano :getColor() da Shape (non lo definiscono mai direttamente), mentre ciascuna ha il proprio attributo univoco e il proprio metodo :describe()!
Provalo tu
-- main.lua: Metti tutto insieme
local Circle = require('Circle')
local Square = require('Square')
-- Leggi l'input per il cerchio (color,radius)
local circleInput = io.read()
local circleColor, circleRadius = circleInput:match("([^,]+),([^,]+)")
circleRadius = tonumber(circleRadius)
-- Leggi l'input per il quadrato (color,side)
local squareInput = io.read()
local squareColor, squareSide = squareInput:match("([^,]+),([^,]+)")
squareSide = tonumber(squareSide)
-- TODO: Crea un'istanza di Circle con il colore e il raggio indicati
-- TODO: Crea un'istanza di Square con il colore e il lato indicati
-- TODO: Chiama :describe() sul cerchio
-- TODO: Chiama :describe() sul quadrato
-- TODO: Stampa il colore del cerchio usando :getColor()
-- TODO: Stampa il colore del quadrato usando :getColor()
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 formeEsercitati da solo: Compilatore Lua online