Zusammenfassung – Media Player
Teil des Abschnitts Object Oriented Programming der Rust-Journey von Coddy — Lektion 34 von 61.
Aufgabe
EinfachLassen Sie uns ein einfaches Media-Player-System bauen, das zeigt, wie verschiedene Medientypen eine gemeinsame Schnittstelle durch Traits teilen können!
Sie werden Ihren Code über drei Dateien organisieren:
playable.rs: Definieren Sie einen öffentlichenPlayable-Trait mit einerplay(&self)-Methode, die bei Aufruf eine Ausgabe ausgibt. Dieser Trait repräsentiert die gemeinsame Fähigkeit, die alle Medientypen haben werden.media.rs: Erstellen Sie zwei öffentliche Structs, die Ihren Trait implementieren:Audio— mit einem öffentlichentitle-Feld (String), dasPlaying audio: {title}ausgibt, wenn es abgespielt wirdVideo— mit einem öffentlichentitle-Feld (String), dasPlaying video: {title}ausgibt, wenn es abgespielt wird
main.rs: Führen Sie Ihre Module zusammen und erstellen Sie Instanzen beider Medientypen unter Verwendung der bereitgestellten Eingaben. Rufen Sie dieplay-Methode für jedes auf, um zu demonstrieren, wie derselbe Trait je nach Medientyp unterschiedliche Ausgaben erzeugt.
Ihre Ausgabe sollte diesem Format folgen:
Playing audio: {audio_title}
Playing video: {video_title}Zum Beispiel mit den Eingaben Bohemian Rhapsody und The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixSie erhalten zwei Eingaben: einen Audiotitel und einen Videotitel.
Probier es selbst
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Eingabe lesen
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: Erstelle eine Audio-Instanz mit audio_title
// TODO: Erstelle eine Video-Instanz mit video_title
// TODO: Rufe play() für beide Instanzen auf
}
Alle Lektionen in Object Oriented Programming
1Methoden und Verhalten
Einführung in ImplementierungsblöckeDer Self-ParameterVeränderliche MethodenAssoziierte FunktionenMehrere ImplementierungsblöckeMethod ChainingRückblick – Rechteck-Aktionen4Projekt: Virtuelles Haustier
Das Haustier definierenDas Haustier füttern7Standard-Traits
Das Debug-TraitDas Display-TraitClone und CopyGleichheits-TraitsZusammenfassung – Druckbarer Punkt10Projekt: Dokumentensystem
Das Draw-TraitText-Komponente2Kapselung und Module
Grundlagen der ModuleDas Public-SchlüsselwortPrivate FelderGetterSetterWiederholung – Sicherer Tresor5Generics
Generische StructsGenerische MethodenMehrere generische TypenGenerische FunktionenZusammenfassung - Koordinatenpunkt8Traits als Einschränkungen
Syntax für Trait BoundsMehrfache BoundsDie Where-KlauselTypen mit Traits zurückgebenRückblick – Generischer Drucker11Design Patterns in Rust
Newtype-PatternKompositionDas Drop-TraitFrom und IntoZusammenfassung – Smart Pointer Mock3Fortgeschrittene Enums
Enums mit DatenMethoden für EnumsMatching von DatenvariantenDas Option-Enum erneut betrachtetZusammenfassung – Shape-Enum6Definition von Traits
Was ist ein Trait?Traits implementierenStandardimplementierungenStandardimplementierungen überschreibenTraits mit ParameternZusammenfassung – Media Player