Приложение "модель"
Перечень событий, изменяющих состояние модели ПрО.
Приведём список событий, изменяющих состояние модели рассматриваемой предметной области.
Открытие/закрытие кассы;
Появление нового клиента (изменяет количество человек в очереди);
Обслуживание клиента (изменяет количество человек в очереди и счётчик обслуженных клиентов);
Событие, когда клиент не попадает ни в одну из очередей (все очереди заполнены) – увеличивает счётчик количества потерь;
Событие, когда клиент попадает в одну из очередей – увеличивает счётчик у очереди;
Открытие/закрытие того или иного окна кассы (увеличивает количество человек в очередях к другим окнам и также увеличивает счётчик потерь, если очереди заполняются, а необслуженные клиенты ещё остаются).
Диаграммы состояний классов модели ПрО.
Рисунок 9 – Диаграмма состояний для Кассы
Заголовочные файлы (h-файлы) классов модели ПрО.
Ниже представлено содержание h-файлов интерфейсных классов. Для начала рассмотрим файл box.h.
Класс Key имеет следующую структуру:
- bool state – атрибут состояния ключа;
- Key() – конструктор класса;
- Key(const Key&) – второй конструктор класса;
- Key& operator=(const Key&) – перегрузка оператора присваивания;
- inline bool getState() – встроенный метод получения состояния ключа;
- bool control() – метод изменения состояния ключа.
Класс Box имеет следующий ряд свойств:
- Key boxKey – атрибут, хранящий в себе информацию о ключе;
- int counter – атрибут-счётчик обслуженных клиентов;
- Box() – конструктор класса;
- Box(const Box&) – второй конструктор класса;
- Box& operator=(const Box&) – перегрузка оператора присваивания;
- BoxState getState() – метод выявления состояния окна;
- bool control() – метод изменения состояния окна;
- void controlCount() – метод обнуления счётчика;
- void tact() – метод-слот, который, согласно таймеру, увеличивает счётчик на единицу;
- void service() - метод-слот, который, согласно таймеру, уменьшает счётчик на единицу.
Теперь рассмотрим файл cash.h и его класс cash, который имеет следующую структуру:
- static CashParam defaultParam – атрибут, хранящий в себе данные параметров кассы по умолчанию;
- CashParam currentParam – атрибут, хранящий в себе текущие данные параметров кассы;
- QTimer *timer – атрибут-таймер прихода новых клиентов;
- QTimer* serviceTimer – атрибут-таймер ухода обслуженных клиентов;
- int countOfLost – атрибут-счётчик потерь;
- int countOfServ – атрибут-счётчик обслуженных клиентов;
- Key cashKey – атрибут-ключ кассы;
- QVector<Box> boxes – атрибут-вектор окон;
- void configure(int) – метод задания окон в кассе;
- void reconfigure(int) – метод удаления окон из кассы;
- void sendState() – метод, формирующий текущее состояние кассы;
- int indexOfMinQ(int*) – метод поиска номера окна, где меньше всего людей в очереди;
- bool isThereFree() – метод поиска ответа на вопрос "Есть ли свободные места в очередях к какому-либо окну кассы?";
- void tact() – метод-слот, который случайным образом "перебрасывает" людей из одной очереди в другую;
- void service() – метод-слот, который увеличивает количество обслуженных клиентов;
- void cashState(CashState) – сигнал о формировании нового состояния кассы;
- Cash() – конструктор класса;
- ~Cash() – деструктор класса;
- inline CashParam getParam() – встроенный метод получения значений параметров кассы;
- void control(int) – метод-слот, производящий перерасчёт очередей;
- void updateTimer(int) – метод-слот, обновляющий значения интервала счёта для таймера, отвечающего за частоту появления нового клиента;
- void countBoxChanged(int) – метод-слот, который вызывается при изменении количества окон кассы;
- void countPeopleChanged(int) – метод-слот, который вызывается при изменении количества человек в очереди.