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