Percursos
/
C#
C#
/
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 respetiva implementação, permitindo várias implementações diferentes ou o suporte de um comportamento genérico, como a formatação, a comparação ou a conversão.

A sintaxe de uma interface é semelhante à de uma classe ou de uma struct, exceto que os métodos e as propriedades aparecem apenas como assinatura e não é fornecido qualquer corpo.

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

Todas as operações definidas pela interface têm de ser implementadas.

As interfaces podem conter métodos e propriedades de instância, entre outros membros

Ordenação

Para permitir que um objeto seja comparado com outro objeto, este tem de implementar a interface IComparable<T>. Esta interface tem um único método que tem de ser implementado: int CompareTo(T other).

Existem três valores devolvidos possíveis para o método CompareTo:

  • Valor inferior a zero: o objeto atual é menor do que o outro objeto.
  • Valor superior a zero: o objeto atual é maior do que o outro objeto.
  • O valor é zero: o objeto atual é igual ao outro objeto.

Instruções

Neste exercício vais trabalhar mais um pouco com carros de controlo remoto.

Foi desenvolvido um carro experimental e a pista de testes precisa de ser adaptada para suportar tanto os modelos de produção como os experimentais. Os dois tipos de carro já foram construídos e precisas de encontrar uma 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 faz questão de manter o espírito competitivo, publicando uma classificação dos carros de produção.

1. Permitir que os carros sejam conduzidos na mesma pista de testes

Adiciona um método à interface IRemoteControlCar para expor as implementações de Drive() dos dois tipos de carro.

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

2. Permitir que a distância percorrida pelos diferentes modelos na pista de testes seja comparada

Adiciona uma propriedade à interface IRemoteControlCar para expor as implementações da propriedade DistanceTravelled dos dois tipos de carro.

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

3. Permitir classificar os carros de produção

Implementa a interface IComparable<T> na classe ProductionRemoteControlCar. A ordem de ordenação predefinida dos carros deve ser a ordem crescente de vitórias.

Implementa o método estático TestTrack.GetRankedCars() para devolver os carros recebidos ordenados por ordem crescente do número de vitórias.

var prc1 = new ProductionRemoteControlCar();
var prc2 = new ProductionRemoteControlCar();
prc1.NumberOfVictories = 3;
prc2.NumberOfVictories = 2;
var rankings = TestTrack.GetRankedCars(prc1, prc2);
// => rankings[1] == prc1
Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

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

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.