Php: Будильник

PHP: Полиморфизм 5 сообщений
Обновлено: 04 мая, 12:32
59
Студентов
77%
Завершения

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

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() - при вызове, увеличивает время на одну минуту. Если новое время совпало со временем на будильнике, то часы переключаются в режим срабатывания будильника (bell).
  • isAlarmOn() - показывает включен ли режим будильника
  • isAlarmTime() - возвращает true, если время на часах совпадает со временем на будильнике
  • getMinutes() - возвращает минуты, установленные на часах
  • getHours() - возвращает часы, установленные на часах
  • getAlarmMinutes() - возвращает минуты, установленные на будильнике
  • getAlarmHours() - возвращает часы, установленные на будильнике
  • getCurrentMode() - возвращает текущий режим (alarm | clock | bell)

Основной спецификацией к данной задачe нужно считать тесты.

AlarmClock.php

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

States/AlarmState.php, States/BellState.php, States/ClockState.php

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

Для полного доступа к испытанию нужен базовый план

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

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов