Итоги — 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