Récapitulatif - Calculateur de formes
Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy. Leçon 33 sur 107.
Défi
FacileConstruisons un calculateur de formes qui réunit tous les concepts d’interfaces de ce chapitre. Tu vas créer un système dans lequel différentes formes géométriques peuvent être traitées uniformément grâce à une interface commune, illustrant la puissance du polymorphisme dans Go.
Tu organiseras ton code dans trois fichiers :
shape.go: définis une interfaceShapeavec deux méthodes :Area() float64etPerimeter() float64. Crée également une fonction appeléeDescribeShapequi accepte n’importe quelShapeet renvoie une chaîne formatée affichant à la fois son aire et son périmètre.shapes.go: crée deux structures qui implémentent l’interfaceShape:- un
Rectangleavec les champsWidthetHeight - un
Circleavec un champRadius
Area()etPerimeter(), ainsi qu’une méthodeString()(implémentantfmt.Stringer) qui renvoie une description lisible de la forme.- un
main.go: lis les données des formes en entrée, crée les formes appropriées et utilise ta fonctionDescribeShapepour afficher les informations sur chacune d’elles. Affiche également chaque forme directement afin de démontrer l’interfaceStringer.
Les entrées suivantes seront fournies :
- Ligne 1 : largeur du rectangle (float)
- Ligne 2 : hauteur du rectangle (float)
- Ligne 3 : rayon du cercle (float)
Pour les calculs, utilise 3.14159 comme valeur de pi. Le périmètre du cercle est 2 * pi * radius.
Tes méthodes String() doivent renvoyer :
- Rectangle :
Rectangle(Width x Height) - Circle :
Circle(Radius: R)
Ta fonction DescribeShape doit renvoyer :
Area: [area], Perimeter: [perimeter]Formate toutes les valeurs flottantes avec deux décimales en utilisant %.2f.
Par exemple, avec 4, 3 et 5, ta sortie doit être :
Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42Affiche d’abord chaque forme (en utilisant sa méthode String()), puis sa description renvoyée par DescribeShape. Traite d’abord le rectangle, puis le cercle.
Essayez vous-même
package main
import (
"fmt"
)
func main() {
// Lire les valeurs d'entrée
var width, height, radius float64
fmt.Scanln(&width)
fmt.Scanln(&height)
fmt.Scanln(&radius)
// TODO: Créer un Rectangle avec la largeur et la hauteur données
// TODO: Créer un Cercle avec le rayon donné
// TODO: Afficher le rectangle (utilise la méthode String())
// TODO: Afficher la description du rectangle en utilisant DescribeShape()
// TODO: Afficher le cercle (utilise la méthode String())
// TODO: Afficher la description du cercle en utilisant DescribeShape()
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO en Go
Fichiers externesEspace de travail et modules GoPackages et importsNoms exportés et non exportésIntroduction à la POO en GoStructs comme classesDéfinir des méthodes sur des structsRécepteurs pointeurs ou par valeurInitialisation des structsFonctions constructeursRécapitulatif - Calculatrice simple4Interfaces
Introduction aux interfacesImplémentation impliciteL’interface comme contratInterface vide (any)Assertion de typeCommutation de typeComposition d’interfacesInterfaces Stringer et ErrorRécapitulatif - Calculateur de formes7Encapsulation
Champs exportés vs non exportésEncapsulation au niveau du packageMéthodes Getter et SetterDissimulation de l’information en GoRécapitulatif – Fiches d’étudiants10Génériques (Go 1.18+)
Introduction aux génériquesParamètres de typeContraintes de typeStructures génériquesSolution de contournement pour les méthodes génériquesRécapitulatif - Collection générique2Plongée approfondie dans les types et les structs
Types de base et compositesDéfinitions de types personnalisésTags de structStructs anonymesStructs imbriquésValeurs zéro et valeurs par défautRécapitulatif - Carnet de contacts5La composition plutôt que l’héritage
Pourquoi Go n’a pas d’héritageBases de l’inclusion de structsPromotion des méthodesInclure plusieurs structsInclusion ou agrégationMasquage des méthodes inclusesRécapitulatif : hiérarchie des employés8Gestion des erreurs et POO
L’interface errorTypes d’erreurs personnalisésEnrobage des erreurs (fmt.Errorf)Erreurs sentinelleserrors.Is() et errors.As()Panic, Defer et RecoverRécapitulatif - Analyseur de fichiers11Bibliothèque standard et POO
io.Reader et io.Writersort.InterfaceInterface fmt.Stringerencoding/json avec des structsInterface http.HandlerRécapitulatif - Modèles d’API REST14Modèles de conception – Partie 2
Modèle CommandeModèle AdaptateurModèle DécorateurModèle Méthode modèleModèle ÉtatModèle CompositeMiddleware comme décorateur3Pointeurs et mémoire
Notions de base des pointeurs en GoPointeurs vers des structuresPassage par valeur ou par référenceLa fonction new()Garbage collection en GoRécapitulatif - Constructeur de listes chaînées6Polymorphisme en Go
Polymorphisme via les interfacesDuck typing en GoRègles de satisfaction des interfacesCollections polymorphesInjection de dépendancesRécapitulatif – Processeur de paiements9Concurrence et POO
Bases des GoroutinesCanaux et communicationCanaux tamponnés ou non tamponnésInstruction selectsync.Mutex et sync.RWMutexsync.WaitGroupConception de structures thread-safeRécapitulatif - Pool de workersEntraînez-vous par vous-même : Compilateur Go en ligne