Powtórzenie — odtwarzacz multimedialny
Część sekcji Programowanie obiektowe ścieżki Rust w Coddy. Lekcja 34 z 61.
Wyzwanie
ŁatwyZbudujmy prosty system odtwarzacza multimediów, który pokazuje, jak różne typy mediów mogą współdzielić wspólny interfejs za pomocą traitów!
Uporządkujesz kod w trzech plikach:
playable.rs: Zdefiniuj publiczny traitPlayablez metodąplay(&self), która wyświetla wynik po wywołaniu. Ten trait reprezentuje wspólną funkcjonalność wszystkich typów mediów.media.rs: Utwórz dwie publiczne struktury implementujące ten trait:Audio: z publicznym polemtitle(String), która po odtworzeniu wyświetlaPlaying audio: {title}Video: z publicznym polemtitle(String), która po odtworzeniu wyświetlaPlaying video: {title}
main.rs: Połącz moduły i utwórz instancje obu typów mediów, korzystając z podanych danych wejściowych. Wywołaj metodęplaydla każdej z nich, aby pokazać, jak ten sam trait generuje różne wyniki w zależności od typu medium.
Wynik powinien mieć następujący format:
Playing audio: {audio_title}
Playing video: {video_title}Na przykład dla danych wejściowych Bohemian Rhapsody i The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixOtrzymasz dwa dane wejściowe: tytuł audio i tytuł wideo.
Spróbuj swoich sił
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Wczytaj dane wejściowe
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: Utwórz instancję Audio z audio_title
// TODO: Utwórz instancję Video z video_title
// TODO: Wywołaj play() na obu instancjach
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Metody i zachowanie
Wprowadzenie do bloków implementacjiParametr selfMetody modyfikująceFunkcje powiązaneWiele bloków implementacjiŁańcuchowe wywoływanie metodPowtórzenie — działania na prostokącie4Projekt: Wirtualne zwierzątko
Definiowanie zwierzątkaKarmienie zwierzątka7Standardowe cechy
Cecha DebugCecha DisplayClone i CopyCechy równościPowtórka – punkt do wydrukowania10Projekt: System dokumentów
Trait DrawKomponent tekstowy2Hermetyzacja i moduły
Podstawy modułówSłowo kluczowe publicPola prywatneGetterySetteryPodsumowanie — bezpieczna skrytka5Typy generyczne
Struktury generyczneMetody generyczneWiele typów generycznychFunkcje generycznePodsumowanie – punkt współrzędnych8Cechy jako ograniczenia
Składnia ograniczeń cechWiele ograniczeńKlauzula whereZwracanie typów z użyciem cechPodsumowanie — generyczna drukarka11Wzorce projektowe w Rust
Wzorzec NewtypeKompozycjaTrait DropFrom i IntoPodsumowanie — atrapowy inteligentny wskaźnik3Zaawansowane typy wyliczeniowe
Typy wyliczeniowe z danymiMetody typów wyliczeniowychDopasowywanie wariantów danychTyp wyliczeniowy Option — powtórzeniePodsumowanie — typ wyliczeniowy Shape6Definiowanie cech
Czym jest cecha?Implementowanie cechImplementacje domyślneNadpisywanie wartości domyślnychCechy z parametramiPowtórzenie — odtwarzacz multimedialnyPoćwicz samodzielnie: Kompilator Rust online