Лабораторный практикум №2

Проект AutomataDemo

Разработать класс Automata (автомат), являющийся упрощённой моделью автомата по продаже горячих напитков.

  • Изучить принцип использования автомата по продаже горячих напитков (чай, кофе, молоко и т.д.) и описать его работу в виде диаграммы состояний.
  • Создать перечислимый тип STATES для задания состояний автомата
  • Создать класс Automata, включить в него переменные:
    • cash - для хранения текущей суммы;
    • menu - строки с названиями напитков (может подгружаться из файла);
    • prices - цены напитков (соответствует массиву menu);
    • state - текущее состояние автомата;

В качестве основной структуры хранения данных в автомате лучше использовать ArrayList.

Включить в класс Automata следующие методы:

  • конструктор
  • on() - включение автомата;
  • off() - выключение автомата;
  • coin() - занесение денег на счёт пользователем;
  • getMenu() - отображение меню с напитками и ценами для пользователя;
  • getState() - отображение текущего состояния для пользователя;
  • choice() - выбор напитка пользователем;
  • check() - проверка наличия необходимой суммы;
  • cancel() - отмена сеанса обслуживания пользователем;
  • cook() - имитация процесса приготовления напитка;
  • finish() - завершение обслуживания пользователя.

Список методов может быть изменён по желанию разработчика.

Работа автомата должна предполагать отсутствие привязки к устройству ввода/вывода, то есть внутри класса не должно быть обращения к System.out.

Работа каждого метода должна начинаться с проверки текущего состояния автомата. Если состояние подходит, то выполняется предусмотренный алгоритм. Если состояние не подходит, то автомат игнорирует действие.

Предлагается следующая диаграмма состояний (state diagram), отражающая смену состояний и вызовы методов класса

automata.png

Написать демонстрационную программу работы автомата в виде сценария

Демонстрационный сценарий предполагает имитацию сеанса с пользователем. Например, это могут быть следующие шаги:

  • включение автомата
  • занесение некоторой суммы на счет
  • выбор пункта меню
  • изучение состояния автомата после приготовления/отмены

Написать тестовый набор для проверки состояний автомата и правильности перехода из одного состояния в другое

Emacs 26.1 (Org mode 9.1.9)

Validate