Riepilogo - Lettore multimediale
Fa parte della sezione Programmazione orientata agli oggetti del percorso Rust di Coddy. Lezione 34 di 61.
Sfida
FacileCostruiamo un semplice sistema di riproduzione multimediale che dimostri come diversi tipi di media possano condividere un’interfaccia comune tramite i trait!
Organizzerai il codice in tre file:
playable.rs: Definisci un trait pubblicoPlayablecon un metodoplay(&self)che stampa un risultato quando viene chiamato. Questo trait rappresenta la funzionalità condivisa da tutti i tipi di media.media.rs: Crea due struct pubbliche che implementano il tuo trait:Audio: con un campo pubblicotitle(String) che stampaPlaying audio: {title}quando viene riprodottoVideo: con un campo pubblicotitle(String) che stampaPlaying video: {title}quando viene riprodotto
main.rs: Riunisci i tuoi moduli e crea istanze di entrambi i tipi di media usando gli input forniti. Chiama il metodoplaysu ciascuno per dimostrare come lo stesso trait produca risultati diversi in base al tipo di media.
Il tuo output dovrebbe seguire questo formato:
Playing audio: {audio_title}
Playing video: {video_title}Per esempio, con gli input Bohemian Rhapsody e The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixRiceverai due input: un titolo audio e un titolo video.
Provalo tu
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Leggi l'input
let mut audio_title = String::new();
std::io::stdin().read_line(&mut audio_title).expect("Failed to read line");
let audio_title = audio_title.trim().to_string();
let mut video_title = String::new();
std::io::stdin().read_line(&mut video_title).expect("Failed to read line");
let video_title = video_title.trim().to_string();
// TODO: Crea un'istanza di Audio con audio_title
// TODO: Crea un'istanza di Video con video_title
// TODO: Chiama play() su entrambe le istanze
}
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 multimedialeEsercitati da solo: Compilatore Rust online