Percursos
/
C#
C#
/
Exercícios
/
Os brinquedos do Jedlik
Os brinquedos do Jedlik

Os brinquedos do Jedlik

Exercício de aprendizagem

Introdução

Classes

Em C#, a principal construção da programação orientada a objetos é a classe, que combina dados (campos) e comportamento (métodos). Os campos e os métodos de uma classe são conhecidos como os seus membros.

Podes restringir o acesso aos membros através de modificadores de acesso, sendo os dois mais comuns:

  • public: qualquer código pode aceder ao membro (sem restrições).
  • private: só o código da mesma classe pode aceder ao membro.

Podes pensar numa classe como um modelo para criar instâncias dessa classe. Para criar uma instância de uma classe (também conhecida como objeto), usa-se a palavra-chave new:

class Car
{
}

// Create two car instances
var myCar = new Car();
var yourCar = new Car();

Os campos têm um tipo e podem ser definidos em qualquer parte de uma classe. Os campos públicos são definidos em PascalCase e os campos privados em camelCase, precedidos de um underscore _:

class Car
{
    // Accessible by anyone
    public int Weight;

    // Only accessible by code in this class
    private string _color;
}

Podes, opcionalmente, atribuir um valor inicial a um campo. Se um campo não especificar um valor inicial, é-lhe atribuído o valor predefinido do seu tipo. Podes consultar e atualizar os valores dos campos de uma instância com a notação de ponto.

class Car
{
    // Will be set to specified value
    public int Weight = 2500;

    // Will be set to default value (0)
    public int Year;
}

var newCar = new Car();
newCar.Weight; // => 2500
newCar.Year;   // => 0

// Update value of the field
newCar.Year = 2018;

Os campos privados são normalmente atualizados como efeito secundário da chamada de um método. Esses métodos normalmente não devolvem nenhum valor, caso em que o tipo devolvido deve ser void:

class CarImporter
{
    private int _carsImported;

    public void ImportCars(int numberOfCars)
    {
        // Update private field from public method
        _carsImported = _carsImported + numberOfCars;
    }
}

Instruções

Neste exercício vais brincar com um carro telecomandado, para o qual finalmente poupaste dinheiro suficiente para o comprar.

Os carros começam com a bateria cheia (100%). Cada vez que conduzes o carro com o telecomando, ele percorre 20 metros e gasta um por cento da bateria.

O carro telecomandado tem um visor LED sofisticado que mostra duas informações:

  • A distância total percorrida, apresentada como: "Driven <METERS> meters".
  • A carga restante da bateria, apresentada como: "Battery at <PERCENTAGE>%".

Se a bateria estiver a 0%, já não consegues conduzir o carro e o visor da bateria mostra "Battery empty".

Tens seis tarefas, e cada uma delas vai trabalhar com instâncias de carros telecomandados.

1. Compra um carro telecomandado novo em folha

Implementa o método (static) RemoteControlCar.Buy() para devolver uma instância de um carro telecomandado novo em folha:

RemoteControlCar car = RemoteControlCar.Buy();

2. Mostra a distância percorrida

Implementa o método RemoteControlCar.DistanceDisplay() para devolver a distância tal como é apresentada no visor LED:

var car = RemoteControlCar.Buy();
car.DistanceDisplay();
// => "Driven 0 meters"

3. Mostra a percentagem da bateria

Implementa o método RemoteControlCar.BatteryDisplay() para devolver a percentagem da bateria tal como é apresentada no visor LED:

var car = RemoteControlCar.Buy();
car.BatteryDisplay();
// => "Battery at 100%"

4. Atualiza o número de metros percorridos ao conduzir

Implementa o método RemoteControlCar.Drive() que atualiza o número de metros percorridos:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.DistanceDisplay();
// => "Driven 40 meters"

5. Atualiza a percentagem da bateria ao conduzir

Atualiza o método RemoteControlCar.Drive() para atualizar a percentagem da bateria:

var car = RemoteControlCar.Buy();
car.Drive();
car.Drive();
car.BatteryDisplay();
// => "Battery at 98%"

6. Impede a condução quando a bateria está descarregada

Atualiza o método RemoteControlCar.Drive() para não aumentar a distância percorrida nem diminuir a percentagem da bateria quando a bateria está descarregada (a 0%):

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

car.DistanceDisplay();
// => "Driven 2000 meters"

car.BatteryDisplay();
// => "Battery empty"
Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar Os brinquedos do Jedlik?

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