トラック
/
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>インターフェースは、コレクションで汎用的な並べ替え順序が必要なときに実装します。

説明

この演習では、ラジコンカーを使った作業をさらに進めていきます。

実験用の車が開発されたので、テストコースを改良して、量産モデルと実験モデルの両方を扱えるようにする必要があります。2種類の車はすでに完成しているので、両方をテストコースで扱う方法を考えましょう。

さらに、量産車も少しずつ成果を上げ始めています。チームのボスは、量産車のランキングを公開して競争心を維持したいと考えています。

1. インターフェースを実装する

RemoteControlCarインターフェースに次の2つのメソッドを追加してください。

  • 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. 量産車を並べ替えられるようにする

ProductionRemoteControlCarクラスにComparable<T>インターフェースを実装してください。車のデフォルトの並べ替え順は、勝利数の降順にします。

静的メソッド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に登録すれば、26個のコンセプト158個の演習、そして本物の人間によるメンタリングとともに、Javaを学んでマスターできます。すべて無料です。