|
|
ОБ’ЄКТНО ОРІЄНТОВАНЕ ПРОГРАМУВАННЯ Електронний посібник |
|
||||||||||||||||||||||||||||||||||||||||||||
Модуль 8 |
|||||||||||||||||||||||||||||||||||||||||||||||
8. Багатопотоковість.
Мережеві можливості. Платформа netbeans 8.3. Розробка додатків для платформи NetBeans 8.4. Розповсюдження додатків для платформи netbeans. Інсталятори. Bootstrap.
портативні додатки
Розрізняють процеси (processes) та потоки або нитки (threads).
Частина перекладачів перекладають thread, як "потоки виконання",
проте в низці випадків цей переклад призводить до плутанини через існування
потоків вводу/виводу (I/O Streams). Нитки є
паралельно виконуваними частинами процесу. Процеси – незалежні від інших
процесів, на відміну від ниток. Зокрема кожен процес має власний адресний
простір у пам'яті комп'ютера, нитки ж одного процесу використовують спільний
адресний простір пам'яті. У програмуванні на Java програмістам, зазвичай, доводиться мати справу з
окремими нитками. Багатонитковість (multithreading) є
важливою можливістю Java. Кожна програма Java має хоча б одну нитку виконання. Виконання програми
розпочинається зі створення головної нитки (main thread). Під час роботи з
нитками програміст може або вручну керувати ними, або ж використовувати
спеціальний менеджер – виконувач (executor). Спочатку необхідно розглянути перший спосіб
керування нитками виконання.
Це можна зробити
двома шляхами:
– другий спосіб полягає у створенні підкласу для Thread. Клас Thread уже містить реалізацію
інтерфейсу Runnable. Проте його реалізація методу run
– порожня. Тож програміст у своєму коді просто заміщає метод run:
Як бачимо, в обох
випадках для створення нової нитки викликається метод Thread.start. Рекомендованим є
перший спосіб, оскільки він
дозволяє нам розширити ще якийсь клас у нашому класі (в Java відсутнє множинне успадкування, тож неможливо
розширити декілька класів). Виконання нитки можна
призупинити за допомогою
методу sleep класу Thread. Можливо також перервати виконання нитки з іншої нитки
за допомогою методу interrupt. Скориставшись
методом join, ми можемо задати час очікування на завершення виконання іншої нитки (нескінченно
або вказаний час). Наступний
приклад демонструє роботу двох
ниток. Основна (main)
нитка запускає виконання іншої нитки, яка просто виводить
важливе повідомлення по
одному рядку через кожні 4 секунди.
Основна нитка виконання кожної секунди виводить повідомлення, що вона все ще очікує на завершення породженої нитки. Якщо виконання породженої нитки триває більше періоду часу, що заданий у змінній patience (терпіння),
то нитка перериває виконання
породженої нитки (закінчується
терпіння). При перериванні
породженої нитки, у ній виникає виняток типу InterruptedException, який обробляється
нею за допомогою конструкції
try-catch.
На сьогоднішній
день клієнти служб миттєвого обміну повідомленнями (instant messenger)
стали незамінним інструментом для всіх користувачів інтернету. Існує безліч
різних протоколів і клієнтів, про які кожен чув і які ми всі щодня
використовуємо. Але не всі знають, що покладено в основу їх роботи. Припустимо, ви встановили один з клієнтів
служб миттєвого обміну повідомленнями на ваш комп'ютер.
Після його запуску і введення імені і пароля вашого користувача, програма намагається підключитися до сервера. Що саме означає слово "підключитися"? Кожен комп'ютер в мережі має IP-адресу. Ця електронна адреса схожа на вашу
домашню адресу – вона однозначно ідентифікує
ваш комп'ютер і дозволяє іншим спілкуватися з вашим комп'ютером. Хоча існує й інший спосіб ідентифікації комп'ютерів в мережі – доменне ім'я, яке зручніше й наочніше ідентифікує
комп'ютер, ніж простий набір чисел (наприклад, www.quizful.net). В інтернеті існують
спеціальні комп'ютери, які здійснюють перетворення доменного імені в
IP-адресу і навпаки. На одному комп'ютері може
паралельно виконуватись
кілька програм. Припустимо,
що ви запустили 10 програм на своєму комп'ютері, і всі вони очікують, щоб інші комп'ютери зв'язалися з ними. Можете уявити
собі це так: вас 10 осіб у великому офісі з одним телефоном і всі чекають дзвінків від їх власних клієнтів.
Як вирішити цю проблему? Можна звичайно призначити відповідального працівника і він буде приносити телефон людині, якій телефонують, але тоді інші клієнти не зможуть додзвонитися до інших людей. Крім
того, це дуже важко і безглуздо мати відповідального працівника для
маршрутизації дзвінків. Ви, мабуть, уже здогадалися, до чого я веду – якщо
всі ці програми, що виконуються на одному комп'ютері, просять своїх клієнтів
зв'язатися з ними за певною IP-адресою, то клієнти не будуть задоволені. Ідея полягає в наступному
– мати окрему IP-адресу для кожної програми, правильно? Неправильно! Тоді може окремих телефонних номерів буде достатньо? Так! На мережевому
жаргоні "окремі телефонні номери" мають назву
порти.
Тобто існує IP-адреса, за допомогою якого
інші комп'ютери можуть розпізнавати певний комп'ютер в мережі, і порт
– число, яке
визначає якусь програму, що працює на комп'ютері. Також стає зрозумілим
й те, що дві програми на різних комп'ютерах можуть використовувати один і
той же порт (два будинки на різних
вулицях теж можуть мати один і той самий номер, чи не так?). Якщо скласти докупи все сказане, то отримаємо:
Підіб'ємо підсумки,
сокет – це комбінація IP-адреси і порту. Сокет-адреса надає можливість
іншим комп'ютерам в мережі знаходити певну програму, яка виконується на певному комп'ютері. Ви можете відображати
сокет-адресу наступним
чином: 64.104.137.58:80, де 64.104.137.58 – IP-адреса і 80 – порт. Досить про теорію, давайте перейдемо до дій. Розробимо дуже простий і наочний код на Java, який продемонструє
можливості використання сокетів:
Саме середовище IDE NetBeans є одним із сотень додатків на основі платформи NetBeans. Платформа NetBeans містить інтерфейси
API, які спрощують обробку вікон, дій, файлів і багатьох інших об'єктів, а
також функцій, типових для додатків. Кожна можливість в
додатку на платформі NetBeans може
забезпечуватись окремим модулем NetBeans,
який можна порівняти з модулем, що підключається.
Користувачі також
можуть створювати власні модулі для середовища IDE NetBeans. Наприклад, користувачі можуть створювати модулі,
що забезпечують доступ до популярних технологій та сервісів для користувачів IDE NetBeans. Також можна створити, наприклад, модуль, який буде
надавати додаткові функції редагування. Під час відеолекції було продемонстровано створення простих
застосунків на платформі NetBeans
з використанням стандартних шаблонів, які входять до складу IDE. Детальні кроки процесу можна переглянути
в офіційній документації платформи – https://college.page.link/o2Qt. Також на офіційному
сайті IDE доступні навчальна карта з платформи NetBeans (https://college.page.link/uo7u) і галерея додатків, створених на цій платформі (https://college.page.link/kmtB).
Саме середовище IDE NetBeans є одним з сотень додатків на основі платформи NetBeans. Платформа NetBeans містить інтерфейси
API, які спрощують обробку вікон, дій, файлів і багатьох інших об'єктів, а
також функцій, типових для додатків.
Вбудовані засоби створення
інсталяторів були вперше представлені як частина пакета SDK JavaFX
2.2, що дозволяє упакувати
програму у вигляді інсталятора, а потім встановити та запустити програму без
будь-яких зовнішніх залежностей на системному JRE або JavaFX SDK. Згодом ця можливість стала доступною і для проєктів Java SE. NetBeans не змінює модель розгортання
вашої програми: він сприймає програму такою, якою вона є, упаковує її разом з
середовищем виконання Java і створює інсталятор,
стандартний для операційної системи, яку ви використовуєте. Суть полягає в
тому, щоб зробити все це незалежним від того, що мають користувачі Java на цільовій машині. Ви можете взяти такий інсталятор
і запустити його на машині, де немає Java, й він
встановить і додаток, і все необхідне для виконання Java.
Розмір таких інсталяторів досить великий, тому що навіть "Привіт,
світ"-додаток
потягне за собою значну частину артефактів виконання Java. В ході відеолекції було продемонстровано створення інсталяційних
пакетів з допомогою NetBeans,
а також – за допомогою популярних відкритих інсталяторів Inno Setup та Free Extractor. Ще один варіант – використання WiX Toolset. Детальні кроки
процесу можна переглянути на сайті IDE – https://college.page.link/f4Ud.
|
|||||||||||||||||||||||||||||||||||||||||||||||