Uploaded by Володимир Озеранський

БДР Клямчук

advertisement
Вінницький національний технічний університет
Факультет інформаційних технологій та комп'ютерної інженерії
Кафедра комп’ютерних наук
Пояснювальна записка
до бакалаврської дипломної роботи
на тему:
ПРОГРАМНИЙ МОДУЛЬ ДИНАМІЧНОГО РОЗКЛАДУ РУХУ
ТРАМВАЇВ
Виконав: студент 4 курсу, гр. 1КН-16б
напряму підготовки 122
«Комп`ютерні науки»
Клямчук В.О.
(прізвище та ініціали)
Керівник Перевозніков С.І
(прізвище та ініціали)
Рецензент Войтко В.В.
(прізвище та ініціали)
Вінниця - 2020 року
Вінницький національний технічний університет
Факультет інформаційних технологій та комп'ютерної інженерії Кафедра
комп’ютерних наук
ЗАТВЕРДЖУЮ
Завідувач кафедри____КН____
__________д.т.н., проф.. Яровий А.А.
“____” ____________20___року
З А В Д А Н Н Я
НА БАКАЛАВРСЬКУ ДИПЛОМНУ РОБОТУ СТУДЕНТУ
Клямчуку В’ячеславу Олександровичу
1. Тема роботи: програмний модуль динамічного розкладу руху трамваїв.
керівник роботи: Перевозніков Сергій Іванович, д.т.н, профессор.
затверджена наказом вищого навчального закладу від __.___.20___р. №___
2. Строк подання студентом роботи___________________________________
3. Вихідні дані до роботи :
Мова програмування: Swift;
Середовище розробки Xcode;
Програмне забезпечення Xcode Tools;
Тип передачі даних ArcGIS Geodatabase.
4. Зміст розрахунково-пояснювальної записки (перелік питань, які потрібно
розробити):
Обґрунтування методу визначення розкладу, обґрунтування вибору
структури програмного модуля динамічного розкладу руху трамваїв,
проектування програмного модуля динамічного розкладу руху трамваїв,
програмна реалізація модуля динамічного розкладу руху трамваїв, аналіз
результатів тестування програмного модуля динамічного розкладу руху
трамваїв.
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень):
Схема алгоритму роботи програмного модуля динамічного розкладу руху
трамваїв;
Діаграми компонентів проекту;
Загальний вигляд інтерфейсу користувача;
Приклад роботи програми.
6. Консультанти розділів проекту (роботи)
Розділ
1-4
Підпис, дата
завдання
завдання
видав
прийняв
Прізвище, ініціали та посада
консультанта
Перевозніков С.І., д.т.н, профессор.
7. Дата видачі завдання__________________________________________
КАЛЕНДАРНИЙ ПЛАН
№
з/п
Назва етапів дипломного
проекту (роботи)
Строк виконання
етапів проекту
( роботи )
1
Обґрунтування
актуальності
програмного
модуля динамічного розкладу руху трамваїв
Характеристика та аналіз систем аналогів
Розробка алгоритму роботи програмного модуля
аналізу вільних місць у кафе та ресторанах
Розробка структури клієнтського модуля
системи
Розробка інструкції користувача
Оформлення матеріалів до захисту БДР
10.05.2020
2
3
4
5
6
Студент
_________
( підпис )
Керівник роботи
_________
( підпис )
Рецензент
_________
( підпис )
20.05.2020
01.06.2020
04.06.2020
08.06.20
10.06.20
Клямчук В. О.
(прізвище та ініціали)
Перевозніков С.І.
(прізвище та ініціали)
Войтко В.В.
(прізвище та ініціали)
Примітка
АНОТАЦІЯ
У роботі розглянуто основні додатки динамічних розкладів руху, їх
переваги та недоліки, запропоновано удосконалений та більш функціональний
алгоритм динамічного розкладу руху, який забезпечує високу продуктивність,
відмовостійкість та автономність за рахунок використання розподіленої
архітектури, розроблено програмне забезпечення що реалізує запропонований
алгоритм.
Розробка виконана засобами мови програмування Swift та інтегрованого
середовища розробки Xcode.
ABSTRACT
The work includes main implementation methods of dynamic schedule
transport systems, their advantages and disadvantages, which provides high
productivity, precision and efficiency, autonomy by utilizing the concept of
distributed architecture, developed software that implements the solution mentioned
above.
Software was developed using Swift language. In addition, Apple Xcode IDE
was used.
ЗМІСТ
ВСТУП ..................................................................................................................... 6
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ДИНАМІЧНОГО РОЗКЛАДУ РУХУ ... 8
1.1 Постановка задачі програмного модуля динамічного розкладу руху
трамваїв .................................................................................................................... 8
1.2 Огляд відомих методів визначення розкладу руху та обґрунтування
вибору динамічного методу .................................................................................. 9
1.3 Обґрунтування вибору аналогу до програмного модуля динамічного
розкладу руху трамваїв ......................................................................................... 11
1.4 Висновок .................................................................................................... 15
2 ПРОЕКТУВАННЯ ПРОГРАМНОГО МОДУЛЯ ДИНАМІЧНОГО
РОЗКЛАДУ РУХУ ТРАМВАЇВ ........................................................................... 16
2.1 Обґрунтування вибору платформи для розробки програмного модуля
динамічного розкладу руху трамваїв .................................................................. 16
2.2 Обґрунтування вибору структури програмного модуля динамічного
розкладу руху трамваїв ......................................................................................... 19
2.3 Розробка алгоритму функціонування програмного модуля
динамічного розкладу руху трамваїв .................................................................. 23
2.4 Розробка діаграми класів.......................................................................... 25
2.5 Висновок .................................................................................................... 26
3 ПРОГРАМНА РЕАЛІЗАЦІЯ МОДУЛЯ ДИНАМІЧНОГО РОЗКЛАДУ
РУХУ ТРАМВАЇВ ................................................................................................ 27
3.1 Обґрунтування вибору мови програмування для модуля динамічного
розкладу руху трамваїв ......................................................................................... 27
3.2 Обґрунтування вибору середовища програмування для модуля
динамічного розкладу руху трамваїв .................................................................. 29
3.3 Реалізація модуля динамічного розкладу руху трамваїв в середовищі
Xcode....................................................................................................................... 30
3.4 Висновок .................................................................................................... 31
4 ТЕСТУВАННЯ ТА АНАЛІЗ РЕЗУЛЬТАТІВ РОБОТИ ПРОГРАМНОГО
МОДУЛЯ ДИНАМІЧНОГО РОЗКЛАДУ РУХУ ТРАМВАЇВ ......................... 32
ВИСНОВКИ ........................................................................................................... 33
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ ............................................................. 34
ДОДАТОК А. ІНСТРУКЦІЯ КОРИСТУВАЧА ................................................. 35
ДОДАТОК Б. ЛІСТИНГ ПРОГРАМИ ................................................................ 36
ДОДАТОК В. ГРАФІЧНІ МАТЕРІАЛИ ............................................................. 42
6
ВСТУП
На сьогоднішній день всі сучасні люди планують своє майбутнє. Кожен день
розписаний погодинно, кожну хвилину відбувається якийсь захід, зустріч.
Наскільки важливий для нас час і щоб все відбулось вчасно та без запізнень.
Найзручніше що змогла придумати людина – це розклад.
Розклад допомагає нам вчасно опинитись в потрібному місці в потрібний час.
Його використовують, коли складають графік занять в університеті, час руху
прибуття та відправлення потягів, для планування ділових зустрічей, розклад руху
громадського транспорту.
У даній роботі ми маємо з’ясувати саме те наскільки важливий для людини
розклад руху транспорту та які його плюси і мінуси, та що можна зробити щоб його
покращити.
Розкладом руху називають документ, що нормує рух транспортних засобів на
лінії і в часі. Розклад руху є підсумковим документом усього комплексу робіт
планування руху. Він направляє й організовує роботу всіх служб транспортного
підприємства, що пов'язані з рухом транспортних засобів. Виконання розкладу
руху - закон для всіх служб і працівників служби перевезень, починаючи з водіїв
транспортних засобів і закінчуючи начальником служби. Правильно складений
розклад руху забезпечує: високі якісні показники перевезення пасажирів і
виконання
встановлених
планових
завдань
щодо
перевезень
пасажирів,
своєчасність і отримання прибутку; рентабельність маршрутів; безпеку руху;
ефективне використання транспортного засобу; узгодженість роботи маршрутів з
іншими видами транспорту; дотримання встановленої трудовим законодавством
тривалості роботи водіїв; максимальне використання дозволених швидкостей руху
транспортних засобів на маршрутах
Метою
даної
бакалаврської
роботи
є
розширення
функціональних
можливостей програмного модулю динамічного розкладу руху трамваїв.
7
Об’єктом дослідження виступає процес розробки програмного модулю
динамічного розкладу руху трамваїв.
Предмет дослідження – програмні засоби формування та аналізу динамічного
розкладу руху трамваїв.
Задачі дослідження:
1.
Обґрунтування методу розв’язання задачі;
2.
Вибір платформи для розробки;
3.
Проектування структури програмного модуля динамічного розкладу
руху трамваїв,
4.
Програмна реалізація модуля динамічного розкладу руху трамваїв,
5.
Аналіз результатів тестування програмного модуля динамічного
розкладу руху трамваїв,.
8
1 АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ ДИНАМІЧНОГО РОЗКЛАДУ РУХУ
1.1 Постановка задачі програмного модуля динамічного розкладу руху
трамваїв
Основний вид розкладів руху - маршрутний розклад. Він встановлює режим
роботи транспортних засобів за часом для кожного діючого маршруту. На підставі
маршрутних розкладів складають розклади для водіїв кожного випуску, для
чергових кінцевих станцій маршрутів (за ними контролюють рух транспортних
засобів через кінцеві пункти маршрутів), маршрутні для пасажирів (що вивішують
на зупиночних пунктах маршрутів з великими інтервалами)
У зв'язку з коливаннями умов руху на маршрутах, маршрутні розклади
складають окремо на весняно-літній і осінньо-зимовий періоди для будніх,
суботніх, недільних і святкових днів. Таким чином, протягом року на кожному
маршруті може змінювати один одного вісім типів розкладів. Крім того, складають
і інші, так звані цільові розклади руху для роботи у важких погодних умовах
(туман, низька освітленість, ожеледиця, снігопад), у літню пору на маршрути до
місць масового відпочинку трудящих тощо.
Крім цього маршрутний розклад дозволяє:
- розподілити транспортні засоби між маршрутами в часі;
- скласти графік роботи водіїв на певний період часу (тиждень, місяць);
- визначити параметри руху (частоту руху й інтервали) їхнього значення й
періоди зміни для диспетчерського персоналу й довідково-інформаційної служби;
- визначити експлуатаційні показники роботи маршруту;
- провести організаційно-технічні заходи щодо огляду й ремонту
транспортного засобу для забезпечення своєчасного і якісного випуску;
- встановити планований рівень транспортного обслуговування населення за
показниками максимальної наповнюваності транспортного засобу в кожний
конкретний період дня й плановану регулярність руху;
9
- визначити економічну ефективність роботи транспортних засобів на
маршруті відповідно до розробленого плану-розкладу.
Отже, розклад руху громадського транспорту - це документ, що визначає
інформацію про час обслуговування громадського транспорту, щоб допомогти
пасажирам у плануванні поїздки. Зазвичай в розкладі відображаються часи, коли
планується приїхати та відправити послугу із зазначених місць. Він може
показувати всі рухи в певному місці або всі рухи певним маршрутом або для певної
зупинки. Традиційно ця інформація надається у друкованому вигляді, наприклад,
як листівка чи плакат. Зараз він також часто доступний у різноманітних
електронних форматах. І саме в одному із електронних форматів буде проведена
розробка програмного модулю динамічного розкладу руху трамваїв.
1.2 Огляд відомих методів визначення розкладу руху та обґрунтування
вибору динамічного методу
Найстарішим і досі актуальним методом визначення розкладу є друковані
розклади, схеми та графіки(рис 1.1) Однією з основних причин актуальності цієї
форми є дешевизна виготовлення відносно схожого по функціональності табло
(рис 1.2).
Рисунок 1.1 Схема руху маршрутного транспорту міста Вінниці
10
Табло - сигнальний щит із світловими чи електромагнітними показниками,
що відбивають стан контрольованого устаткування, хід технологічного процесу,
результати змагань тощо.
Хоч друковані форми і дешевше виготовлювати, на дистанції табло може
бути більш економним і екологічним, це досягається можливістю багаторазово
використання, натомість при зміні розкладу схеми та графіки прийдеться
передруковувати.
Рисунок 1.2 Електронне табло на зупинці громадського транспорту міста
Вінниці
11
В цій роботі мова піде про так зване індивідуальне «табло» в смартфоні, і це
основна його перевага. Не потрібно знаходитись біля зупинки громадського
транспорту щоб взнати розклад, достатньо скористатись онлайн розкладом або ж
одним із передустановленим додатків навіть без доступу до мережі. За динамічним
методом визначення розкладу майбутнє, проте його ще можна удосконалювати
різним функціоналом що й стало причиною його вибору.
1.3 Обґрунтування вибору аналогу до програмного модуля динамічного
розкладу руху трамваїв
Зараз на ринку доступні сотні програм для різних населених пунктів, що
задовольняють основні потреби користувача. В даному розділі буде розглянуто та
проаналізовано вибірку програм міста Вінниці. Щоб оцінити існуючі варіанти
потрібно спочатку визначити критерії при оцінюванні переваг та недоліків даних
програм, такі як:
 Інформативність
 Простота інтерфейсу
 Незалежність від мережі
 Адаптивність
 Кросплатформенність
 Динамічність
Розглянемо існуючі варіанти додатків розкладу руху транспорту міста
Вінниці. Офіційний транспортний сайт міста Вінниця [1]. Його інформативність є
стандартом, так як саме з нього беруть інформацію всі інші додатки. Desktop та
mobile інтерфейси транспортного веб-сайту міста Вінниця продемонстровано на
рисунку 1.3.
12
Рисунок 1.3 – Desktop та mobile інтерфейси транспортного веб-сайту міста
Вінниця
Desktop та mobile версії інтерфейсів схожі та зрозумілі. UX реалізовується в
червоній мітці яка вказує найближчий трамвай що прибуде до вказаної зупинки на
основі поточного часу. Адаптивність є максимальною із можливих, тому що це
офіційний сайт і при зміні розкладу він оновиться найпершим. Зараз майже всі
операційні системи мають влаштовані браузери для перегляду веб-сайтів, тому
рішення крос платформне. Реалізована мінімальна динамічність у вигляді
зворотнього таймеру найближчого трамваю для вибраних параметрів. Недоліком
можна вважати тільки залежністю від мережі.
Мобільний додаток «ВінРозклад» [6]. Інформативність є базовою і являє
собою набір часу прибуття транспорту для вибраної зупинки вибраного маршруту.
Інтерфейс мобільного додатку «ВінРозклад» наведено на рисунку 1.4
13
Рисунок 1.4 – Інтерфейс мобільного додатку «ВінРозклад»
Адаптивність буде низька так як інформація в додатку може оновлюватись
тільки через оновлення самого додатку в сервісах Google Play та App Store
відповідно. Але це компенсується повною незалежністю додатку від мережі.
Рішення існує під системи Android та iOS, ці дві операційні системи покривають
більше ніж 95% ринку. Тому його можна вважати крос платформним. Великим
недоліком є те що додаток статичний, і користувач повинен сам шукати потрібний
йому час і відраховувати прибуття наступного транспорту, а це втрата
дорогоцінного часу яка може привести до спізнення.
14
Найближчим аналогом є додаток Google Maps(рис 1.5), саме в ньому окрім
динамічного розкладу втілена навігація, і хоч в ньому є можливість завантажити
частину карти і використовувати її без мережі, ні динамічний розклад, ні навігація
при цьому не працює. В розробці програмного модуля динамічного розкладу руху
цей недолік буде усунуто.
Рисунок 1.5 Інтерфейс додатку Google Maps
15
1.4 Висновок
В даному розділі було проаналізовано предметну область процесу
динамічного розкладу руху, перелічено основні методи доступу до інформації
розкладу руху транспорту, їх переваги та недоліки. Виявляється, що незалежність
від мережі та адаптивність до змін є великою проблемою серед існуючих методів.
Проаналізувавши саме динамічні підходи розкладу руху, можемо зробити висновок
що їх не так багато і всі вони залежать від мережі інтернет. Також, при аналізі було
виявлено що існуючі рішення мають обмежені можливості щодо персоналізації
розкладу під користувача. У підсумку аналізу можна зробити висновок що
розглянуті варіанти мали різні переваги та недоліки при однакових критеріях
оцінки, а це означає що ринок потребує новий продукт який зможе об’єднати
переваги та позбутись недоліків.
Саме тому в цій роботі будуть прикладенні зусилля для усунення недоліку
адаптивності при зміні розкладу руху та буде додано можливість користуватись
динамічним розкладом руху незалежно від мережі.
16
2 ПРОЕКТУВАННЯ ПРОГРАМНОГО МОДУЛЯ ДИНАМІЧНОГО
РОЗКЛАДУ РУХУ ТРАМВАЇВ
2.1 Обґрунтування вибору платформи для розробки програмного модуля
динамічного розкладу руху трамваїв
Зрозуміло, що все більше людей використовують свої мобільні пристрої для
доступу до Інтернету, і ми можемо очікувати, що ця тенденція збережеться.
Частково це пояснюється тим, що мобільні пристрої є більш доступними, ніж
настільні комп’ютери у більшості країн, що розвиваються, саме там швидкість
використання Інтернету та проникнення зростає найшвидше. Наприклад, у Китаї
зараз проживає більше користувачів Інтернету, ніж будь-яка інша країна світу загалом 802 мільйони користувачів - і 98 відсотків з них отримують доступ до
Інтернету через мобільний пристрій. Індія відстає від 500 мільйонів користувачів
Інтернету, причому близько 80 відсотків їх в Інтернеті через мобільний пристрій
дев'яносто відсотків часу, який люди проводять на мобільних пристроях,
витрачається на користування додатками, а залучення в додатки вчетверо краще,
ніж мобільні веб-браузери. Уже в 2016 році відсоток мобільних користувачів
випередив настільні комп’ютери (рис 2.1).
Рисунок 2.1 Мобільний ринок випередив настільні комп’ютери
17
Станом на 2019 у 97% людей є мобільні телефони, із них 83% являються
смартфонами (рис 2.2). Хоча більше людей отримує доступ до Інтернету з
мобільних пристроїв, ніж з настільних комп’ютерів, люди все ще, як правило,
проводять більше часу на сайтах, коли отримують доступ до них з немобільних
пристроїв. Люди вже використовують мобільні пристрої більше, ніж настільні
комп’ютери для доступу до Інтернету, і дані показують, що це навряд чи зміниться.
Рисунок 2.2 Відсоток пристроїв які використовуються людьми станом на
2019 рік
Надалі користувачі мобільних пристроїв, ймовірно, продовжуватимуть
переважати, ніж користувачі настільних ПК. Якщо взяти до уваги предметну
область даної роботи та всі вище наведені факти, то легко можна визначитись що
для визначення розкладу руху потрібний саме мобільний пристрій, так як він є
майже у кожної людини і що найважливіше - завжди з собою.
Слідом за вибором платформи йде вибір операційної системи. Станом на
2020 рік операційні системи смартфонів мають два лідера – Android та iOS(рис 2.3).
18
Рисунок. 2.3 Операційні системи смартфонів станом на 2020 рік
Частка Android поки що більша, але тенденція така, що все більше і більше
людей переходить на iOS. Іноді саме те, що нам подобається в Android, робить його
менш привабливою платформою для широкого споживача. Хоча Google та її
партнери-виробники стають все кращими для того, щоб зробити Android більш
інтуїтивно зрозумілим, правда, це все ще може бути трохи заплутано.
Невідповідність між виробниками телефонів створює криву навчання, оскільки
більшість Android-телефонів виглядають та відчувають себе різними.
Шанувальники Apple люблять простоту своєї операційної системи, і це,
мабуть, одне з речей, які iOS робить краще, ніж Android. В iOS не так багато, і це
частина системи. Багато любителів iPhone не хочуть телефону, з яким можна
возитися і налаштувати. Вони хочуть, щоб пристрій, який працює добре, простий у
використанні, і може приймати їх до їх вмісту з найменшими зусиллями. Саме про
це йдеться у вислові "це просто працює". На мою думку ріст iOS обумовлений
багатьма факторами і це операційна система майбутнього, вона максимально
проста і водночас потужна, а весь додатковий функціонал можна реалізовувати у
додатках.
19
2.2 Обґрунтування вибору структури програмного модуля динамічного
розкладу руху трамваїв
На даний момент є три основних актуальних структури в розробці мобільного
програмного забезпечення:
1. Model-View-Controller (MVC);
2. Model-View-Presenter (MVP);
3. Model-View-ViewModel (MVVM).
Для обґрунтування доцільності вибору тої чи іншої структури – давайте їх
розберемо на частини та порівняємо. Кожна з структур містить в собі
модель(Model) та представлення(View).
Під Моделлю, зазвичай розуміється частина яка містить в собі функціональну
бізнес-логіку програми. Модель повинна бути повністю незалежна від інших
частин продукту. Модельний шар нічого не повинен знати про елементи дизайну, і
яким чином він буде відображатися.
Модель володіє наступними ознаками:
1. Модель - це бізнес-логіка програми;
2. Модель володіє знаннями про себе саму і не знає про контроллери та
представлення;
3. Для деяких проектів модель - це просто шар даних (DAO, база даних, XMLфайл);
4. Для інших проектів модель - це менеджер бази даних, набір об'єктів або
просто логіка додатка;
В обов'язки представлення входить відображення даних отриманих від
Моделі. Однак, уявлення не може безпосередньо впливати на модель. Можна
говорити, що уявлення отримує доступ «тільки на читання» до даних.
20
Представлення володіє наступними ознаками:
1. У представленні реалізується відображення даних, які виходять від моделі
будь-яким способом;
2. У деяких випадках, представлення може мати код, який реалізує деяку бізнеслогіку.
Приклади Представлення: HTML-сторінка, WPF форма, Windows Form.
Тепер розглянемо кожен із них.
Model-View-Presenter. Даний підхід дозволяє створювати абстракцію
представлення. Для цього необхідно виділити інтерфейс уявлення з певним
набором властивостей і методів. Презентер, в свою чергу, отримує посилання на
реалізацію інтерфейсу, підписується на події представлення і за запитом змінює
Модель.
Ознаки презентера:
1. Двостороння комунікація з представленням;
2. Представлення взаємодіє безпосередньо з презентером, шляхом виклику
відповідних функцій або подій примірника презентера;
3. Презентер взаємодіє з представленням шляхом використання спеціального
інтерфейсу, реалізованого поданням;
4. Один екземпляр презентера пов'язаний з одним представленням.
Model-View-Controller. Основна ідея цього патерну в тому, що і контролер і
представлення залежать від моделі, але модель ніяк не залежить від цих двох
компонент.
Ознаки контролера:
1. Контролер визначає, які уявлення має бути відображено в даний момент;
2. Події вистави можуть вплинути тільки на контроллер.контроллер може
вплинути на модель і визначити інше уявлення.
3. Можливо кілька подань тільки для одного контролера;
21
Model View ViewModel. Даний підхід дозволяє пов'язувати елементи
уявлення з властивостями і подіями View-моделі. Можна стверджувати, що кожен
шар цього патерну не знає про існування іншого шару.
Ознаки MVVM:
1. Двостороння комунікація з представленням;
2. View-модель - це абстракція представлення. Зазвичай означає, що
властивості представлення збігаються з властивостями View-моделі або
моделі
3. View-модель не має посилання на інтерфейс представлення (IView). Зміна
стану View-моделі автоматично змінює уявлення і навпаки, оскільки
використовується механізм скріплення даних (Bindings)
4. Один екземпляр View-моделі пов'язаний з одним відображенням.
Візуально відношення різних шарів цих структур продемонстровано на
рисунку 2.4
Рисунок. 2.4 Різниця між MVC, MVP та MVVM
22
На основі проведеного аналізу в даній роботі буде використовуватись
структура MVVM (рис. 2.5), так як в мобільному додатку можливо зв'язування
даних без необхідності введення спеціальних інтерфейсів представлення (тобто
відсутня необхідність реалізовувати IView);
Даний патерн був представлений Джоном Госсманом (John Gossman) в 2005
році як модифікація шаблону Presentation Model і був спочатку націлений на
розробку додатків в WPF. І хоча зараз цей патерн вийшов за межі WPF і
застосовується в самих різних технологіях, в тому числі при розробці під Android,
iOS.
Рисунок 2.5 MVVM
Model-View-Viewmodel (MVVM) - це програмний архітектурний шаблон,
який полегшує розмежування графічного інтерфейсу користувача, тобто подання,
будь то за допомогою мови розмітки чи коду графічного інтерфейсу - від бізнес
логіки чи додатку (модель), щоб представлення будь-яких даних не залежали від
конкретної реалізації моделі. Модель перегляду в MVVM є перетворювачем
значень, тобто модель перегляду відповідає за перетворення об'єктів даних із
моделі таким чином, що об'єктами можна було легко керувати та представляти за
допомогою графічного інтерфейсу. У цьому відношенні модель перегляду є
більшою моделлю, ніж вигляд, і обробляє більшу частину, якщо не всю логіку
23
відображення перегляду. Модель перегляду може реалізувати модель посередника,
організовуючи доступ до зворотної логіки, підтримуваних видом.
2.3 Розробка алгоритму функціонування програмного модуля динамічного
розкладу руху трамваїв
В алгоритм закладений підхід геолокаційної взаємодії.
Алгоритм реалізації підходу виглядає наступним чином:
1. Початок
2. Визначення геолокації користувача
3. Визначення найближчої зупинки
4. Якщо найближча зупинка це те що потрібно користувачеві, то перейдемо до
пункту 6
5. Вибір користувачем потрібної зупинки
6. Розрахунок різниці найближчого по графіку руху трамваю від поточного часу
7. Прокладання маршруту від користувача до зупинки
8. Розрахунок часу прибуття користувача на зупинку при середній швидкості
людини.
9. Якщо розрахунок пункту 6 менше ніж розрахунок пункту 8, то перейдемо до
пункту 11
10. Відображення попередження про те що користувач може встигнути на
найближчий трамвай якщо його швидкість буде більша ніж середня
11.Відображення маршруту, часу прибуття трамваю та користувача
12.Кінець
Схема даного алгоритму зображена на рисунку 2.6
24
Рисунок 2.6 – Cхема алгоритму програмного модулю динамічного розкладу
руху
25
2.4 Розробка діаграм класів та структури проекту
Рисунок 2.7 Ієрархічна діаграма класів
26
Рисунок 2.8 Структура проекту в середовищі розробки Xcode
2.5 Висновок
27
3 ПРОГРАМНА РЕАЛІЗАЦІЯ МОДУЛЯ ДИНАМІЧНОГО РОЗКЛАДУ
РУХУ ТРАМВАЇВ
3.1 Обґрунтування вибору мови програмування для модуля динамічного
розкладу руху трамваїв
Для
реалізації
запропонованого
додатку
потрібно
обрати
мову
програмування, яка підтримує розробку мобільних додатків для операційної
системи iOS. Найбільш широко використовуваними мовами програмування для
таких потреб Objective-C та Swift.
Objective-C — рефлективна, високорівнева об'єктно-орієнтована мова
програмування загального призначення, розроблена у вигляді набору розширень
стандартної С. Мова програмування Objective-C, розроблена на початку 1980-х
років, була основною мовою, що використовувалася компанією NeXT для
операційної системи NeXTSTEP, від якої пішли macOS і iOS. На даний час
використовується в основному у macOS та GNUStep — середовищах, розроблених
на основі стандарту OpenStep, та Cocoa — бібліотеки компонентів для розробки
програм. Програму на Objective-C що не використовує цих бібліотек можна
скомпілювати для будь-якої платформи, яку підтримує gcc компілятор з
підтримкою Objective-C. Objective-C є розширенням С і тому будь-яку програму на
С можна скомпілювати компілятором Objective-C. ООП в Objective-C включає
інтерфейси, класи, категорії. Реалізовано одиничне, невіртуальне спадкування.
Немає єдиного базового класу для всіх об'єктів. Всі методи в класі — віртуальні.
Категорія — парадигма яка дозволяє описувати інтерфейс з методами які
«необов'язково» імплементувати.
Синтакс Objective-C породжений одночасно від С та Smalltalk. Від останньої
взято основний семантичний конструкт мови — замість виклику методу об'єктові
надсилається повідомлення.
28
Swift — багатопарадигмова компільована мова програмування, розроблена
компанією Apple для того, щоб співіснувати з Objective C і бути стійкішою до
помилкового коду. Swift була представлена на конференції розробників WWDC
2014. Мова побудована з LLVM компілятором, включеного у Xcode 6 beta.
Безкоштовний посібник мови програмування Swift доступний для завантаження у
магазині iBooks. Компілятор Swift побудований з використанням технологій
вільного проекту LLVM. Swift успадковує найкращі елементи мов C і Objective-C,
тому синтаксис звичний для знайомих з ними розробників, але водночас
відрізняється використанням засобів автоматичного розподілу пам'яті і контролю
переповнення змінних і масивів, що значно збільшує надійність і безпеку коду. При
цьому Swift-програми компілюються у машинний код, що дозволяє забезпечити
високу швидкодію. За заявою Apple, код Swift виконується в 1.3 рази швидше коду
на Objective-C. Замість збирача сміття Objective-C в Swift використовуються засоби
підрахунку посилань на об'єкти, а також надані у LLVM оптимізації, такі як
автовекторизація. Мова також пропонує безліч сучасних методів програмування,
таких як замикання, узагальнене програмування, лямбда-вирази, кортежі і
словникові типи, швидкі операції над колекціями, елементи функційного
програмування. Основним застосуванням Swift є розробка користувацьких
застосунків для macOS, iOS, tvOS, watchOS з використанням тулкіта Cocoa і Cocoa
Touch. При цьому Swift надає об'єктну модель, сумісну з Objective-C. Сирцевий код
мовою Swift може змішуватися з кодом на С і Objective-C в одному проекті.
Очевидно, що в Apple поставили завдання зберегти в Swift все хороше, що
було в Objective-C, зокрема, згадану продуктивність коду, з'єднавши її з звичними
сьогодні
зручностями
інтерпретованих
мов.
В
Swift
позбулися
безлічі
рудиментарного сміття, що дістався Objective-C від попередників. Крім того, Swift
дозволяє програмісту вирішувати поставлені завдання в декількох різних моделях,
серед яких функціональне програмування, при якому всі дії представлені у вигляді
математичних обчислень; процедурне, де дії виконуються послідовно і лінійно, і
об'єктно-орієнтоване, де всі дані представлені в якості об'єктів. Swift дає на виході
29
високооптимізовані LLVM-сумісний байткод (тобто низькорівневі інструкції, що
виконуються безпосередньо пристроєм) і працює з тими ж API. що і Objective-C
або C. Завдяки такій сумісності можна інтегрувати код Swift у вже існуючі проекти,
бібліотеки та програми. А якщо вам буде потрібно опуститися на рівень нижче і
вручну задати, наприклад, тип змінних або параметри управління пам'яттю, ви
завжди зможете повернутися до Objective-C.
На основі наведених вище фактів було обрано мову програмування Swift.
3.2
Обґрунтування
вибору середовища програмування
для
модуля
динамічного розкладу руху трамваїв
На даний момент єдиним середовищем розробки під мову програмування
Swift є Xcode(рис 3.1).
Xcode — інтегроване середовище розробки (IDE) виробництва Apple.
Дозволяє створювати програмне забезпечення з використанням таких технологій
як GCC, GDB, Java та ін. На сьогодні є єдиним засобом написання
«універсальних»(Universal Binary) прикладних програм для Mac OS X. Xcode
включає в себе більшу частину документації розробника від Apple та Interface
Builder — застосунок, який використовується для створення графічних
інтерфейсів. Пакет Xcode містить змінену версію вільного набору компіляторів
GNU Compiler Collection і підтримує мови C, C++, Objective-C, Swift, Java,
AppleScript, Python і Ruby з різними моделями програмування, включаючи (але не
обмежуючись) Cocoa, Carbon і Java. Сторонніми розробниками реалізована
підтримка GNU Pascal, Free Pascal, Ada, C #, Perl, Haskell і D. Пакет Xcode
використовує GDB як back-end для свого налагоджувача.
У серпні 2006 Apple оголосила про те, що DTrace, фреймворк динамічного
трасування від Sun Microsystems, випущений як частина OpenSolaris, буде
30
інтегрований в Xcode під назвою Xray. Пізніше Xray був перейменований в
Instruments.
Рисунок 3.1 – Інтегроване середовище розробки Xcode
3.3 Реалізація модуля динамічного розкладу руху трамваїв в середовищі
Xcode
З початку розповсюдження персональних комп'ютерних мереж однією з
найскладніших проблем безпеки комп'ютера було забезпечення безперебійного,
єдиного входу (SSO) для доступу до декількох комп'ютерів, кожен з яких потребує
непов'язаних облікових записів для входу для доступу до своїх послуг та зміст.
Хоча це все ще не повністю реалізовано в усьому Інтернеті, тепер можна отримати
доступ до безлічі абсолютно не пов’язаних між собою веб-сайтів за допомогою
єдиного фізичного входу. Ви можете використовувати свій пароль, телефон,
цифровий сертифікат, біометричну ідентифікацію, двофакторну автентифікацію
(2FA) або багатофакторну автентифікацію (MFA), рішення SSO для входу в одне
місце, і не потрібно ставити інший обліковий запис доступу весь день для доступу
купа інших. Ми маємо подякувати OAuth за велику частину цього.
31
OAuth - це відкритий стандартний протокол авторизації або фреймворк, який
описує, як непов’язані сервери та сервіси можуть безпечно дозволити
автентифікований доступ до своїх активів без фактичного обміну початковими,
пов'язаними, єдиними обліковими записами для входу. У мові аутентифікації це
відоме як захищений, сторонній, користувальницький агент, делегований
авторизація.
Рисунок 3.2 Авторизація на сервері за допомогою OAuth
3.4 Висновок
32
4 ТЕСТУВАННЯ ТА АНАЛІЗ РЕЗУЛЬТАТІВ РОБОТИ ПРОГРАМНОГО
МОДУЛЯ ДИНАМІЧНОГО РОЗКЛАДУ РУХУ ТРАМВАЇВ
33
ВИСНОВКИ
Всі задачі, поставлені перед виконанням БДР, виконані у повному обсязі, а
саме:
1.
обґрунтовано актуальність програмного модуля динамічного розкладу
руху трамваїв;
2.
наведено характеристику та аналіз систем аналогів;
3.
спроектовано структуру програмного модуля динамічного розкладу
руху трамваїв;
4.
розроблено програмне забезпечення для визначення динамічного
розкладу руху;
5.
проаналізовано функціонування модулів системи.
У результаті було розроблено модуль для динамічного визначення розкладу
руху у вигляді мобільного додатку до операційної системи Apple iOS.
34
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. Public transport timetable – [Електронний ресурс]. – Режим доступу:
2. Розробка
розкладу
–
[Електронний
ресурс].
–
Режим
доступу:
https://pidruchniki.com/70070/logistika/rozrobka_rozkladu_ruhu_transportnih_za
sobiv
3. 3. Yanan Z., Qinghua H., Zhaopeng M. Anca R. Dynamic timetable scheduling for
public transport // IFSA-SCIS 2017.
4. Транспортний сайт міста Вінниця – [Електронний ресурс]. – Режим доступу:
http://depo.vn.ua/route/bytable
–
5. MVC
[Електронний
ресурс].
–
Режим
доступу:
https://yiiframework.com.ua/uk/doc/guide/basics.mvc/
6. MVC vs MVP vs MVVM – [Електронний ресурс]. – Режим доступу:
https://habr.com/ru/post/215605/
–
7. MVVM
[Електронний
ресурс].
–
Режим
доступу:
Режим
доступу:
https://metanit.com/sharp/wpf/22.1.php
8. ВінРозклад
–
[Електронний
ресурс].
–
https://vn.20minut.ua/IT-novyny/zyavivsya-mobilniy-dodatok-z-rozkladom-ruhutransportu-u-vinnitsi-10475844.html
9. MVC
in
iOS
–
[Електронний
https://uk.wikipedia.org/wiki/Objective-C
ресурс].
–
Режим
доступу:
35
Додаток А. Інструкція користувача
36
Додаток Б. ЛІСТИНГ ПРОГРАМИ
//
//
SceneDelegate.swift
//
Stops
//
//
Created by Viacheslav Kliamchuk on 24.05.2020.
//
Copyright © 2020 Viacheslav Kliamchuk. All rights reserved.
//
import UIKit
import ArcGIS
import SwiftUI
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options
connectionOptions: UIScene.ConnectionOptions) {
let itemID = "6ad409cbf9864871bdad0ac36856f494" // custom map
let portal = AGSPortal.arcGISOnline(withLoginRequired: true)
let portalWrapper = PortalWrapper(portal: portal)
setupOAuth(
for: portalWrapper,
with: AppConfiguration.clientID,
and: "\(AppConfiguration.urlScheme)://\(AppConfiguration.urlAuthPath)"
)
// Inject portal into SwitUI view hierarchy
let contentView = ContentView(itemID: itemID)
.environmentObject(portalWrapper)
// Use a UIHostingController as window root view controller.
if let windowScene = scene as? UIWindowScene {
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
self.window = window
window.makeKeyAndVisible()
}
}
}
37
// MARK: - AGSAuthenticationManagerDelegate
extension SceneDelegate: AGSAuthenticationManagerDelegate {
func authenticationManager(_ authenticationManager: AGSAuthenticationManager,
didReceive challenge: AGSAuthenticationChallenge) {
challenge.continueWithDefaultHandling()
}
}
// MARK: - Helpers
extension SceneDelegate {
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
if let url = URLContexts.first?.url {
if url.absoluteString.range(of: "auth", options: [], range: nil, locale: nil) !=
nil {
let options = convertFirstOf(URLContexts)
AGSApplicationDelegate.shared().application(UIApplication.shared,
open: url,
options: options)
}
}
}
private func setupOAuth(for portalWrapper: PortalWrapper, with clientID: String, and
oAuthRedirectURLString: String) {
// Setting OAuth info
let oAuthConfiguration = AGSOAuthConfiguration(
portalURL: portalWrapper.portal.url,
clientID: clientID,
redirectURL: oAuthRedirectURLString
)
AGSAuthenticationManager.shared().delegate = self
AGSAuthenticationManager.shared().oAuthConfigurations.add(oAuthConfiguration)
AGSAuthenticationManager.shared().credentialCache
.enableAutoSyncToKeychain(
withIdentifier: AppConfiguration.keychainIdentifier,
accessGroup: nil,
acrossDevices: false
)
}
38
/// Converts URL to open info for the UIKit representation consuming
private func convertFirstOf(_ URLContexts: Set<UIOpenURLContext>) ->
[UIApplication.OpenURLOptionsKey: Any] {
var options: [UIApplication.OpenURLOptionsKey: Any] = [:]
if let inputOptions = URLContexts.first?.options {
options[.openInPlace] = inputOptions.openInPlace
if let sourceApplication = inputOptions.sourceApplication {
options[.sourceApplication] = sourceApplication
}
if let annotation = inputOptions.annotation {
options[.annotation] = annotation // Type casting undefined
}
}
return options
}
}
//
//
MapView.swift
//
Stops
//
//
Created by Viacheslav Kliamchuk on 24.05.2020.
//
Copyright © 2020 Viacheslav Kliamchuk. All rights reserved.
//
import Foundation
import SwiftUI
struct MapView: UIViewControllerRepresentable {
@EnvironmentObject var portalWrapper: PortalWrapper
public let portalItemID: String
typealias UIViewControllerType = MapViewController
func makeUIViewController(context: UIViewControllerRepresentableContext<MapView>) ->
MapView.UIViewControllerType {
let vc = MapViewController(portal: portalWrapper.portal, portalItemID: portalItemID)
return vc
}
39
func updateUIViewController(_ uiViewController: MapView.UIViewControllerType, context:
UIViewControllerRepresentableContext<MapView>) {
//
}
}
//
//
MapViewController.swift
//
Stops
//
//
Created by Viacheslav Kliamchuk on 24.05.2020.
//
Copyright © 2020 Viacheslav Kliamchuk. All rights reserved.
//
import Foundation
import UIKit
import ArcGIS
import SwiftUI
class MapViewController: UIViewController {
public let portal: AGSPortal
public let portalItemID: String
private var mapView: AGSMapView!
private let graphicsOverlay = AGSGraphicsOverlay()
init(portal: AGSPortal, portalItemID: String) {
self.portal = portal
self.portalItemID = portalItemID
super.init(nibName: nil, bundle: nil)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
40
view.backgroundColor = .gray
setupMap()
}
private func setupMap() {
mapView = AGSMapView(frame: .zero)
mapView.map = makeMap()
view.addSubview(mapView)
mapView.translatesAutoresizingMaskIntoConstraints = false
let top = mapView.topAnchor.constraint(equalTo: view.topAnchor, constant: 0.0)
let bottom = mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant:
0.0)
let leading = mapView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant:
0.0)
let trailing = mapView.trailingAnchor.constraint(equalTo: view.trailingAnchor,
constant: 0.0)
NSLayoutConstraint.activate([top, bottom, leading, trailing])
}
private func makeMap() -> AGSMap {
let portalItem = AGSPortalItem(portal: portal, itemID: portalItemID)
let map = AGSMap(item: portalItem)
map.load { (error) in
if let error = error {
print(error)
}
let operationlaLayers = map.operationalLayers.compactMap { $0 as? AGSFeatureLayer
}
let operationlaLayersNames = operationlaLayers.map { $0.name }
print(operationlaLayersNames)
for layer in operationlaLayers {
self.extract(layer)
}
}
return map
}
}
extension MapViewController {
41
private func extract(_ layer: AGSFeatureLayer) {
print("Extracting \(layer.name)")
layer.load { (error) in
guard error == nil else {
print("Error loading layer: \(error!.localizedDescription)")
return
}
layer.featureTable?.load(completion: { (error) in
guard error == nil else {
print("Error loading feature table: \(error!.localizedDescription)")
return
}
guard let layerTable = layer.featureTable else {
print("Table is absent")
return
}
let params = AGSQueryParameters()
params.whereClause = "1=1"
if let serviceFeatureTable = (layerTable as? AGSServiceFeatureTable) {
serviceFeatureTable.queryFeatures(with: params, queryFeatureFields:
.loadAll) { (result, error) in
guard let array = result?.featureEnumerator().allObjects,
!array.isEmpty else {
print("Result array is empty")
return
}
for res in array {
let attr = res.attributes
print(attr)
}
}
} else {
print("Not a Service feature")
}
})
}
}
}
Додаток В. Графічні матеріали
08-22.БДР 014.14.000.ПЛ
Змн.
Арк.
№ докум.
Розроб.
Кушнір С.С.
Перевір.
Месюра В.І.
Т. Контр.
Підпис
Дата
Загальний алгоритм роботи
програмного модуля апроксимації
функцій на основі радіально-базисної
нейронної мережі
Арк.
Реценз.
Рейда О.М.
Н. Контр.
Озеранський В.С.
Затверд.
Яровий А.А.
Маса
Літ.
1
Масштаб
Аркушів
1КН-14б
5
Download