Итоги — Media Player
Часть раздела Объектно-ориентированное программирование путешествия по Rust на Coddy. Урок 34 из 61.
Задание
ЛегкоДавайте создадим простую систему медиаплеера, которая демонстрирует, как разные типы медиа могут использовать общий интерфейс через трейты!
Вы организуете код в трёх файлах:
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() на обоих экземплярах
}
Все уроки раздела Объектно-ориентированное программирование
1Методы и поведение
Введение в блоки реализацииПараметр SelfИзменяемые методыАссоциированные функцииНесколько блоков реализацииЦепочки вызовов методовИтоги: действия с Rectangle4Проект: Виртуальный питомец
Определение питомцаКормление питомца2Инкапсуляция и модули
Основы модулейКлючевое слово PublicПриватные поляГеттерыСеттерыИтоги — Безопасный сейф5Обобщения
Обобщённые структурыОбобщённые методыНесколько обобщённых типовОбобщённые функцииПовторение — Координатная точка8Трейты как ограничения
Синтаксис ограничений трейтовМножественные ограниченияКонструкция whereВозврат типов с трейтамиИтоги — Обобщённый принтер11Паттерны проектирования в Rust
Паттерн NewtypeКомпозицияТрейт DropFrom и IntoИтоги — Мок-объект Smart Pointer3Продвинутые перечисления
Перечисления с даннымиМетоды в перечисленияхСопоставление вариантов с даннымиСнова об Option EnumИтоги — перечисление Shape6Определение трейтов
Что такое трейт?Реализация трейтовРеализации по умолчаниюПереопределение реализаций по умолчаниюТрейты с параметрамиИтоги — Media PlayerПотренируйтесь самостоятельно: Онлайн-компилятор Rust