Rückblick – Zoo-Manager
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 48 von 61.
Aufgabe
EinfachLass 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 öffentlichesSpeak-Trait mit einerspeak-Methode, die&selfübernimmt und einenStringzurückgibt. Erstelle anschließend drei öffentliche Structs:Dog,CatundBird, jeweils mit einem öffentlichenname-Feld (String). Implementiere dasSpeak-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.
- Dog soll
main.rs: Binde dein Tiemodul ein und erstelle einen Zoo! Erstelle mithilfe der bereitgestellten Eingaben einenVec<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
1Methoden und Verhalten
Einführung in ImplementierungsblöckeDer Self-ParameterVeränderliche MethodenAssoziierte FunktionenMehrere ImplementierungsblöckeMethod ChainingRückblick – Rechteck-Aktionen4Projekt: Virtuelles Haustier
Das Haustier definierenDas Haustier füttern7Standard-Traits
Das Debug-TraitDas Display-TraitClone und CopyGleichheits-TraitsZusammenfassung – Druckbarer Punkt10Projekt: Dokumentensystem
Das Draw-TraitText-Komponente2Kapselung und Module
Grundlagen der ModuleDas Public-SchlüsselwortPrivate FelderGetterSetterWiederholung – Sicherer Tresor5Generics
Generische StructsGenerische MethodenMehrere generische TypenGenerische FunktionenZusammenfassung - Koordinatenpunkt8Traits als Einschränkungen
Syntax für Trait BoundsMehrfache BoundsDie Where-KlauselTypen mit Traits zurückgebenRückblick – Generischer Drucker11Design Patterns in Rust
Newtype-PatternKompositionDas Drop-TraitFrom und IntoZusammenfassung – Smart Pointer Mock3Fortgeschrittene Enums
Enums mit DatenMethoden für EnumsMatching von DatenvariantenDas Option-Enum erneut betrachtetZusammenfassung – Shape-Enum6Definition von Traits
Was ist ein Trait?Traits implementierenStandardimplementierungenStandardimplementierungen überschreibenTraits mit ParameternZusammenfassung – Media Player9Trait-Objekte
Dynamischer DispatchVektoren von TraitsIterieren über Trait-ObjekteRückblick – Zoo-ManagerÜbe selbstständig: Online-Rust-Compiler