Trilhas
/
C#
C#
/
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 separa os usos de uma classe da implementação, o que permite 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 ou struct, exceto que os métodos e as propriedades aparecem apenas como assinatura, sem 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 precisam ser implementadas.

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

Ordenação

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

Há três valores de retorno possíveis para o método CompareTo:

  • Valor menor que zero: o objeto atual é menor que o outro objeto.
  • Valor maior que zero: o objeto atual é maior que o outro objeto.
  • Valor igual a zero: o objeto atual é igual ao outro objeto.

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 com os modelos de produção e 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 sucesso. O chefe da equipe quer manter o espírito competitivo publicando um ranking dos carros de produção.

1. Permita que os carros sejam dirigidos na mesma pista de testes

Adicione 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. Permita comparar a distância percorrida por modelos diferentes na pista de testes

Adicione 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. Permita que os carros de produção sejam classificados

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

Implemente o método estático TestTrack.GetRankedCars() para retornar os carros recebidos ordenados em ordem crescente de 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 O link abre em uma nova janela ou aba
C# Exercism

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

Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.