Récapitulatif - Calculateur de Formes
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 30 sur 70.
Défi
FacileConstruisons un calculateur de formes qui rassemble tout ce que vous avez appris sur les interfaces et le polymorphisme. Vous allez créer un système dans lequel différentes formes peuvent être traitées uniformément grâce à une interface commune, ce qui démontre la puissance du polymorphisme à l’exécution.
Vous allez organiser votre code dans quatre fichiers :
IShape.cs: définissez une interface appeléeIShapedans l’espace de nomsShapes. Chaque forme doit pouvoir calculer son aire et se décrire. Déclarez deux méthodes :CalculateArea()qui renvoie undouble, etGetDescription()qui renvoie unestring.Circle.cs: créez une classeCircledans l’espace de nomsShapesqui implémenteIShape. Un cercle possède une propriétéRadius(de type double), définie par son constructeur. La formule de l’aire estMath.PI * Radius * Radius. La description doit renvoyer"Circle with radius {Radius}".Rectangle.cs: créez une classeRectangledans l’espace de nomsShapesqui implémenteIShape. Un rectangle possède les propriétésWidthetHeight(toutes deux de type double), définies par son constructeur. L’aire est simplement la largeur multipliée par la hauteur. La description doit renvoyer"Rectangle {Width}x{Height}".Program.cs: dans votre fichier principal, créez un cercle et un rectangle à partir des valeurs saisies, puis stockez-les dans un tableau de référencesIShape. Parcourez le tableau et, pour chaque forme, affichez sa description suivie de son aire arrondie à deux décimales. Cela démontre comment traiter des formes complètement différentes grâce à la même interface !
Vous recevrez trois entrées :
- Rayon du cercle (double)
- Largeur du rectangle (double)
- Hauteur du rectangle (double)
Affichez la sortie dans ce format pour chaque forme :
{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}Par exemple, si les entrées sont 5, 4 et 6, la sortie doit être :
Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00Remarquez que votre boucle n’a pas besoin de savoir si elle traite un cercle ou un rectangle : elle appelle simplement les méthodes de l’interface et laisse le polymorphisme s’occuper du reste. Voilà toute l’élégance de la programmation orientée vers les interfaces !
Essayez vous-même
using System;
using Shapes;
class Program
{
public static void Main(string[] args)
{
// Lire les valeurs d'entrée
double circleRadius = Convert.ToDouble(Console.ReadLine());
double rectWidth = Convert.ToDouble(Console.ReadLine());
double rectHeight = Convert.ToDouble(Console.ReadLine());
// TODO: Créer un objet Circle avec le rayon donné
// TODO: Créer un objet Rectangle avec la largeur et la hauteur données
// TODO: Créer un tableau de IShape contenant les deux formes
// TODO: Parcourir le tableau et pour chaque forme :
// - Afficher la description en utilisant GetDescription()
// - Afficher "Area: " suivi de CalculateArea() arrondi à 2 décimales
}
}
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et UtilisateurLogique du système d'empruntLINQ pour la rechercheInterface Console / Interface d'administrationTests unitaires (NUnit/xUnit)Entraînez-vous par vous-même : Compilateur C# en ligne