Итоги — Media Player
Часть раздела Object Oriented Programming путешествия по Rust на Coddy. Урок 34 из 61.
Задание
ЛегкоДавайте создадим простую систему медиаплеера, которая демонстрирует, как различные типы медиа могут использовать общий интерфейс через типажи (traits)!
Вы организуете свой код в трех файлах:
playable.rs: Определите публичный типажPlayableс методомplay(&self), который выводит результат при вызове. Этот типаж представляет собой общую возможность, которой будут обладать все типы медиа.media.rs: Создайте две публичные структуры, реализующие ваш типаж:Audio— с публичным полемtitle(String), которое при воспроизведении выводитPlaying audio: {title}Video— с публичным полемtitle(String), которое при воспроизведении выводитPlaying video: {title}
main.rs: Объедините ваши модули и создайте экземпляры обоих типов медиа, используя предоставленные входные данные. Вызовите методplayдля каждого из них, чтобы продемонстрировать, как один и тот же типаж выдает разные результаты в зависимости от типа медиа.
Ваш вывод должен соответствовать следующему формату:
Playing audio: {audio_title}
Playing video: {video_title}Например, при входных данных Bohemian Rhapsody и The Matrix:
Playing audio: Bohemian Rhapsody
Playing video: The MatrixВы получите два входных значения: название аудио и название видео.
Попробуйте сами
mod playable;
mod media;
use media::{Audio, Video};
use playable::Playable;
fn main() {
// Чтение входных данных
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: Создать экземпляр Audio с audio_title
// TODO: Создать экземпляр Video с video_title
// TODO: Вызвать play() для обоих экземпляров
}
Все уроки раздела Object Oriented Programming
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media PlayerПотренируйтесь самостоятельно: Онлайн-компилятор Rust