Parcours
/
Java
Java
/
Exercices
/
Compétition de télécommande
Compétition de télécommande

Compétition de télécommande

Exercice d'apprentissage

Introduction

Interfaces

Une interface est un type dont les membres définissent un ensemble de fonctionnalités liées. Elle sépare les usages d'une classe de l'implémentation, ce qui permet plusieurs implémentations différentes ou la prise en charge d'un comportement générique tel que le formatage, la comparaison ou la conversion.

La syntaxe d'une interface est similaire à celle d'une classe, à ceci près que les méthodes n'apparaissent que sous forme de signature et qu'aucun corps n'est fourni.

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;
    }
}

Toutes les opérations définies par l'interface doivent être implémentées par la classe qui l'implémente.

Les interfaces contiennent généralement des méthodes d'instance.

Un exemple d'interface que l'on trouve dans la bibliothèque de classes Java, outre Cloneable, illustrée ci-dessus, est Comparable<T>. L'interface Comparable<T> peut être implémentée lorsqu'un ordre de tri générique par défaut est nécessaire dans les collections.

Instructions

Dans cet exercice, on va continuer à travailler sur des voitures télécommandées.

Une voiture expérimentale a été développée et la piste d'essai doit être adaptée pour accueillir aussi bien les modèles de série que les modèles expérimentaux. Les deux types de voiture ont déjà été construits et tu dois trouver un moyen de gérer les deux sur la piste d'essai.

De plus, les voitures de série commencent à remporter quelques succès. Le patron de l'équipe tient à entretenir l'esprit de compétition en publiant un classement des voitures de série.

1. Implémente l'interface

Ajoute deux méthodes à l'interface RemoteControlCar :

  • drive(), qui ne renvoie rien, et
  • getDistanceTravelled(), qui renvoie un int.

Fais ensuite en sorte que ProductionRemoteControlCar et ExperimentalRemoteControlCar implémentent l'interface RemoteControlCar. Cela implique d'implémenter toutes les méthodes exigées par l'interface.

2. Conduis

Chaque appel à .drive() doit faire avancer la voiture d'une certaine distance :

  • une ProductionRemoteControlCar parcourt 10 unités,
  • une ExperimentalRemoteControlCar parcourt 20 unités.

La méthode .getDistanceTravelled() doit renvoyer le nombre d'unités que la voiture a parcourues au total.

ProductionRemoteControlCar prod = new ProductionRemoteControlCar();
prod.drive();
prod.getDistanceTravelled();
// => 10
        
ExperimentalRemoteControlCar exp = new ExperimentalRemoteControlCar();
exp.drive();
exp.getDistanceTravelled();
// => 20

3. Fais la course

Implémente la méthode TestTrack.race(RemoteControlCar car), dans laquelle les cars peuvent appeler drive().

TestTrack.race(new ProductionRemoteControlCar());
TestTrack.race(new ExperimentalRemoteControlCar());
// this should execute without an exception being thrown

4. Permets de trier les voitures de série

Implémente l'interface Comparable<T> dans la classe ProductionRemoteControlCar. L'ordre de tri par défaut des voitures doit être l'ordre décroissant du nombre de victoires.

Implémente la méthode statique TestTrack.getRankedCars() pour qu'elle renvoie les voitures passées en argument, triées par nombre de victoires décroissant.

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
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Java Exercism

Prêt à commencer Compétition de télécommande ?

Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.