Zusammenfassung – Media Player
Teil des Abschnitts Objektorientierte Programmierung der Rust-Journey von Coddy. Lektion 34 von 61.
Aufgabe
EinfachErstellen wir ein einfaches Mediaplayer-System, das veranschaulicht, wie verschiedene Medientypen über Traits eine gemeinsame Schnittstelle nutzen können!
Du organisierst deinen Code über drei Dateien:
playable.rs: Definiere ein öffentlichesPlayable-Trait mit einerplay(&self)-Methode, die bei ihrem Aufruf eine Ausgabe ausgibt. Dieses Trait stellt die gemeinsame Fähigkeit dar, über die alle Medientypen verfügen werden.media.rs: Erstelle zwei öffentliche Structs, die dein Trait implementieren:Audio: mit einem öffentlichentitle-Feld (String), das bei der WiedergabePlaying audio: {title}ausgibtVideo: mit einem öffentlichentitle-Feld (String), das bei der WiedergabePlaying video: {title}ausgibt
main.rs: Führe deine Module zusammen und erstelle mithilfe der bereitgestellten Eingaben Instanzen beider Medientypen. Rufe für jeden dieplay-Methode auf, um zu zeigen, wie dasselbe Trait abhängig vom Medientyp unterschiedliche Ausgaben erzeugt.
Deine Ausgabe sollte diesem Format entsprechen:
Playing audio: {audio_title}
Playing video: {video_title}Beispielsweise mit den Eingaben Bohemian Rhapsody und The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixDu erhältst 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() auf beiden Instanzen auf
}
Alle Lektionen in Objektorientierte Programmierung
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Übe selbstständig: Online-Rust-Compiler