Classe Cerchio
Fa parte della sezione Programmazione orientata agli oggetti del percorso Lua di Coddy. Lezione 57 di 70.
Sfida
FacileContinuiamo a costruire il nostro Shape Manager aggiungendo una classe Circle accanto a Rectangle, che hai creato nella lezione precedente.
Lavorerai con quattro file per tenere organizzate le tue forme:
Shape.lua: la tua classe base Shape con:new(name)e:getName().Rectangle.lua: la tua classe Rectangle della sfida precedente con:getArea().Circle.lua: crea una classe Circle che eredita da Shape. Il costruttore deve accettare unradius, chiamare il costruttore del genitore con il nome"Circle"e memorizzare il raggio. Aggiungi un metodo:getArea()che calcola l'area del cerchio usando la formula πr². Usamath.piper il valore di π.main.lua: richiedi sia il modulo Rectangle sia quello Circle. Leggi tre valori dall'input: la larghezza di un rettangolo, l'altezza di un rettangolo e il raggio di un cerchio. Crea un'istanza di ciascuna forma e stampa quattro righe: il nome del rettangolo, l'area del rettangolo, il nome del cerchio e l'area del cerchio.
Ora entrambe le forme condividono la stessa interfaccia tramite l'ereditarietà: ciascuna ha un metodo :getName() da Shape e una propria implementazione di :getArea(). Questa interfaccia comune sarà utile nelle prossime lezioni.
Input: tre righe: larghezza (numero), altezza (numero) e raggio (numero).
Output: quattro righe: nome del rettangolo, area del rettangolo, nome del cerchio, area del cerchio.
Provalo tu
-- Importa il modulo Rectangle
local Rectangle = require('Rectangle')
-- Importa il modulo Circle
-- TODO: importa qui il modulo Circle
-- Leggi width e height dall'input
local width = tonumber(io.read())
local height = tonumber(io.read())
-- TODO: leggi il raggio dall'input
-- Crea una nuova istanza di Rectangle con le dimensioni indicate
local rect = Rectangle:new(width, height)
-- TODO: crea una nuova istanza di Circle con il raggio indicato
-- Stampa il nome e l'area del rettangolo
print(rect:getName())
print(rect:getArea())
-- TODO: stampa il nome e l'area del cerchio
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 deposito7Polimorfismo e sovrascrittura
Sovrascrivere i metodiChiamare i metodi della classe genitoreDuck TypingInterfaccia comuneVerificare il tipoRiepilogo - Ruoli dei dipendenti10Progetto: Gestore di forme
Configurazione del progettoClasse RettangoloClasse CerchioMetodo del perimetroRaccolta di formeArea totaleFiltrare le forme2Schema 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