Riepilogo - Gestore dello zoo
Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 48 di 61.
Sfida
FacileCostruiamo 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 pubblicoSpeakcon un metodospeakche accetta&selfe restituisce unaString. Poi crea tre struct pubbliche,Dog,CateBird, ciascuna con un campo pubbliconame(String). Implementa il traitSpeakper 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!
- Dog deve restituire
main.rs: Includi il modulo degli animali e crea uno zoo! Crea unaVec<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
1Metodi e comportamento
Introduzione ai blocchi implIl parametro selfMetodi mutabiliFunzioni associateBlocchi impl multipliConcatenamento di metodiRiepilogo - Azioni sul rettangolo4Progetto: animale domestico virtuale
Definire l'animaleNutrire l'animale7Trait standard
Il trait DebugIl trait DisplayClone e CopyTrait di uguaglianzaRiepilogo - Punto stampabile10Progetto: sistema di documenti
Il trait DrawComponente di testo2Incapsulamento e moduli
Nozioni di base sui moduliLa parola chiave publicCampi privatiGetterSetterRiepilogo - Armadietto sicuro5Generics
Struct genericheMetodi genericiPiù tipi genericiFunzioni genericheRipasso - Punto di coordinate8I Trait come vincoli
Sintassi dei vincoli sui traitVincoli multipliLa clausola whereRestituire tipi con i traitRiepilogo - Stampante generica11Modelli di progettazione in Rust
Pattern NewtypeComposizioneIl trait DropFrom e IntoRipasso - Mock con smart pointer3Enumerazioni avanzate
Enumerazioni con datiMetodi sulle enumerazioniCorrispondenza delle varianti con datiL'enumerazione Option ripresaRiepilogo - enumerazione Shape6Definizione dei trait
Che cos’è un trait?Implementare i traitImplementazioni predefiniteSovrascrivere le implementazioni predefiniteTrait con parametriRiepilogo - Lettore multimediale9Oggetti trait
Dispatch dinamicoVettori di traitIterare sugli oggetti traitRiepilogo - Gestore dello zooEsercitati da solo: Compilatore Rust online