homework definition

This commit is contained in:

View File

@@ -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 не выводят ошибок и предупреждений.
- Присутствуют и успешно выполняются модульные тесты.