Menu
Coddy logo textTech

Récapitulatif - Gestionnaire de zoo

Fait partie de la section Object Oriented Programming du Journey Rust de Coddy — leçon 48 sur 61.

challenge icon

Défi

Facile

Construisons un gestionnaire de zoo qui rassemble tous les concepts d'objets de trait que vous avez appris ! Vous allez créer un système où différents animaux — chacun avec son propre cri unique — peuvent être stockés dans une seule collection et amenés à s'exprimer un par un.

Vous organiserez votre code sur deux fichiers :

  • animals.rs : Définissez un trait public Speak avec une méthode speak qui prend &self et retourne un String. Ensuite, créez trois structures publiques — Dog, Cat et Bird — chacune avec un champ public name (String). Implémentez le trait Speak pour chaque animal avec leurs cris caractéristiques :
    • Dog doit retourner "{name} says: Woof!"
    • Cat doit retourner "{name} says: Meow!"
    • Bird doit retourner "{name} says: Tweet!"
  • main.rs : Importez votre module animals et créez un zoo ! Construisez un Vec<Box<dyn Speak>> contenant un spécimen de chaque type d'animal en utilisant les entrées fournies. Ajoutez-les dans l'ordre : Dog en premier, puis Cat, puis Bird. Enfin, parcourez votre zoo et affichez le cri de chaque animal sur sa propre ligne.

Ce défi démontre la véritable puissance des objets de trait — trois types d'animaux complètement différents vivant ensemble dans une seule collection, chacun répondant au même appel speak() avec son propre comportement unique.

Votre sortie doit afficher chaque animal s'exprimant dans l'ordre :

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

Par exemple, avec les entrées Rex, Whiskers et Tweety :

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

Vous recevrez trois entrées : le nom du chien, le nom du chat et le nom de l'oiseau.

Essayez vous-même

mod animals;

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

fn main() {
    // Lire les noms des animaux en entrée
    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: Créer un Vec<Box<dyn Speak>> nommé zoo
    // Ajouter les animaux dans l'ordre : Dog d'abord, puis Cat, puis Bird

    // TODO: Parcourir le zoo et afficher le cri de chaque animal
}

Toutes les leçons de Object Oriented Programming