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