- Научиться проектировать объекты, имеющие и поля, и методы.
- Скачайте и установите профессиональный редактор кода Intellij Idea Community Version.
- Откройте IDEA и создайте и настройте новый Maven-проект. Под каждую задачу следует создавать отдельный проект, если обратное не сказано в условии.
- Создайте пустой репозиторий на GitHub и свяжите его с папкой вашего проекта, а не с какой-либо другой.
- Правильно настройте репозиторий в плане
.gitignore
. Проигнорируйте папки.idea
иtarget
(раньше былаout
) и.iml
-файл — их в репозитории быть не должно. - Закоммитьте и запушьте созданный проект на ГитХаб, настройте GitHub Actions, сделайте
git pull
. - Выполните в IDEA требуемую задачу согласно условию.
- Проверьте соблюдение правил форматирования кода.
- Убедитесь, что при запуске
mvn clean verify
(раньше былоmvn clean test
) все тесты запускаются, проходят, а сборка завершается успешно. - Закоммитьте и отправьте в репозиторий содержимое папки проекта.
- Убедитесь, что CI запустился на последнем коммите и завершился успешно — появилась зелёная галочка.
- Как создать Maven-проект в IDEA?
- Как отформатировать код в Java?
- Как настроить CI на основе GitHub Actions?
В рамках проекта по созданию «Умного дома» у нас появился очень важный клиент, который хочет кастомную доработку: он очень любит радио, поэтому нам нужно научиться управлять радио.
Что нужно сделать: по аналогии с кондиционером создайте класс Radio
, в котором храните следующие поля — данные, которые будут помнить о себе объекты радио:
- номер текущей радиостанции,
- громкость звука.
Требования к работе с радиостанциями
- Номер текущей радиостанции может принимать значения только в пределах от 0 до 9.
- Если текущая радиостанция 9 и клиент нажал на кнопку
next
(=вызвал одноимённый методnext
, с англ. — следующая) на пульте, то текущей должна стать нулевая. В остальных случаях при нажатии на эту же кнопку радио переключается просто на следующую станцию. - Если текущая радиостанция 0 и клиент нажал на кнопку
prev
(=вызвал одноимённый методprev
, с англ. — предыдущая) на пульте, то текущей должна стать девятая. В остальных случаях радио переключается просто на предыдущую станцию. - Клиент должен иметь возможность выставлять номер радиостанции через прямое указание её номера. Для этого подойдёт один обычный метод-сеттер с проверкой на допустимость номера станции.
Требования к работе с уровнем громкости звука
- Клиент должен иметь возможность увеличивать и уменьшать уровень громкости звука в пределах от 0 до 100.
- Если уровень громкости звука достиг максимального значения, то дальнейшее нажатие на
+
(=вызов метода увеличения громкости на один, придумайте название сами) не должно ни к чему приводить. - Если уровень громкости звука достиг минимального значения, то дальнейшее нажатие на
-
(=вызов метода уменьшения громкости на один, придумайте название сами) не должно ни к чему приводить.
Пример реализации метода увеличения звука на 1. Остальные методы переключения на 1 текущей станции или звука сделайте самостоятельно по аналогии:
public class Radio {
...
public void increaseVolume() {
if (currentVolume < 100) {
currentVolume = currentVolume + 1;
}
}
}
К созданному классу Radio
напишите тесты, добейтесь покрытия на 100% по бранчам, обрушать сборку по покрытию при этом не нужно. То есть настройте проект в режиме генерации отчётов.
Для хорошего тестирования рекомендуем вам провести тест-дизайн перед написанием тестов, так вы с большей вероятностью найдёте дефекты в вашем коде.
Прикреплена одна ссылка на публичный репозиторий с решением задачи.
10. Домашнее задание к занятию «Объекты с внутренним состоянием, управление состоянием при тестировании»
- Научиться управлять начальным состоянием объектов через конструкторы.
- Скачайте и установите профессиональный редактор кода Intellij Idea Community Version.
- Возьмите проект с домашнего задания про Радио и создайте новую ветку flexible
- Выполните в IDEA требуемую задачу согласно условию.
- Проверьте соблюдение правил форматирования кода.
- Убедитесь, что при запуске
mvn clean verify
(раньше былоmvn clean test
) все тесты запускаются, проходят, а сборка завершается успешно. - Закоммитьте и отправьте в репозиторий содержимое папки проекта.
- Убедитесь, что CI запустился на последнем коммите и завершился успешно — появилась зелёная галочка.
- Как создать Maven-проект в IDEA?
- Как отформатировать код в Java?
- Как настроить CI на основе Github Actions?
Проект «Умный дом» развивается, и решено улучшить часть, отвечающую за радио.
Что нужно сделать: внедрить изменения в сам класс и тесты.
Как это сделать:
- создайте в Git в том же репозитории новую ветку flexible — возьмите проект к ДЗ про радио, в который уже подключены CI и нужные плагины;
- модифицируете класс
Radio
под новые требования; - делаете тест-дизайн новой версии класса, модифицируете или добавляете новые тесты;
- пушите всё на GitHub и делаете pull request, мёржить его не нужно;
- удостоверьтесь, что все тесты в CI запускаются на pull request и проходят;
- ссылку на pull request пришлите в качестве результата ДЗ.
Требования к работе с радиостанциями
- Можно задавать количество радиостанций при создании объекта, по умолчанию — 10.
- Номер текущей радиостанции изменяется в пределах от 0 до количества радиостанций не включительно. То есть если станций 10, то номер последней — 9.
- Если текущая радиостанция — максимальная, и клиент нажал на кнопку next на пульте, то текущей должна стать нулевая.
- Если текущая радиостанция — 0, и клиент нажал на кнопку prev на пульте, то текущей должна стать максимальная.
- Всё так же должен присутствовать сеттер текущей станции.
Теперь объекты радио в своём поле будут хранить и количество станций, заданное при создании объекта радио. Для этого вам понадобится создать свой конструктор для класса Radio
с одним параметром, принимающим желаемое количество радиостанций и сохраняющим это значение у себя в поле. Ещё один конструктор потребуется без параметров, чтобы, если пользователь нашего класса не захотел указывать количество радиостанций, мы бы выставили их количество в 10 штук, как указано в требованиях, «по умолчанию — 10».
Внимание: конструктором с параметром задаётся именно количество радиостанций, а не номер максимальной, это разные вещи — если количество станций, например, 30, то последней будет номер 29, так как нумеруем мы с нуля.
Требования к работе с уровнем громкости звука:
- клиент должен иметь возможность увеличивать и уменьшать уровень громкости звука в пределах от 0 до 100;
- если уровень громкости звука достиг максимального значения, то дальнейшее нажатие на + не должно ни к чему приводить;
- если уровень громкости звука достиг минимального значения, то дальнейшее нажатие на - не должно ни к чему приводить.
Итог: ссылку на pull request пришлите в качестве результата ДЗ.
Прикреплено по ссылке на пул-реквест для каждой отправляемой задачи на проверку.
- В каждом репозитории размещено содержимое папки проекта IDEA. Корнем репозитория должна именно папка проекта — не папка
src
, не папка внутри которой лежит папка проекта. В корне репозитория должна лежать сразу папкаsrc
. - Есть файл
.gitignore
, игнорирующий ненужные файлы и папки, которые должны отсутствовать в репозитории. Если они присутствуют, их нужно оттуда удалить. - Программа соответствует всем требованиям из условия задачи.
- Программа использует только те инструменты языка, которые мы проходили или которые прямо разрешены условием задачи.
- Программа работает правильно на всех примерах из условия.
- Программный код отформатирован и соответствует пройденным требованиям к качеству кода.
- При запуске
mvn clean verify
тесты запускаются и проходят, а сборка завершается успешно. - В репозитории настроен CI на основе GitHub Actions, и он успешно прошёл на последнем коммите.
- Программа спроектирована достаточно логично и правильно, не противоречит общепринятым в производстве практикам и традициям.
- При наличии недочётов, в зависимости от их серьёзности и количества, работа может быть отправлена на доработку или принята — решение принимается на основе экспертной оценки работы.