Будильник Испытание курса: JS: Полиморфизм

Представьте себе будильник:

alarm clock

Пусть у него имеются три кнопки. H - кнопка для увеличения часа на единицу, M - для увеличения минуты на единицу и кнопка Mode, которая переключает часы в режим настройки будильника. В этом режиме на экране отображается время срабатывания будильника, а кнопки H и M устанавливают не текущее время, а время срабатывания будильника. Повторное нажатие кнопки Mode возвращает часы в обычный режим. Кроме того, затяжное нажатие на кнопку Mode приводит к тому, что будильник активируется. Такое же нажатие ещё раз отключает будильник.

После этого, если текущее время совпадает со временем будильника, включается звонок, который отключается либо нажатием кнопки Mode, либо самопроизвольно через минуту. Кнопки H и M в режиме звонка (когда сработал будильник) не активны.

Поведение часов с будильником уже является сложным, поскольку одни и те же входные воздействия (нажатие одних и тех же кнопок) в зависимости от режима инициируют различные действия.

В программных и программно-аппаратных вычислительных системах сущности со сложным поведением встречаются очень часто. Таким свойством обладают устройства управления, сетевые протоколы, диалоговые окна, персонажи компьютерных игр и многие другие объекты и системы.

Подведём итог. У нас есть следующие действия:

  • Установка времени
  • Установка времени срабатывания будильника
  • Включение/Выключение будильника
  • Отключение звонка будильника

При использовании кнопок H и M часы и минуты изменяются независимо, и никак друг на друга не влияют (как и в большинстве реальных будильников). То есть если происходит увеличение минут с 59 до 60 (сброс на 00), то цифра с часами остается неизменной.

Интерфейсными методами часов являются:

  • clickMode() - нажатие на кнопку Mode
  • longClickMode() - долгое нажатие на кнопку Mode
  • clickH() - нажатие на кнопку H
  • clickM() - нажатие на кнопку M
  • tick() - при вызове увеличивает время на одну минуту и, если нужно, активирует звонок будильника
  • isAlarmOn() - показывает включен ли режим будильника
  • isAlarmTime() - возвращает true, если время на часах совпадает со временем на будильнике
  • minutes() - возвращает минуты, установленные на часах
  • hours() - возвращает часы, установленные на часах
  • alarmMinutes() - возвращает минуты, установленные на будильнике
  • alarmHours() - возвращает часы, установленные на будильнике
  • getCurrentMode() - возвращает текущий режим (alarm | clock | bell)

AlarmClock.js

Реализуйте интерфейсные методы и логику работы часов.

states/AlarmState.js, states/BellState.js, states/ClockState.js

Реализуйте логику состояний.

Успешных завершений: 63%

Для полного доступа к испытанию нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, даст возможность обращаться за помощью к менторам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Последние код-ревью

Автор Дата обновления Версий
big_gun 18 нояб., 10:28 1
viktor_smorodina 14 нояб., 17:06 1
letzabelin 10 нояб., 19:42 1
mburdastyh 14 окт., 18:39 1
newsalaar 12 окт., 20:20 1