From a699cfaba19024c25b0267b4be5ef7146bb510c9 Mon Sep 17 00:00:00 2001 From: Alexander Baranov Date: Tue, 20 Jan 2026 21:48:24 +0300 Subject: [PATCH] homework definition --- smart-house/README.md | 52 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/smart-house/README.md b/smart-house/README.md index 03badf8..8c73f3b 100644 --- a/smart-house/README.md +++ b/smart-house/README.md @@ -55,3 +55,55 @@ - Приложение-пример успешно выполняется и выводит отчёт о доме. - Команды cargo clippy и cargo fmt --check не выводят ошибок и предупреждений. - Присутствуют и успешно выполняются модульные тесты. + +## ДЗ 2026-01-20 + +Дорабатываем умный дом + +### Цель: + +Дорабатываем функционал умного дома, используя возможности стандартной библиотеки. + +### Срок: + +Сдать до: **2026-02-11** + +### Описание/Пошаговая инструкция выполнения домашнего задания: + +Добавить обработку ошибок: +- [ ] Заменить паники на возврат Option в методах получения комнаты по ключу. +- [ ] Заменить паники на возврат Option в методах получения устройства по ключу. + +Доработать хранение объектов: +- [ ] Заменить массивы устройств и комнат на ассоциативные коллекции из std. В качестве ключей использовать строки. +- [ ] Реализовать трейт Debug на всех типах. +- [ ] Добавить возможность динамически добавлять/удалять устройства в комнату. +- [ ] Добавить возможность динамически добавлять/удалять комнату в дом. +- [ ] Добавить в тип умного дома метод, позволяющий сразу получить ссылку на умное устройство. Метод принимает имя комнаты + и имя устройства. В случае, если устройство или комната не найдены, возвращать тип ошибки, сообщающий, что именно + произошло. Тип ошибки должен реализовывать трейт `std::error::Error`. +- [ ] Добавить реализации трейта `From`, позволяющие преобразовывать объекты умной розетки и умного термометра в объект + умного устройства. +- [ ] Написать макрос для упрощенного создания комнаты, принимающий пары вида (ключ, объект умной розетки) или (ключ, + объект умного термометра) и возвращающий объект комнаты, содержащей все перечисленные устройства с + соответствующими ключами. + +Доработать формирование отчёта: +- [ ] Вынести метод формирования отчёта в трейт и реализовать его на всех типах, которые возвращают отчёт: умное устройство, + комната, дом. + +Привести тесты в соответствие с новым функционалом. + +Доработать приложение-пример: +- [ ] Продемонстрировать возможность динамического добавления/удаления комнат. +- [ ] Продемонстрировать возможность динамического добавления/удаления устройств. +- [ ] Добавить функцию, которая принимает любой объект, умеющий выводить отчёт. Вывести с её помощью отчёты о доме, + отдельной комнате, отдельном устройстве. +- [ ] Продемонстрировать возможность обработки ошибок. + +**Критерии оценки**: + +- Package успешно собирается. +- Приложение-пример успешно выполняется и выводит отчёт о доме. +- Команды cargo clippy и cargo fmt --check не выводят ошибок и предупреждений. +- Присутствуют и успешно выполняются модульные тесты.