Menu
Coddy logo textTech

Récapitulatif - Gestionnaire de zoo

Fait partie de la section Programmation Orientée Objet 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 tu as appris ! Tu vas créer un système dans lequel différents animaux, chacun avec son propre cri, peuvent être stockés dans une seule collection et amenés à parler un par un.

Tu organiseras ton code dans deux fichiers :

  • animals.rs : définis un trait public Speak avec une méthode speak qui prend &self et renvoie une String. Crée ensuite trois structs publiques, Dog, Cat et Bird, chacune avec un champ public name (String). Implémente le trait Speak pour chaque animal avec son cri caractéristique :
    • Dog doit renvoyer {name} says: Woof!
    • Cat doit renvoyer {name} says: Meow!
    • Bird doit renvoyer {name} says: Tweet!
  • main.rs : ajoute ton module d’animaux et crée un zoo ! Construis un Vec<Box<dyn Speak>> contenant un animal de chaque type à l’aide des entrées fournies. Ajoute-les dans l’ordre : Dog en premier, puis Cat, puis Bird. Enfin, parcours ton zoo et affiche 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 à l’appel speak() avec son propre comportement.

Ta sortie doit afficher chaque animal en train de parler 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!

Tu recevras 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 l'entrée pour les noms des animaux
    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>> appelé zoo
    // Ajouter les animaux dans l'ordre : Dog en premier, puis Cat, puis Bird

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

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Rust en ligne