Percursos
/
Java
Java
/
Exercícios
/
Competição de controlo remoto
Competição de controlo remoto

Competição de controlo remoto

Exercício de aprendizagem

Introdução

Interfaces

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

A sintaxe de uma interface é semelhante à de uma classe, exceto que os métodos aparecem apenas como assinatura e não têm 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 têm de ser implementadas pela classe que a implementa.

As interfaces contêm normalmente 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 ordenação genérica predefinida em coleções.

Instruções

Neste exercício vais trabalhar mais um pouco com carros telecomandados.

Foi desenvolvido um carro experimental e a pista de testes precisa de ser adaptada para lidar tanto com os modelos de produção como com os experimentais. Os dois tipos de carro já estão construídos e tens de arranjar forma de lidar com ambos na pista de testes.

Além disso, os carros de produção começam a ter algum sucesso. O chefe de equipa está empenhado em manter o espírito competitivo, publicando uma classificação dos carros de produção.

1. Implementa a interface

Adiciona dois métodos à interface RemoteControlCar:

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

Depois, faz com que ProductionRemoteControlCar e ExperimentalRemoteControlCar implementem a interface RemoteControlCar. Isto inclui implementar todos os métodos exigidos pela interface.

2. Conduzir

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

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

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

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

3. Corrida

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

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

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

Implementa a interface Comparable<T> na classe ProductionRemoteControlCar. A ordem de ordenação predefinida para os carros deve ser a ordem decrescente de vitórias.

Implementa o método estático TestTrack.getRankedCars() para devolver os carros recebidos, ordenados por ordem decrescente do 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 A ligação abre numa nova janela ou separador
Java Exercism

Estás pronto para começar Competição de controlo remoto?

Inscreve-te no Exercism para aprenderes e dominares Java com 26 conceitos158 exercícios, e mentoria humana real, tudo grátis.