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

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

تمرين تعلّمي

مقدمة

الواجهات

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

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

public interface Language {
    String getLanguageName();
    String speak();
}

public class ItalianTraveller implements Language, Cloneable {

    // from Language interface
    public String getLanguageName() {
        return "Italiano";
    }

    // from Language interface
    public String speak() {
        return "Ciao mondo";
    }

    // from Cloneable interface
    public Object clone() {
        ItalianTraveller it = new ItalianTraveller();
        return it;
    }
}

يجب على الصنف المُنفِّذ أن ينفّذ كل العمليات التي تُعرّفها الواجهة.

تحتوي الواجهات عادةً على طرق النسخة.

ومن أمثلة الواجهات الموجودة في مكتبة أصناف Java، إلى جانب Cloneable الموضحة أعلاه، الواجهة Comparable<T>. يمكن تنفيذ الواجهة Comparable<T> حين يُطلب ترتيب عام افتراضي في المجموعات.

التعليمات

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

طُوّرت سيارة تجريبية، ويحتاج مضمار الاختبار إلى تكييف ليتعامل مع الطرازين الإنتاجي والتجريبي. وقد صُنع نوعا السيارتين بالفعل، وعليك إيجاد أسلوب للتعامل مع كليهما على مضمار الاختبار.

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

1. تنفيذ الواجهة

يُرجى إضافة طريقتين إلى واجهة RemoteControlCar:

  • drive()، ولا تُرجع شيئًا، و
  • getDistanceTravelled()، وتُرجع قيمة int.

ثم اجعل ProductionRemoteControlCar وExperimentalRemoteControlCar ينفّذان واجهة RemoteControlCar. ويشمل ذلك تنفيذ جميع الطرق التي تتطلبها الواجهة.

2. القيادة

ينبغي لكل استدعاء لـ .drive() أن يجعل السيارة تقطع مسافة معينة:

  • السيارة ProductionRemoteControlCar تقطع 10 وحدات،
  • والسيارة ExperimentalRemoteControlCar تقطع 20 وحدة.

ينبغي أن تُرجع طريقة .getDistanceTravelled() عدد الوحدات التي قطعتها السيارة طوال عمرها.

ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
        
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20

3. السباق

نفّذ طريقة TestTrack.race(RemoteControlCar car)، التي تتاح فيها للسيارات car فرصة استدعاء drive().

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

4. تمكين ترتيب السيارات الإنتاجية

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

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

ProductionRemoteControlCar prc1 = new ProductionRemoteControlCar();
ProductionRemoteControlCar prc2 = new ProductionRemoteControlCar();
prc1.setNumberOfVictories(2);
prc2.setNumberOfVictories(3);
List<ProductionRemoteControlCar> unsortedCars = new ArrayList<>();
unsortedCars.add(prc1);
unsortedCars.add(prc2);
List<ProductionRemoteControlCar> rankings = TestTrack.getRankedCars(unsortedCars);
// => rankings.get(0) == prc2
// => rankings.get(1) == prc1
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Java Exercism

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

سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.