مسیرها
/
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 به اندازه‌ی ۱۰ واحد حرکت می‌کند،
  • یک ExperimentalRemoteControlCar به اندازه‌ی ۲۰ واحد حرکت می‌کند.

متد .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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.