0Pricing
C# Academy · درس

التنفيذ والاختبارات

نفّذ Rectangle وCircle وTriangle، وأضف فحوصات أساسية للمدخلات، واكتب اختبارات صغيرة مخصّصة من دون إطار عمل.

التنفيذ والاختبارات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 3 دروس في المجموع.

خطة التنفيذ

الهدف: تنفيذ الأشكال والتحقق منها.

  • نفّذوا Rectangle وCircle وTriangle
  • تحققوا من المدخلات غير الصالحة
  • أضيفوا مساعد Assert صغيرًا
  • شغّلوا فحوصًا سريعة في Main

Rectangle وCircle

أضيفوا عمليات تحقق بسيطة في البُناة بحيث تكون الأبعاد موجبة. حافظوا على صِغر الصيغ ووضوحها.

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 مع عمليات تحقق

تحققوا من صحة الأضلاع (متباينة المثلث). استخدموا صيغة معروفة، وحافظوا على سهولة قراءة الأرقام.

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());
		}
}

مساعد Assert مخصّص

أنشئوا فئة Assert صغيرة. قارنوا بين المتوقع والفعلي باستخدام هامش سماح للقيم من نوع 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");
  }
}

تشغيل اختبارات سريعة

اجمعوا بضعة اختبارات في Main. اجعلوا التوقعات بسيطة وسهلة القراءة.

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");
  }
}

نصائح التنفيذ

قائمة التحقق:

  • تحققوا من صحة المدخلات داخل البُناة.
  • حافظوا على قِصر الصيغ؛ واستخدموا ثوابت محلية لقيمة pi.
  • أنشئوا Assert صغيرًا للاختبارات المخصّصة.
  • اختبروا كلًا من Area وPerimeter لكل شكل.

فكرة للاختبار المخصّص

تحقق سريع: ما الطريقة البسيطة لاختبار مكتبة صغيرة من دون إطار اختبارات؟

مراجعة

مراجعة: نفّذوا الأشكال مع عمليات تحقق واضحة، ثم تحققوا منها باستخدام مساعد Assert بسيط في Main. حافظوا على صِغر الاختبارات وحتميتها.

الأسئلة الشائعة

هل درس «التنفيذ والاختبارات» مجاني؟

نعم — نص درس «التنفيذ والاختبارات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 3 دروس في المجموع.

ماذا ستتعلم في «التنفيذ والاختبارات»؟

نفّذ Rectangle وCircle وTriangle، وأضف فحوصات أساسية للمدخلات، واكتب اختبارات صغيرة مخصّصة من دون إطار عمل. تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.

كم من الوقت يستغرق درس «التنفيذ والاختبارات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التصميم (الواجهات والوراثة)
  2. التنفيذ والاختبارات
  3. السلوكيات متعددة الأشكال
← العودة إلى C# Academy