- •1. Вступ
- •2. Аналіз предметної області 2.1. Обґрунтування аналізу предметної області
- •2.2. Обгрунтування вибору мови
- •2.3. Особливості діаграм станів
- •3. Проектування програмного блоку
- •3.1 Проектування системи
- •3.2. Управління часом
- •4. Кабінка з закритими дверима, щасливе обличчя відсутня. При висадці пасажира застосовується зворотний порядок.
- •3.3. Діаграма станів для програми elev
- •3.4. Стратегія роботи ліфтів
- •4. Реалізація програмного блоку мовою с# в технології .Net
- •4.1. Результати тестування
- •4.2. Створення компонента
- •5. Розробка інструкції користувачеві.
3. Проектування програмного блоку
3.1 Проектування системи
Cистема ліфтів (клас Elevator).
Ліфти можуть бути приблизно однаковими, тому є сенс зробити їх об'єктами одного класу під назвою Elevator. У цьому класі містяться дані, характерні для кожного окремо взятого ліфта: поточне місце розташування, напрямок руху, номери поверхів призначення і т. д.
Методи Elevator ініціалізували за допомогою конструктора окремі ліфти, встановлюють два метронома для кожної кабінки, виводять зображення ліфтів, їх напрямки, приймають рішення, рухають ліфти і отримують номери кінцевих поверхів від користувача.
## |
стічка |
Клас Elevator |
9…16 |
-car_number |
номер ліфта |
-“- |
-current_dir |
в якому направленні |
-“- |
-current_floor |
де ми |
-“- |
-destination |
направлення |
-“- |
-old_floor |
куди їдем |
-“- |
-ptrBuilding |
|
-“- |
-loading_timer |
таймер (не нуль) |
-“- |
-unloading_timer |
таймер (не нуль) |
18.. |
+Elevator |
конструктор |
220.. |
+car_display |
виводим образ ліфта |
34. |
+car_tick1 |
метроном-1 |
270.. |
+car_tick2 |
метроном-2 |
45.. |
+decide |
прийняте рішення |
208.. |
+dests_display |
вивести конечні етажі |
## |
стрічка |
Клас Elevator |
292.. |
+get_direction |
куди їдем |
297.. |
+get_distinations |
кінцевий етаж |
286.. |
+get_floor |
даний етаж |
|
|
|
275 |
+ move |
рух ліфта |
|
|
|
Табл. 1. Діаграма класу Elevator
Будівля (клас Building)
Є дані про все будівлі в цілому. Ці дані будуть частиною класу Building. По-перше, є массив запитів з поверхів floor_request. Це список поверхів, де люди, що чекають ліфта, натиснули кнопку «вгору» або «вниз» і тим самим попросили ліфт під'їхати до них. Будь-який з ліфтів може відповідати на ці запити, тому всі вони повинні мати доступ до цього масиву. У програмі використовується масив розміром Nx2 типу booL, де N - кількість поверхів, а два (2) поля на кожен поверх дозволяють розділяти запити на рух вгору і вниз.
Всі ліфти звертаються до цього масиву, щоб зрозуміти, що їм робити далі. Крім того, кожен ліфт повинен бути обізнаний про те, де знаходяться інші. Якщо один з ліфтів знаходиться на першому поверсі, то немає ніякого резону гнати його на п'ятнадцятий, якщо є ліфт, що знаходиться на десятому. Виконувати запити повинен найближчий до місця призначення ліфт. Для забезпечення інформування ліфтів про всіх інших в клас Building вводиться також масив car_list. Масив car_list дозволяє кожній кабінці опитувати всі інші, з'ясовуючи їх місцезнаходження і напрямок руху.
Методи Building ініціалізують систему, встановлюють метроном, отримують і виводять запити.
## |
стрічка |
Класс Building |
9, 10 |
-car_list |
масив ліфтів |
-“- |
-floor_request |
масив запросів з етажів |
13.. |
+Building |
конструктор |
74.. |
+ get_cars_dir |
Направлення руху |
69.. |
+ get_cars_floor |
Пошук ліфту |
64.. |
+ set_floor_req |
Установка запросів |
49.. |
+ get_floor_req |
Перевірка запросів |
33.. |
+ master_tick |
метроном |
96.. |
+ record_floor_reqs |
Получення запросів |
79.. |
+ show_floor_reqs |
Вивід запросів |
Табл. 2. Діаграма класу Building