Menu
Coddy logo textTech

Récapitulatif - Calculateur de formes

Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy — leçon 49 sur 110.

challenge icon

Défi

Facile

Construisons un système de calcul de formes qui réunit des classes abstraites et des interfaces pour créer une boîte à outils géométrique flexible. Vous allez concevoir une hiérarchie de classes où différentes formes partagent un comportement commun grâce à l'abstraction, tandis que chaque forme fournit ses propres calculs uniques.

Vous organiserez votre code en trois fichiers :

  • shape.dart : Définissez votre classe de base abstraite et votre interface ici :
    • Une classe abstraite Shape avec une propriété String name et un constructeur. Incluez les méthodes abstraites double calculateArea() et double calculatePerimeter(). Ajoutez une méthode régulière describe() qui affiche '$name - Area: ${calculateArea()}, Perimeter: ${calculatePerimeter()}'
    • Une classe Drawable avec une méthode draw() qui affiche 'Drawing shape...'
  • shapes.dart : Importez shape.dart et créez vos classes de formes concrètes :
    • Une classe Rectangle qui étend Shape et implémente Drawable. Ajoutez les propriétés double width et double height. Calculez l'aire comme width * height et le périmètre comme 2 * (width + height). La méthode draw() doit afficher 'Drawing rectangle ${width}x$height'
    • Une classe Circle qui étend Shape et implémente Drawable. Ajoutez une propriété double radius. Utilisez 3.14159 pour pi. Calculez l'aire comme pi * radius * radius et le périmètre (circonférence) comme 2 * pi * radius. La méthode draw() doit afficher 'Drawing circle with radius $radius'
  • main.dart : Importez shapes.dart et faites une démonstration de votre calculateur de formes :
    • Créez un Rectangle nommé 'Rectangle' avec une largeur de 5.0 et une hauteur de 3.0
    • Créez un Circle nommé 'Circle' avec un rayon de 4.0
    • Pour chaque forme, appelez draw() puis describe()
    • Affichez une ligne vide entre les deux formes

Ce défi démontre comment les classes abstraites définissent une structure partagée (chaque forme a des calculs d'aire et de périmètre), tandis que les interfaces ajoutent des capacités supplémentaires (des formes qui peuvent être dessinées). Chaque classe concrète étend la classe abstraite pour son identité principale et implémente l'interface pour des fonctionnalités supplémentaires.

Sortie attendue :

Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0

Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272

Essayez vous-même

import 'shapes.dart';

void main() {
  // TODO: Créer un Rectangle nommé 'Rectangle' avec une largeur de 5.0 et une hauteur de 3.0
  
  // TODO: Créer un Circle nommé 'Circle' avec un rayon de 4.0
  
  // TODO: Pour le rectangle, appeler draw() puis describe()
  
  // TODO: Imprimer une ligne vide
  
  // TODO: Pour le cercle, appeler draw() puis describe()
}

Toutes les leçons de Programmation Orientée Objet