Tracks
/
C#
C#
/
Übungen
/
Jedliks Spielzeug
Jedliks Spielzeug

Jedliks Spielzeug

Lernübung

Einführung

Klassen

Das zentrale objektorientierte Konstrukt in C# ist die Klasse, eine Kombination aus Daten (Feldern) und Verhalten (Methoden). Die Felder und Methoden einer Klasse nennt man ihre Member.

Der Zugriff auf Member kann über Zugriffsmodifizierer eingeschränkt werden. Die beiden gebräuchlichsten sind:

  • public: Auf das Member kann jeder Code zugreifen (keine Einschränkungen).
  • private: Auf das Member kann nur Code in derselben Klasse zugreifen.

Du kannst dir eine Klasse als Vorlage für das Erstellen von Instanzen dieser Klasse vorstellen. Um eine Instanz einer Klasse zu erstellen (auch bekannt als Objekt), verwendet man das Schlüsselwort new:

class Car
{
}

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

Felder haben einen Typ und können an jeder Stelle in einer Klasse definiert werden. Öffentliche Felder werden in PascalCase definiert, private Felder in camelCase und mit einem vorangestellten Unterstrich _:

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

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

Optional kannst du einem Feld einen Anfangswert zuweisen. Wenn ein Feld keinen Anfangswert angibt, wird es auf den Standardwert seines Typs gesetzt. Auf die Feldwerte einer Instanz kannst du mit der Punktnotation zugreifen und sie ändern.

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;

Private Felder werden üblicherweise als Seiteneffekt eines Methodenaufrufs aktualisiert. Solche Methoden geben meistens keinen Wert zurück; in diesem Fall sollte der Rückgabetyp void sein:

class CarImporter
{
    private int _carsImported;

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

Anleitung

In dieser Übung spielst du mit einem ferngesteuerten Auto herum, für das du endlich genug Geld zusammengespart hast.

Die Autos starten mit vollen (100 %) Batterien. Jedes Mal, wenn du das Auto mit der Fernbedienung fährst, legt es 20 Meter zurück und verbraucht ein Prozent der Batterie.

Das ferngesteuerte Auto hat ein schickes LED-Display, das zwei Informationen anzeigt:

  • Die insgesamt gefahrene Strecke, angezeigt als: "Driven <METERS> meters".
  • Die verbleibende Batterieladung, angezeigt als: "Battery at <PERCENTAGE>%".

Wenn die Batterie bei 0 % ist, kannst du das Auto nicht mehr fahren und die Batterieanzeige zeigt "Battery empty".

Du hast sechs Aufgaben, die jeweils mit Instanzen des ferngesteuerten Autos arbeiten.

1. Kauf ein brandneues ferngesteuertes Auto

Implementiere die (statische) Methode RemoteControlCar.Buy(), die eine brandneue Instanz des ferngesteuerten Autos zurückgibt:

RemoteControlCar car = RemoteControlCar.Buy();

2. Zeige die gefahrene Strecke an

Implementiere die Methode RemoteControlCar.DistanceDisplay(), die die Strecke so zurückgibt, wie sie auf dem LED-Display angezeigt wird:

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

3. Zeige den Batteriestand in Prozent an

Implementiere die Methode RemoteControlCar.BatteryDisplay(), die den Batteriestand so zurückgibt, wie er auf dem LED-Display angezeigt wird:

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

4. Aktualisiere die gefahrene Strecke beim Fahren

Implementiere die Methode RemoteControlCar.Drive(), die die Anzahl der gefahrenen Meter aktualisiert:

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

5. Aktualisiere den Batteriestand beim Fahren

Erweitere die Methode RemoteControlCar.Drive() so, dass sie den Batteriestand aktualisiert:

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

6. Verhindere das Fahren, wenn die Batterie leer ist

Erweitere die Methode RemoteControlCar.Drive() so, dass sie weder die gefahrene Strecke erhöht noch den Batteriestand verringert, wenn die Batterie leer ist (bei 0 %):

var car = RemoteControlCar.Buy();

// Drain the battery
// ...

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

car.BatteryDisplay();
// => "Battery empty"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
C# Exercism

Bereit, mit Jedliks Spielzeug zu starten?

Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.