C# Academy · Leçon

Implémentation et tests

Implémentez Rectangle, Circle et Triangle ; ajoutez des vérifications de base des entrées ; écrivez de petits tests ponctuels sans framework.

Leçon 2 sur 38 étapes

Implémentation et tests est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 3 leçons au total.

Plan d’implémentation

Objectif : implémenter les formes et les vérifier.

  • Implémenter Rectangle, Circle, Triangle
  • Bloquer les entrées non valides
  • Ajouter un petit utilitaire Assert
  • Exécuter des vérifications rapides dans Main

Rectangle et Circle

Ajoutez des contrôles simples dans les constructeurs afin que les dimensions soient positives. Gardez les formules courtes et claires.

using System;

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;

  public Rectangle(double w, double h)
  {
    if (w <= 0 || h <= 0) throw new ArgumentOutOfRangeException("w/h must be > 0");
    _w = w; _h = h;
  }

  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public sealed class Circle : IShape
{
  private readonly double _r;

  public Circle(double r)
  {
    if (r <= 0) throw new ArgumentOutOfRangeException("r must be > 0");
    _r = r;
  }

  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public class Program
{
  public static void Main(string[] args)
  {
    IShape a = new Rectangle(3, 4);
    IShape b = new Circle(2);
    Console.WriteLine("Rect A=" + a.Area() + " P=" + a.Perimeter());
    Console.WriteLine("Circ A=" + b.Area() + " P=" + b.Perimeter());
  }
}

Triangle avec contrôles

Validez les côtés en vérifiant l’inégalité triangulaire. Utilisez une formule connue et gardez les nombres lisibles.

using System;

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Triangle : IShape
{
  private readonly double _a, _b, _c;

  public Triangle(double a, double b, double c)
  {
    if (a <= 0 || b <= 0 || c <= 0) throw new ArgumentOutOfRangeException("sides must be > 0");
    // triangle inequality: each side < sum of other two
    if (a >= b + c || b >= a + c || c >= a + b) throw new ArgumentException("invalid triangle");
    _a = a; _b = b; _c = c;
  }

  public double Perimeter() { return _a + _b + _c; }

  // Herons formula for area
  public double Area()
  {
    double s = (_a + _b + _c) / 2.0;
		double value = s * (s - _a) * (s - _b) * (s - _c);
		return Math.Sqrt(value);
		}
}

public class Program
{
  public static void Main(string[] args)
  {
    IShape t = new Triangle(3, 4, 5);
		Console.WriteLine("Tri A=" + t.Area() + " P=" + t.Perimeter());
		}
}

Utilitaire Assert ponctuel

Créez une petite classe Assert. Comparez la valeur attendue à la valeur obtenue avec une tolérance pour les nombres de type double.

using System;

		public static class Assert
			{
			// Approx compare for doubles (tolerance)
										  public static void AreClose(double expected, double actual, double eps, string msg)
  {
		if (Math.Abs(expected - actual) > eps)
			{
			throw new Exception("Assert failed: " + msg + " expected=" + expected + " actual=" + actual);
    }
    Console.WriteLine("OK: " + msg);
  }
}

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Rectangle : IShape
{
  private readonly double _w, _h;
  public Rectangle(double w, double h) { if (w <= 0 || h <= 0) throw new ArgumentOutOfRangeException(); _w = w; _h = h; }
  public double Area() { return _w * _h; }
  public double Perimeter() { return 2 * (_w + _h); }
}

public class Program
{
  public static void Main(string[] args)
  {
    Rectangle r = new Rectangle(3, 4);
    Assert.AreClose(12.0, r.Area(), 0.0001, "rectangle area");
    Assert.AreClose(14.0, r.Perimeter(), 0.0001, "rectangle perimeter");
  }
}

Exécuter des tests rapides

Regroupez quelques tests dans Main. Gardez les résultats attendus simples et lisibles.

using System;

public static class Assert
{
  public static void AreClose(double expected, double actual, double eps, string msg)
  {
    if (Math.Abs(expected - actual) > eps)
      throw new Exception("Assert failed: " + msg + " expected=" + expected + " actual=" + actual);
    Console.WriteLine("OK: " + msg);
  }
}

public interface IShape
{
  double Area();
  double Perimeter();
}

public sealed class Circle : IShape
{
  private readonly double _r;
  public Circle(double r) { if (r <= 0) throw new ArgumentOutOfRangeException(); _r = r; }
  public double Area() { return 3.14159 * _r * _r; }
  public double Perimeter() { return 2 * 3.14159 * _r; }
}

public sealed class Triangle : IShape
{
  private readonly double _a, _b, _c;
  public Triangle(double a, double b, double c)
  {
    if (a <= 0 || b <= 0 || c <= 0) throw new ArgumentOutOfRangeException();
    if (a >= b + c || b >= a + c || c >= a + b) throw new ArgumentException("invalid triangle");
    _a = a; _b = b; _c = c;
  }
  public double Perimeter() { return _a + _b + _c; }
  public double Area()
  {
    double s = (_a + _b + _c) / 2.0;
    return Math.Sqrt(s * (s - _a) * (s - _b) * (s - _c));
  }
}

public class Program
{
  public static void Main(string[] args)
  {
    double eps = 0.001;

    Circle c = new Circle(2);
    Assert.AreClose(12.56636, c.Area(), eps, "circle area r=2");
    Assert.AreClose(12.56636, c.Perimeter(), eps, "circle peri r=2");

    Triangle t = new Triangle(3, 4, 5);
    Assert.AreClose(12.0, t.Perimeter(), eps, "triangle perimeter 3-4-5");
    Assert.AreClose(6.0, t.Area(), eps, "triangle area 3-4-5");
  }
}

Conseils d’implémentation

Liste de contrôle :

  • Validez les entrées dans les constructeurs.
  • Gardez les formules courtes et utilisez des constantes locales pour pi.
  • Créez un petit Assert pour les tests ponctuels.
  • Testez à la fois Area et Perimeter pour chaque forme.

Idée de test ponctuel

Vérification rapide : quelle est une manière simple de tester une petite bibliothèque sans infrastructure de test ?

Récapitulatif

Récapitulatif : implémentez les formes avec des contrôles clairs, puis vérifiez-les avec un utilitaire Assert minimal dans Main. Gardez les tests courts et déterministes.

Gratuit pour commencer

Apprends C# avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
93
Leçons
346

Questions Fréquemment Posées

La leçon « Implémentation et tests » est-elle gratuite ?

Oui — le texte complet de « Implémentation et tests » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Implémentation et tests » ?

Implémentez Rectangle, Circle et Triangle ; ajoutez des vérifications de base des entrées ; écrivez de petits tests ponctuels sans framework. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 3.

Combien de temps prend la leçon « Implémentation et tests » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Conception (interfaces et héritage)
  2. Implémentation et tests
  3. Comportements polymorphes
← Retour à C# Academy