Parcours
/
C#
C#
/
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 qui contient des membres définissant un ensemble de fonctionnalités liées. Elle sépare les utilisations d'une classe de son 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 semblable à celle d'une classe ou d'un struct, à ceci près que les méthodes et les propriétés n'y apparaissent que sous forme de signature et qu'aucun corps n'est fourni.

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

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

Les interfaces peuvent contenir, entre autres membres, des méthodes et des propriétés d'instance.

Comparaison

Pour qu'un objet puisse être comparé à un autre objet, il doit implémenter l'interface IComparable<T>. Cette interface prend une seule méthode à implémenter : int CompareTo(T other).

La méthode CompareTo peut renvoyer trois valeurs possibles :

  • Une valeur inférieure à zéro : l'objet courant est plus petit que l'autre objet.
  • Une valeur supérieure à zéro : l'objet courant est plus grand que l'autre objet.
  • Une valeur égale à zéro : l'objet courant est égal à l'autre objet.

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 prendre en charge à la fois les modèles de série et les modèles expérimentaux. Les deux types de voiture ont déjà été construits et tu dois trouver un moyen de les gérer tous les deux sur la piste d'essai.

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

1. Permets aux voitures de rouler sur la même piste d'essai

Ajoute une méthode à l'interface IRemoteControlCar pour exposer les implémentations de Drive() pour les deux types de voiture.

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

2. Permets de comparer la distance parcourue par les différents modèles sur la piste d'essai

Ajoute une propriété à l'interface IRemoteControlCar pour exposer les implémentations de la propriété DistanceTravelled pour les deux types de voiture.

var prod = new ProductionRemoteControlCar();
TestTrack.Race(prod);
var exp = new ExperimentalRemoteControlCar();
TestTrack.Race(exp);
prod.DistanceTravelled
// => 10
exp.DistanceTravelled
// => 20

3. Permets de classer les voitures de série

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

Implémente la méthode statique TestTrack.GetRankedCars() pour renvoyer les voitures passées en argument, triées par ordre croissant du nombre de victoires.

var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

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

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.