Récapitulatif – Calculateur de formes
Fait partie de la section Programmation orientée objet du Journey GDScript de Coddy. Leçon 25 sur 65.
Défi
MoyenCréez un calculateur de formes qui gère des formes réelles, un objet semblable à une forme provenant de l’extérieur de la hiérarchie et des objets qu’il ne peut pas mesurer.
Shapeest abstraite et possède les méthodes abstraitesarea() -> float,perimeter() -> floatetshape_name() -> String. Sa méthode normaledescribe()renvoieNAME: area A, perimeter Pavec deux décimales.Circle(radius),Rectangle(width,height) etTriangle(côtésa,b,c) étendentShape. Leurs noms sontCircle,RectangleetTriangle. L’aire d’un cercle estPI * r * ret son périmètre2 * PI * r. Pour le triangle, utilisez la formule de Héron : avecs = (a + b + c) / 2, l’aire estsqrt(s * (s - a) * (s - b) * (s - c)).CustomShapen’étend PASShape. Il possède uncustom_nameet unesize;area()vautsize * size,perimeter()vaut4 * size, etdescribe()utilise le même format queShape, avec son nom personnalisé.ShapeCalculatorpossède deux fonctions statiques.process(thing)renvoie[Shape]suivi dedescribe()pour unShape,[Duck]suivi dedescribe()pour tout autre objet qui possède une méthodedescribe(), etCannot measure this objectdans les autres cas.total_area(things)additionne les résultats dearea()de chaque objet qui possède une méthodearea().
Le code fourni lit le nombre d’objets à traiter, puis un objet par ligne : circle R, rectangle W H, triangle A B C, custom NAME SIZE ou unknown (un simple objet RefCounted). Il affiche le résultat de process() pour chacun, ainsi que l’aire totale. Pour circle 5, custom Hexa 3 et unknown, il affiche :
[Shape] Circle: area 78.54, perimeter 31.42
[Duck] Hexa: area 9.00, perimeter 12.00
Cannot measure this object
Total area: 87.54Votre code doit se trouver dans shape.gd, circle.gd, rectangle.gd, triangle.gd, custom_shape.gd et shape_calculator.gd. main.gd contient le code fourni pour les entrées/sorties et ne peut pas être modifié.
Essayez vous-même
extends Node
func _ready():
# Code d’entrée/sortie fourni : conservez-le tel quel
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))
Toutes les leçons de Programmation orientée objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé selfMéthodesPropriétésConstructeur (_init)Récapitulatif - Calculatrice simple4Polymorphisme
Retour sur la redéfinition des méthodesTypage canardClasses et méthodes abstraitesConception d’interfacesRécapitulatif – Calculateur de formes7Signaux
Qu’est-ce qu’un signal ?Déclarer et émettreSe connecter aux signauxSignaux avec argumentsRécapitulatif - système de santé10Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron Composite2Propriétés de classe
Variables d’instance et variables statiquesFonctions statiquesSetters de propriétésGetters de propriétésPrivé par conventionRécapitulatif - Gestionnaire de comptes bancaires5Encapsulation
Membres publics et privésValidation avec les méthodes setterMasquage de l’informationPropriétés en lecture seuleRécapitulatif - Système de dossiers étudiants8Concepts avancés de la POO
Composition ou héritageClasses internesLes nœuds comme composantsRefCounted ou NodeEnums dans les classes3Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodesChaînes d’héritageVérifier les types avec isRécapitulatif – Hiérarchie des employés6Méthodes spéciales
Introduction aux méthodes virtuellesLa méthode _to_stringItérateurs personnalisésRécapitulatif – Liste personnalisée9Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur GDScript en ligne