Riepilogo - Calcolatore di forme
Fa parte della sezione Programmazione orientata agli oggetti del percorso GDScript di Coddy. Lezione 25 di 65.
Sfida
MedioCrea un calcolatore di forme che gestisca forme reali, un oggetto simile a una forma ma esterno alla gerarchia e oggetti che non può misurare.
Shapeè astratta, con i metodi astrattiarea() -> float,perimeter() -> floateshape_name() -> String. Il suo metodo normaledescribe()restituisceNAME: area A, perimeter Pcon due cifre decimali.Circle(radius),Rectangle(width,height) eTriangle(latia,b,c) estendonoShape. I loro nomi sonoCircle,RectangleeTriangle. L’area di un cerchio èPI * r * re il suo perimetro è2 * PI * r. Per il triangolo, usa la formula di Erone: cons = (a + b + c) / 2, l’area èsqrt(s * (s - a) * (s - b) * (s - c)).CustomShapeNON estendeShape. Ha uncustom_namee unasize;area()èsize * size,perimeter()è4 * sizeedescribe()usa lo stesso formato diShape, con il suo nome personalizzato.ShapeCalculatorha due funzioni statiche.process(thing)restituisce[Shape]più il risultato didescribe()per unShape,[Duck]più il risultato didescribe()per qualsiasi altro oggetto che abbia un metododescribe()eCannot measure this objectin caso contrario.total_area(things)somma il risultato diarea()per ogni oggetto che abbia un metodoarea().
Il codice fornito legge quanti oggetti seguono, poi uno per riga: circle R, rectangle W H, triangle A B C, custom NAME SIZE oppure unknown (un semplice oggetto RefCounted). Stampa il risultato di process() per ciascuno e l’area totale. Per circle 5, custom Hexa 3 e unknown stampa:
[Shape] Circle: area 78.54, perimeter 31.42
[Duck] Hexa: area 9.00, perimeter 12.00
Cannot measure this object
Total area: 87.54Il tuo codice va in shape.gd, circle.gd, rectangle.gd, triangle.gd, custom_shape.gd e shape_calculator.gd. main.gd contiene il codice fornito per l’input/output e non può essere modificato.
Provalo tu
extends Node
func _ready():
# Codice di input/output fornito: lascialo così com'è
var count := int(OS.read_string_from_stdin())
var things := []
for i in count:
var p := OS.read_string_from_stdin().split(" ")
if p[0] == "circle":
things.append(Circle.new(float(p[1])))
elif p[0] == "rectangle":
things.append(Rectangle.new(float(p[1]), float(p[2])))
elif p[0] == "triangle":
things.append(Triangle.new(float(p[1]), float(p[2]), float(p[3])))
elif p[0] == "custom":
things.append(CustomShape.new(p[1], float(p[2])))
else:
things.append(RefCounted.new())
for thing in things:
print(ShapeCalculator.process(thing))
print("Total area: %.2f" % ShapeCalculator.total_area(things))
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggetti a confrontoLa parola chiave selfMetodiProprietàCostruttore (_init)Riepilogo - Calcolatrice semplice4Polimorfismo
Ripasso dell'override dei metodiDuck typingClassi e metodi astrattiProgettazione delle interfacceRiepilogo - Calcolatore di forme7Segnali
Che cos'è un segnale?Dichiarare ed emettereCollegarsi ai segnaliSegnali con argomentiRipasso - Sistema della salute10Pattern di progettazione, parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern Composite2Proprietà delle classi
Variabili di istanza e staticheFunzioni staticheSetter delle proprietàGetter delle proprietàPrivato per convenzioneRiepilogo - Gestore di conti bancari5Incapsulamento
Membri pubblici e privatiValidazione con i setterNascondimento delle informazioniProprietà di sola letturaRiepilogo - Sistema di gestione dei dati degli studenti8Concetti avanzati di OOP
Composizione vs ereditarietàClassi interneNodi come componentiRefCounted vs NodeEnum nelle classi11Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Ereditarietà
Ereditarietà di baseLa parola chiave superOverride dei metodiCatene di ereditarietàControlli di tipo con isRipasso - Gerarchia dei dipendenti6Metodi speciali
Introduzione ai metodi virtualiIl metodo _to_stringIteratori personalizzatiRiepilogo - Lista personalizzata9Modelli di progettazione, parte 1
Introduzione ai modelli di progettazionePattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore GDScript online