Menu
Coddy logo textTech

Rückblick – Zoo-Manager

Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 48 von 61.

challenge icon

Aufgabe

Einfach

Lass uns einen Zoo-Manager erstellen, der alle Trait-Objekt-Konzepte zusammenführt, die du gelernt hast! Du erstellst ein System, in dem verschiedene Tiere, jedes mit seinem eigenen einzigartigen Geräusch, in einer einzigen Sammlung gespeichert werden können und nacheinander zum Sprechen gebracht werden.

Du organisierst deinen Code über zwei Dateien:

  • animals.rs: Definiere ein öffentliches Speak-Trait mit einer speak-Methode, die &self übernimmt und einen String zurückgibt. Erstelle anschließend drei öffentliche Structs: Dog, Cat und Bird, jeweils mit einem öffentlichen name-Feld (String). Implementiere das Speak-Trait für jedes Tier mit seinen charakteristischen Geräuschen:
    • Dog soll {name} says: Woof! zurückgeben.
    • Cat soll {name} says: Meow! zurückgeben.
    • Bird soll {name} says: Tweet! zurückgeben.
  • main.rs: Binde dein Tiemodul ein und erstelle einen Zoo! Erstelle mithilfe der bereitgestellten Eingaben einen Vec<Box<dyn Speak>>, der jeweils ein Tier jedes Typs enthält. Füge sie in dieser Reihenfolge hinzu: zuerst Dog, dann Cat und anschließend Bird. Iteriere schließlich durch deinen Zoo und gib das Geräusch jedes Tieres in einer eigenen Zeile aus.

Diese Herausforderung zeigt die wahre Stärke von Trait-Objekten: Drei völlig unterschiedliche Tierarten leben gemeinsam in einer Sammlung, wobei jedes Tier auf denselben Aufruf von speak() mit seinem eigenen einzigartigen Verhalten reagiert.

Deine Ausgabe sollte die Tiere in dieser Reihenfolge sprechen lassen:

{dog_name} says: Woof!
{cat_name} says: Meow!
{bird_name} says: Tweet!

Zum Beispiel mit den Eingaben Rex, Whiskers und Tweety:

Rex says: Woof!
Whiskers says: Meow!
Tweety says: Tweet!

Du erhältst drei Eingaben: den Namen des Hundes, den Namen der Katze und den Namen des Vogels.

Probier es selbst

mod animals;

use animals::{Speak, Dog, Cat, Bird};

fn main() {
    // Eingabe für Tiernamen lesen
    let mut dog_name = String::new();
    std::io::stdin().read_line(&mut dog_name).expect("Failed to read line");
    let dog_name = dog_name.trim().to_string();

    let mut cat_name = String::new();
    std::io::stdin().read_line(&mut cat_name).expect("Failed to read line");
    let cat_name = cat_name.trim().to_string();

    let mut bird_name = String::new();
    std::io::stdin().read_line(&mut bird_name).expect("Failed to read line");
    let bird_name = bird_name.trim().to_string();

    // TODO: Erstelle einen Vec<Box<dyn Speak>> namens zoo
    // Füge Tiere in der Reihenfolge hinzu: zuerst Dog, dann Cat, dann Bird

    // TODO: Iteriere durch den zoo und gib den Laut jedes Tieres aus
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Rust-Compiler