Skip to content

9 «Объектно-ориентированное программирование и проектирование» 10 «Объекты с внутренним состоянием, управление состоянием при тестировании»

LevVolkov/Radio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

(9 - 10) 9. Домашнее задание к занятию «Объектно-ориентированное программирование и проектирование»

Цель задания

  1. Научиться проектировать объекты, имеющие и поля, и методы.

Инструкция к заданию

  1. Скачайте и установите профессиональный редактор кода Intellij Idea Community Version.
  2. Откройте IDEA и создайте и настройте новый Maven-проект. Под каждую задачу следует создавать отдельный проект, если обратное не сказано в условии.
  3. Создайте пустой репозиторий на GitHub и свяжите его с папкой вашего проекта, а не с какой-либо другой.
  4. Правильно настройте репозиторий в плане .gitignore. Проигнорируйте папки .idea и target (раньше была out) и .iml-файл — их в репозитории быть не должно.
  5. Закоммитьте и запушьте созданный проект на ГитХаб, настройте GitHub Actions, сделайте git pull.
  6. Выполните в IDEA требуемую задачу согласно условию.
  7. Проверьте соблюдение правил форматирования кода.
  8. Убедитесь, что при запуске mvn clean verify (раньше было mvn clean test) все тесты запускаются, проходят, а сборка завершается успешно.
  9. Закоммитьте и отправьте в репозиторий содержимое папки проекта.
  10. Убедитесь, что CI запустился на последнем коммите и завершился успешно — появилась зелёная галочка.

Материалы, которые пригодятся для выполнения задания

  1. Как создать Maven-проект в IDEA?
  2. Как отформатировать код в Java?
  3. Как настроить CI на основе GitHub Actions?

Задание 1 — обязательное

В рамках проекта по созданию «Умного дома» у нас появился очень важный клиент, который хочет кастомную доработку: он очень любит радио, поэтому нам нужно научиться управлять радио.

Что нужно сделать: по аналогии с кондиционером создайте класс Radio, в котором храните следующие поля — данные, которые будут помнить о себе объекты радио:

  • номер текущей радиостанции,
  • громкость звука.

Требования к работе с радиостанциями

  1. Номер текущей радиостанции может принимать значения только в пределах от 0 до 9.
  2. Если текущая радиостанция 9 и клиент нажал на кнопку next (=вызвал одноимённый метод next, с англ. — следующая) на пульте, то текущей должна стать нулевая. В остальных случаях при нажатии на эту же кнопку радио переключается просто на следующую станцию.
  3. Если текущая радиостанция 0 и клиент нажал на кнопку prev (=вызвал одноимённый метод prev, с англ. — предыдущая) на пульте, то текущей должна стать девятая. В остальных случаях радио переключается просто на предыдущую станцию.
  4. Клиент должен иметь возможность выставлять номер радиостанции через прямое указание её номера. Для этого подойдёт один обычный метод-сеттер с проверкой на допустимость номера станции.

Требования к работе с уровнем громкости звука

  1. Клиент должен иметь возможность увеличивать и уменьшать уровень громкости звука в пределах от 0 до 100.
  2. Если уровень громкости звука достиг максимального значения, то дальнейшее нажатие на + (=вызов метода увеличения громкости на один, придумайте название сами) не должно ни к чему приводить.
  3. Если уровень громкости звука достиг минимального значения, то дальнейшее нажатие на - (=вызов метода уменьшения громкости на один, придумайте название сами) не должно ни к чему приводить.

Пример реализации метода увеличения звука на 1. Остальные методы переключения на 1 текущей станции или звука сделайте самостоятельно по аналогии:

public class Radio {
  ...
  
  public void increaseVolume() {
    if (currentVolume < 100) {
      currentVolume = currentVolume + 1;
    }
  }
}

К созданному классу Radio напишите тесты, добейтесь покрытия на 100% по бранчам, обрушать сборку по покрытию при этом не нужно. То есть настройте проект в режиме генерации отчётов. Для хорошего тестирования рекомендуем вам провести тест-дизайн перед написанием тестов, так вы с большей вероятностью найдёте дефекты в вашем коде.


Правила приёма работы

Прикреплена одна ссылка на публичный репозиторий с решением задачи.


10. Домашнее задание к занятию «Объекты с внутренним состоянием, управление состоянием при тестировании»

Цель задания

  1. Научиться управлять начальным состоянием объектов через конструкторы.

