Διαδρομές
/
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 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.