المسارات
/
C#
C#
/
التمارين
/
مسابقة التحكم عن بعد
مسابقة التحكم عن بعد

مسابقة التحكم عن بعد

تمرين تعلّمي

مقدمة

الواجهات

الواجهة نوع يحتوي على أعضاء تعرّف مجموعة من الوظائف المترابطة. وهي تفصل استخدامات الصنف عن التنفيذ، بما يتيح عدة تنفيذات مختلفة أو دعم سلوك عام مثل التنسيق أو المقارنة أو التحويل.

تشبه صياغة الواجهة صياغة الصنف أو البنية، إلا أن الطرق والخصائص تظهر كتوقيع فقط دون تقديم أي جسم لها.

public interface ILanguage
{
    string LanguageName { get; set; }
    string Speak();
}

public class ItalianTaveller : ILanguage, ICloneable
{
    public string LanguageName { get; set; } =  "Italiano";

    public string Speak()
    {
        return "Ciao mondo";
    }

    public object Clone()
    {
        ItalianTaveller it = new ItalianTaveller();
        it.LanguageName = this.LanguageName;
        return it;
    }
}

يجب تنفيذ كل العمليات التي تعرّفها الواجهة.

يمكن أن تحتوي الواجهات على طرق وخصائص النسخة إلى جانب أعضاء أخرى

الترتيب

لكي يمكن مقارنة كائن بكائن آخر، يجب أن ينفّذ واجهة IComparable<T>. تحتوي هذه الواجهة على طريقة واحدة يجب تنفيذها: int CompareTo(T other).

هناك ثلاث قيم إرجاع ممكنة لطريقة CompareTo:

  • قيمة أصغر من صفر: الكائن الحالي أصغر من الكائن الآخر.
  • قيمة أكبر من صفر: الكائن الحالي أكبر من الكائن الآخر.
  • القيمة صفر: الكائن الحالي يساوي الكائن الآخر.

التعليمات

في هذا التمرين ستقوم بمزيد من العمل على سيارات التحكم عن بُعد.

طُوّرت سيارة تجريبية، ويحتاج مسار الاختبار إلى تعديل ليتعامل مع الطرازات الإنتاجية والتجريبية معًا.

صُنع النوعان من السيارات بالفعل، وعليك إيجاد أسلوب للتعامل معهما معًا على مسار الاختبار.

بالإضافة إلى ذلك، بدأت سيارات الإنتاج تحقق بعض النجاح. ومدير الفريق حريص على الحفاظ على الروح التنافسية بنشر ترتيب لسيارات الإنتاج.

1. تمكين السيارات من السير على مسار الاختبار نفسه

من فضلك أضف طريقة إلى واجهة IRemoteControlCar بحيث تكشف تنفيذات Drive() للنوعين من السيارات.

TestTrack.Race(new ProductionRemoteControlCar());
TestTrack.Race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

2. تمكين مقارنة المسافة التي تقطعها الطرازات المختلفة على مسار الاختبار

من فضلك أضف خاصية إلى واجهة IRemoteControlCar بحيث تكشف تنفيذات الخاصية DistanceTravelled للنوعين من السيارات.

var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20

3. السماح بترتيب سيارات الإنتاج

من فضلك نفّذ الواجهة IComparable<T> في الصنف ProductionRemoteControlCar. وينبغي أن يكون ترتيب الفرز الافتراضي للسيارات تصاعديًا حسب عدد الانتصارات.

نفّذ الطريقة الثابتة TestTrack.GetRankedCars() لتُرجع السيارات المُمرَّرة مرتّبة ترتيبًا تصاعديًا حسب عدد الانتصارات.

var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
C# Exercism

مستعد لبدء مسابقة التحكم عن بعد؟

سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.