Инструкция к заданию

  1. Скачайте и установите профессиональный редактор кода Intellij Idea Community Version.
  2. Возьмите проект с домашнего задания про Радио и создайте новую ветку flexible
  3. Выполните в IDEA требуемую задачу согласно условию.
  4. Проверьте соблюдение правил форматирования кода.
  5. Убедитесь, что при запуске mvn clean verify (раньше было mvn clean test) все тесты запускаются, проходят, а сборка завершается успешно.
  6. Закоммитьте и отправьте в репозиторий содержимое папки проекта.
  7. Убедитесь, что CI запустился на последнем коммите и завершился успешно — появилась зелёная галочка.

Материалы, которые пригодятся для выполнения задания

  1. Как создать Maven-проект в IDEA?
  2. Как отформатировать код в Java?
  3. Как настроить CI на основе Github Actions?

Задание 1 — обязательное

Проект «Умный дом» развивается, и решено улучшить часть, отвечающую за радио.

Что нужно сделать: внедрить изменения в сам класс и тесты.

Как это сделать:

  • создайте в Git в том же репозитории новую ветку flexible — возьмите проект к ДЗ про радио, в который уже подключены CI и нужные плагины;
  • модифицируете класс Radio под новые требования;
  • делаете тест-дизайн новой версии класса, модифицируете или добавляете новые тесты;
  • пушите всё на GitHub и делаете pull request, мёржить его не нужно;
  • удостоверьтесь, что все тесты в CI запускаются на pull request и проходят;
  • ссылку на pull request пришлите в качестве результата ДЗ.

Требования к работе с радиостанциями

  1. Можно задавать количество радиостанций при создании объекта, по умолчанию — 10.
  2. Номер текущей радиостанции изменяется в пределах от 0 до количества радиостанций не включительно. То есть если станций 10, то номер последней — 9.
  3. Если текущая радиостанция — максимальная, и клиент нажал на кнопку next на пульте, то текущей должна стать нулевая.
  4. Если текущая радиостанция — 0, и клиент нажал на кнопку prev на пульте, то текущей должна стать максимальная.
  5. Всё так же должен присутствовать сеттер текущей станции.

Теперь объекты радио в своём поле будут хранить и количество станций, заданное при создании объекта радио. Для этого вам понадобится создать свой конструктор для класса Radio с одним параметром, принимающим желаемое количество радиостанций и сохраняющим это значение у себя в поле. Ещё один конструктор потребуется без параметров, чтобы, если пользователь нашего класса не захотел указывать количество радиостанций, мы бы выставили их количество в 10 штук, как указано в требованиях, «по умолчанию — 10».

Внимание: конструктором с параметром задаётся именно количество радиостанций, а не номер максимальной, это разные вещи — если количество станций, например, 30, то последней будет номер 29, так как нумеруем мы с нуля.

Требования к работе с уровнем громкости звука:

  • клиент должен иметь возможность увеличивать и уменьшать уровень громкости звука в пределах от 0 до 100;
  • если уровень громкости звука достиг максимального значения, то дальнейшее нажатие на + не должно ни к чему приводить;
  • если уровень громкости звука достиг минимального значения, то дальнейшее нажатие на - не должно ни к чему приводить.

Итог: ссылку на pull request пришлите в качестве результата ДЗ.


Правила приёма работы

Прикреплено по ссылке на пул-реквест для каждой отправляемой задачи на проверку.


Критерии оценки

  1. В каждом репозитории размещено содержимое папки проекта IDEA. Корнем репозитория должна именно папка проекта — не папка src, не папка внутри которой лежит папка проекта. В корне репозитория должна лежать сразу папка src.
  2. Есть файл .gitignore, игнорирующий ненужные файлы и папки, которые должны отсутствовать в репозитории. Если они присутствуют, их нужно оттуда удалить.
  3. Программа соответствует всем требованиям из условия задачи.
  4. Программа использует только те инструменты языка, которые мы проходили или которые прямо разрешены условием задачи.
  5. Программа работает правильно на всех примерах из условия.
  6. Программный код отформатирован и соответствует пройденным требованиям к качеству кода.
  7. При запуске mvn clean verify тесты запускаются и проходят, а сборка завершается успешно.
  8. В репозитории настроен CI на основе GitHub Actions, и он успешно прошёл на последнем коммите.
  9. Программа спроектирована достаточно логично и правильно, не противоречит общепринятым в производстве практикам и традициям.
  10. При наличии недочётов, в зависимости от их серьёзности и количества, работа может быть отправлена на доработку или принята — решение принимается на основе экспертной оценки работы.

About

9 «Объектно-ориентированное программирование и проектирование» 10 «Объекты с внутренним состоянием, управление состоянием при тестировании»

Topics

Resources

Stars

Watchers

Forks

Languages