Menu
Coddy logo textTech

Récapitulatif - Calculateur de formes

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy — leçon 33 sur 107.

challenge icon

Défi

Facile

Construisons un calculateur de formes qui rassemble tous les concepts d'interface de ce chapitre. Vous allez créer un système où différentes formes géométriques peuvent être traitées de manière uniforme via une interface partagée, démontrant ainsi la puissance du polymorphisme en Go.

Vous organiserez votre code sur trois fichiers :

  • shape.go : Définissez une interface Shape avec deux méthodes : Area() float64 et Perimeter() float64. Créez également une fonction appelée DescribeShape qui accepte n'importe quel Shape et renvoie une chaîne formatée affichant à la fois son aire et son périmètre.
  • shapes.go : Créez deux structs qui implémentent l'interface Shape :
    • Un Rectangle avec les champs Width et Height
    • Un Circle avec un champ Radius
    Chaque struct doit implémenter les méthodes Area() et Perimeter(), ainsi qu'une méthode String() (implémentant fmt.Stringer) qui renvoie une description lisible de la forme.
  • main.go : Lisez les données de forme à partir de l'entrée, créez les formes appropriées et utilisez votre fonction DescribeShape pour afficher les informations sur chacune d'elles. Imprimez également chaque forme directement pour démontrer l'interface Stringer.

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, utilisez 3.14159 comme valeur de pi. Le périmètre du cercle est 2 * pi * radius.

Vos méthodes String() doivent renvoyer :

  • Rectangle : Rectangle(Width x Height)
  • Cercle : Circle(Radius: R)

Votre fonction DescribeShape doit renvoyer :

Area: [area], Perimeter: [perimeter]

Formatez toutes les valeurs flottantes avec deux décimales en utilisant %.2f.

Par exemple, avec 4, 3 et 5, votre sortie devrait être :

Rectangle(4.00 x 3.00)
Area: 12.00, Perimeter: 14.00
Circle(Radius: 5.00)
Area: 78.54, Perimeter: 31.42

Imprimez chaque forme d'abord (en utilisant sa méthode String()), puis sa description issue de DescribeShape. Traitez 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