
- •3. Об’єктно-орієнтований підхід до розробки програмного забезпечення. Дайте визначення поняття класу, об’єкту, поля, методу. З чого складається життєвий цикл об’єкту?
- •Опишіть внутрішню структуру об’єкта. Що таке інформація про тип під час виконання rtti і як вона використовується?
- •6. В чому полягає принцип спадковості? Що таке одинична та множинна спадковості? Як реалізується принцип одиничної та множинної спадковості в об’єктно-орієнтованих мовах програмування?
- •12. Поняття виключної ситуації, наведіть приклади виключних ситуацій. Як реалізуються виключні ситуації та їх обробка в об’єктно-орієнтованих мовах програмування?
- •13. Основні етапи і задачі об’єктно-орієнтованого аналізу предметної області. Які артефакти розробляються на етапі оОаналізу?
- •14. Визначення прецеденту. Що таке сценарій прецеденту та правила його опису?
- •Основні етапи і задачі об’єктно-орієнтованого проектування. Які артефакти розробляються на етапі оОпроектування?
- •18. Як під час проектування здійснюється розподіл обов’язків між класами? що таке шаблони проектування? Наведіть приклади шаблонів з прикладами їх застосування.
- •19. Охарактеризуйте мову uml та її призначення. Які діаграми для подання моделі складної системиё надає uml, дайте коротку характеристику діаграм. Для чого на діаграмах uml застосовується мова ocl?
- •Призначення та правила побудови діаграми прецедентів uml: типи зв’язків між прецедентами(з прикладами), зображення на діаграмі прецедентів ролей (акторів).
- •24. Різновид діаграм реалізації. Що спільного і в чому різниця в uml діаграмах компонентів та розгортання?
- •Призначення компонувальника та завантажувача. В чому різниця між статичним та динамічним компонування бібліотек? Дайте порівняльну характеристику програмних модулів та динамічних бібліотек.
- •Як організувати багато потокове застосування? Які проблеми можуть виникнути під час взаємодії потоків і які методи їх уникнення?
Як організувати багато потокове застосування? Які проблеми можуть виникнути під час взаємодії потоків і які методи їх уникнення?
Фундаментальна концепція в комп'ютерному програмуванні - це ідея обробки більше однієї задачі одночасно. Помножу проблеми програмування вимагають, щоб програми були здатні зупинити своє виконання, зайнятися будь-якою іншою проблемою, а потім повернутися до головного процесу. Рішення може бути отримано кількома шляхами. Спочатку, програмісти із знаннями нижнього рівня машини писали процедуру обробки переривання і зупинення головного процесу ініціювалося апаратним переривання. Хоча це працювало добре, це було складно не оперативно, так що це робило перенесення програми на новий тип машин повільним і дорогим.
Іноді переривання необхідні для обробки критичних до часу завдань, але є великий клас проблем, в яких ви просто пробуєте відокремити частину проблеми в окремо працюючий процес, так що вся програма стане легше відкликатися. Всередині програми роздільно виконують частини, називаються потоками, а загальна концепція називається multi-. Загальний приклад multi-- це користувальницький інтерфейс. При використанні потоків користувач може натиснути кнопку і отримати швидку відповідь, не змушуючи чекати, поки програма завершить свою поточну задачу.
Зазвичай, потоки - це просто спосіб виділити час у одного процесора. Але якщо операційна система підтримує декілька процесорів, кожний потік може виконуватися різними процесорами, і вони дійсно можуть працювати паралельно. Одна зі зручностей багатопотоковості на рівні мови - це те, що програміст не повинен турбуватися про те, чи є в системі кілька процесорів, або лише один. Програма логічно поділена на потоки і, якщо машина має більше одного процесора, то програма працює швидше без додаткових регулювань.
Все це робить використання потоків приємно простим. У цьому вигода: розподілу ресурсів. Якщо ви маєте більше одного запущеного процесу, які очікують доступу до одного і того ж ресурсу, ви маєте проблему. Наприклад, два процесу не можуть одночасно надсилати інформацію на принтер. Для вирішення проблеми ресурс, який може бути розділений, такий як принтер, повинен бути заблокований, поки він використовується. Так процес блокує ресурс, завершує завдання, а потім звільняє блокування, так що хтось інший може використовувати ресурс.
В загальному, в першу чергу завжди обробляються потоки з більш високим пріоритетом, а потоки з низьким пріоритетом ніколи не витісняють потоки з більш високим.
• Оскільки в системі з витісняє багатозадачність потік може бути перерваний в будь-який момент для перемикання на інший потік, то може випадково відбутися небажана взаємодія між двома потоками.
• Однією з основних помилок у багатопотокових програмах є так званий стан перегонів (race condition). Це трапляється, якщо програміст вважає, що один потік закінчить виконання своїх дій, наприклад, підготовку яких-небудь даних, до того, як ці дані будуть потрібні іншому потоку.
Для координації дій потоків операційних систем необхідні різні форми синхронізації.
• Однією з таких форм є семафор (semaphore), що дозволяє програмісту призупинити виконання потоку в конкретній точці програми до тих пір, поки він не одержить від другого потоку сигнал про те, що він може відновити роботу.
• Схоже на семафору і критичні розділи (critical sections), які являють собою розділи коду, під час виконання якого потік не може бути перервано.
Зауваження. Використання семафору може призвести до іншої поширеною помилку, пов'язаної з потоками, яка називається тупиком (deadlock). Це трапляється, коли два потоки блокують виконання один одного, а для того, щоб їх розблокувати, необхідно продовжити роботу.
Найкращий спосіб запобігти різноманітним проблемам, пов'язаним з потоками - це помістити необхідні дії в критичний розділ, в рамках якого потік не може бути перервано.
Потоки Java вбудовані в мову, що робить складні предмети більш простими. Потоки підтримується на рівні об'єктів, так що один виконуються потік представлений одним об'єктів. Java також забезпечує обмежене блокування ресурсу. Може бути заблокована пам'ять будь-якого об'єкта (який, крім усього, один із видів поділюваних ресурсів), так що тільки один потік може використовувати його одночасно. Це досягається за допомогою ключового слова synchronized. Інші типи ресурсів повинні бути явно заблоковані програмістом, звичайно з допомогою створення об'єкта для представлення блокування, що всі потоки повинні перевіряти, перш ніж звернутися до ресурсу.
…
Часто виникають проблеми, зв'язані із використанням паралельно працюючих потоків одних і тих же даних чи пристроїв. Для вирішення подібних проблем використовують такі методи:
1) Взаімоісключенія (mutex, мьютекс) - це об'єкт синхронізації, який встановлюється в особливий сигнальний стан, коли не зайнятий якимись потоком.Тільки один потік володіє цим об'єктом у будь-який момент часу, звідси і назва таких об'єктів (mutually exclusive access - взаємно виключає доступ) - одночасний доступ до загального ресурсу виключається.Після всіх необхідних дій мьютекс звільняється, надаючи іншим потокам доступ до загального ресурсу.
2) семафору представляють собою доступні ресурси, які можуть бути придбані декількома потоками в один і той же час, поки пул ресурсів не запустіє.Тоді додаткові потоки повинні чекати, поки необхідну кількість ресурсів не буде знову доступно. Семафору дуже ефективні, оскільки вони дозволяють одночасний доступ до ресурсів.
3) Події.Об'єкт, що бережеш в собі 1 біт інформації "просігналізірован чи ні", над яким визначені операції "просігналізіровать", "скинути в непросігналізірованное стан" і "чекати". Очікування на просігналізірованном подію є відсутність операції з негайним продовженням виконання потоку.Очікування на не-просігналізірованном подію призводить до призупинення виконання потоку, до тих пір, поки інший потік НЕ просігналізірует подія.
4) Критичні секції забезпечують синхронізацію подібно мьютексам за винятком того, що об'єкти, що представляють критичні секції, доступні в межах одного процесу.Події, мьютекси і семафору також можна використовувати в однопроцессном програмі,однак критичні секції забезпечують швидкий і більш ефективний механізм взаємо-виключає синхронізації - операції "отримати" і "звільнити" на критичної секції оптимізовані для випадку єдиного потоку (відсутності конкуренції) з метою уникнути будь-яких провідних в ядро ОС системнихизовов.Подібно мьютексам об'єкт, який представляє критичну секцію, може використовуватися тільки одним потоком в даний момент часу, що робить їх дуже корисними при розмежування доступу до загальних ресурсів.