Trilhas
/
Java
Java
/
Exercícios
/
Competição de controle remoto
Competição de controle remoto

Competição de controle remoto

Exercício de aprendizagem

Introdução

Interfaces

Uma interface é um tipo que contém membros que definem um grupo de funcionalidades relacionadas. Ela distancia os usos de uma classe da implementação, permitindo várias implementações diferentes ou o suporte a algum comportamento genérico, como formatação, comparação ou conversão.

A sintaxe de uma interface é parecida com a de uma classe, exceto que os métodos aparecem apenas como assinatura, sem 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;
    }
}

Todas as operações definidas pela interface precisam ser implementadas pela classe que a implementa.

Interfaces geralmente contêm métodos de instância.

Um exemplo de interface da biblioteca de classes do Java, além de Cloneable ilustrada acima, é Comparable<T>. A interface Comparable<T> pode ser implementada quando é necessária uma ordem de classificação genérica padrão em coleções.

Instruções

Neste exercício, você vai trabalhar mais um pouco com carros de controle remoto.

Um carro experimental foi desenvolvido e a pista de testes precisa ser adaptada para lidar tanto com os modelos de produção quanto com o experimental. Os dois tipos de carro já foram construídos e você precisa encontrar uma forma de lidar com ambos na pista de testes.

Além disso, os carros de produção estão começando a ter algum sucesso. O chefe da equipe quer manter o espírito competitivo publicando um ranking dos carros de produção.

1. Implemente a interface

Adicione dois métodos à interface RemoteControlCar:

  • drive(), que não retorna nada, e
  • getDistanceTravelled(), que retorna um int.

Depois, faça ProductionRemoteControlCar e ExperimentalRemoteControlCar implementarem a interface RemoteControlCar. Isso inclui implementar todos os métodos exigidos pela interface.

2. Dirija

Cada chamada de .drive() deve fazer o carro percorrer uma certa distância:

  • um ProductionRemoteControlCar percorre 10 unidades,
  • um ExperimentalRemoteControlCar percorre 20 unidades.

O método .getDistanceTravelled() deve retornar o número de unidades que o carro percorreu ao longo da sua vida útil.

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

3. Corrida

Implemente o método TestTrack.race(RemoteControlCar car), no qual os cars podem drive().

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

4. Permita que os carros de produção sejam ordenados

Implemente a interface Comparable<T> na classe ProductionRemoteControlCar. A ordem de classificação padrão dos carros deve ser a ordem decrescente de vitórias.

Implemente o método estático TestTrack.getRankedCars() para retornar os carros recebidos, ordenados em ordem decrescente de número de vitórias.

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
Editar via GitHub O link abre em uma nova janela ou aba
Java Exercism

Tudo pronto para começar Competição de controle remoto?

Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.