Menu
Coddy logo textTech

Riepilogo - Gestore dello zoo

Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 48 di 61.

challenge icon

Sfida

Facile

Costruiamo un gestore di uno zoo che riunisca tutti i concetti sugli oggetti trait che hai imparato! Creerai un sistema in cui animali diversi, ciascuno con il proprio verso caratteristico, possono essere memorizzati in un’unica raccolta e fatti parlare uno alla volta.

Organizzerai il codice in due file:

  • animals.rs: Definisci un trait pubblico Speak con un metodo speak che accetta &self e restituisce una String. Poi crea tre struct pubbliche, Dog, Cat e Bird, ciascuna con un campo pubblico name (String). Implementa il trait Speak per ogni animale, assegnandogli il suo verso caratteristico:
    • Dog deve restituire {name} says: Woof!
    • Cat deve restituire {name} says: Meow!
    • Bird deve restituire {name} says: Tweet!
  • main.rs: Includi il modulo degli animali e crea uno zoo! Crea una Vec<Box<dyn Speak>> contenente un animale per ciascun tipo, usando gli input forniti. Aggiungili in questo ordine: prima Dog, poi Cat, infine Bird. Infine, scorri lo zoo e stampa il verso di ogni animale su una riga separata.

Questa sfida dimostra la vera potenza degli oggetti trait: tre tipi di animali completamente diversi convivono in un’unica raccolta e rispondono ciascuno alla stessa chiamata speak() con un comportamento unico.

L'output dovrebbe mostrare gli animali mentre parlano, in ordine:

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

Per esempio, con gli input Rex, Whiskers e Tweety:

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

Riceverai tre input: il nome del cane, il nome del gatto e il nome dell'uccello.

Provalo tu

mod animals;

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

fn main() {
    // Leggi i nomi degli animali dall'input
    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: Crea un Vec<Box<dyn Speak>> chiamato zoo
    // Aggiungi gli animali in ordine: prima Dog, poi Cat, infine Bird

    // TODO: Scorri zoo e stampa il verso di ogni animale
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Rust online