Треки
/
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 вправ та справжнє наставництво від людей, і все це безкоштовно.