базового класу Tanker і розіграти час до прибуття наступного танкера. У методі 3 цього робити не потрібно, так як прибулий об'єкт вже існує в системі і доступ до нього ми отримуємо через переданий параметр. Ці два методи можуть мати одну назву, що допускається правилами С + +, так як їх сигнатури різняться. Звичайно, методи 3 і 4 можна було б об'єднати і в один, передаючи в одному з випадків NULL-покажчик і здійснюючи всередині відповідну перевірку параметра. Але такий підхід приховував би принципові відмінності між обробкою двох варіантів прибуття танкерів, які тут, навпаки, хотілося б підкреслити. У методі 5 в якості параметра може бути переданий покажчик на танкер будь-якого типу - як покажчик на об'єкт базового класу. Зазначимо, що фінальною частиною методів 2, 6 і 7 є одне і те ж дію - вибір в одній з черг першого танкера і постановка його на обслуговування. Цей загальний фрагмент коду для виключення повторень зручно виділити в окремий метод, який ми назвали choice. p align="justify"> Для об'єкта Port подій всього два:
В· прибуття чергового танкера. Метод має один параметр - покажчик на який прибув танкер - і викликається буксиром з методу 7;
В· завершення вантаження. Метод має один параметр - номер терміналу, який завершив вантаження, - і викликає метод 5 для буксира.
4. Програмна реалізація алгоритму
При створення імітаційної моделі черги з різнотипними заявками (робота порту) була вибрана мова програмування C + + і написана програма на цій мові, що дозволяє повною мірою відобразити функціонування системи.
алгоритм імітація заявка порт модель
Лістинг програми файл 6.h. Опис протоколів класів
# include
# include
# include
# include namespace std;
# include "List.h"
# include "random.h" * q_tugIn;// файл для збору статистики про довжину черги
// на причалювання * q_tugOut;// файл для збору статистики про довжину черги
// на відчалювання * q_loading;// файл для збору статистики про довжину черги
// на навантаження * sojourn;// файл для збору статистики про час перебування
// в портуq_tugInAve = 0;// змінна для підрахунку середньої довжини черги
// на прічаліваніеq_tugOutAve = 0;// змінна для підрахунку середньої довжини черги
// на отчаліваніеq_loadAve = 0;// змінна для підрахунку середньої довжини черги
// на погрузкуsoj_Ave = 0;// змінна для підрахунку середнього часу
// перебування на погрузкеsoj1_Ave = 0;// змінна для підр...