Track
/
Java
Java
/
Esercizi
/
Competizione di radiocomando
Competizione di radiocomando

Competizione di radiocomando

Esercizio di apprendimento

Introduzione

Le interfacce

Un'interfaccia è un tipo che contiene membri che definiscono un gruppo di funzionalità correlate. Tiene separati gli usi di una classe dall'implementazione, permettendo più implementazioni diverse o il supporto di un comportamento generico come la formattazione, il confronto o la conversione.

La sintassi di un'interfaccia è simile a quella di una classe, con la differenza che i metodi compaiono solo come firma e non ne viene fornito il corpo.

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

Tutte le operazioni definite dall'interfaccia devono essere implementate dalla classe che la implementa.

Le interfacce di solito contengono metodi di istanza.

Un esempio di interfaccia presente nella libreria di classi di Java, oltre a Cloneable illustrata sopra, è Comparable<T>. L'interfaccia Comparable<T> può essere implementata quando è richiesto un ordinamento generico predefinito nelle collezioni.

Istruzioni

In questo esercizio lavorerai ancora un po' sulle macchine radiocomandate.

È stata sviluppata una macchina sperimentale e la pista di prova deve essere adattata per gestire sia i modelli di produzione sia quelli sperimentali. I due tipi di macchina sono già stati costruiti e devi trovare un modo per gestirli entrambi sulla pista di prova.

Inoltre, le macchine di produzione stanno iniziando ad avere un certo successo. Il capo della squadra ci tiene a mantenere lo spirito competitivo pubblicando una classifica delle macchine di produzione.

1. Implementare l'interfaccia

Aggiungi due metodi all'interfaccia RemoteControlCar:

  • drive(), che non restituisce nulla, e
  • getDistanceTravelled(), che restituisce un int.

Poi fai in modo che ProductionRemoteControlCar e ExperimentalRemoteControlCar implementino l'interfaccia RemoteControlCar. Questo include l'implementazione di tutti i metodi richiesti dall'interfaccia.

2. Guidare

Ogni chiamata a .drive() deve far percorrere alla macchina una certa distanza:

  • una ProductionRemoteControlCar percorre 10 unità,
  • una ExperimentalRemoteControlCar percorre 20 unità.

Il metodo .getDistanceTravelled() deve restituire il numero di unità che la macchina ha percorso in tutta la sua vita.

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

3. Gara

Implementa il metodo TestTrack.race(RemoteControlCar car), in cui le car possono eseguire drive().

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

4. Consentire l'ordinamento delle macchine di produzione

Implementa l'interfaccia Comparable<T> nella classe ProductionRemoteControlCar. L'ordine di ordinamento predefinito delle macchine deve essere quello decrescente per numero di vittorie.

Implementa il metodo statico TestTrack.getRankedCars() in modo che restituisca le macchine passate, ordinate in ordine decrescente per numero di vittorie.

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
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Java Exercism

Vuoi iniziare Competizione di radiocomando?

Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.