Récapitulatif - Lecteur multimédia
Fait partie de la section Programmation Orientée Objet du Journey Rust de Coddy. Leçon 34 sur 61.
Défi
FacileConstruisons un système de lecteur multimédia simple qui montre comment différents types de médias peuvent partager une interface commune grâce aux traits !
Vous organiserez votre code sur trois fichiers :
playable.rs: définissez un trait publicPlayableavec une méthodeplay(&self)qui affiche un résultat lorsqu'elle est appelée. Ce trait représente la capacité commune que tous les types de médias posséderont.media.rs: créez deux structures publiques qui implémentent votre trait :Audio: avec un champ publictitle(String) qui affichePlaying audio: {title}lors de la lectureVideo: avec un champ publictitle(String) qui affichePlaying video: {title}lors de la lecture
main.rs: réunissez vos modules et créez des instances des deux types de médias à l'aide des entrées fournies. Appelez la méthodeplaysur chacune d'elles afin de montrer comment le même trait produit des résultats différents selon le type de média.
Votre sortie doit suivre ce format :
Playing audio: {audio_title}
Playing video: {video_title}Par exemple, avec les entrées Bohemian Rhapsody et The Matrix :
Playing audio: Bohemian Rhapsody
Playing video: The MatrixVous recevrez deux entrées : un titre audio et un titre vidéo.
REQUIRED OUTPUT FORMAT:Essayez vous-même
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Lire l'entrée
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: Créer une instance Audio avec audio_title
// TODO: Créer une instance Video avec video_title
// TODO: Appeler play() sur les deux instances
}
Toutes les leçons de Programmation Orientée Objet
1Méthodes et comportement
Introduction aux blocs d'implémentationLe paramètre SelfMéthodes mutablesFonctions associéesBlocs d'implémentation multiplesChaînage de méthodesRécapitulatif - Actions sur le rectangle4Projet : Animal virtuel
Définir l'animalNourrir l'animal7Traits standards
Le trait DebugLe trait DisplayClone et CopyLes traits d'égalitéRécapitulatif - Point affichable10Projet : Système de documents
Le trait DrawComposant texte2Encapsulation et modules
Bases des modulesLe mot-clé publicChamps privésGettersSettersRécapitulatif - Casier sécurisé5Généricité
Structures génériquesMéthodes génériquesPlusieurs types génériquesFonctions génériquesRécapitulatif - Point de coordonnées8Les Traits comme contraintes
Syntaxe des contraintes de traitContraintes multiplesLa clause whereRetourner des types avec des traitsRécapitulatif - Afficheur générique11Design Patterns en Rust
Le pattern NewtypeCompositionLe trait DropFrom et IntoRécapitulatif - Mock de Smart Pointer3Enums avancées
Enums avec donnéesMéthodes sur les EnumsMatching des variantes de donnéesL'Enum Option revisitéeRécapitulatif - Enum Shape6Définition des Traits
Qu'est-ce qu'un Trait ?Implémenter des TraitsImplémentations par défautRedéfinir les comportements par défautTraits avec paramètresRécapitulatif - Lecteur multimédiaEntraînez-vous par vous-même : Compilateur Rust en ligne