2. Винятки
Обробка виняткових ситуацій (exception handling) - механізм мов програмування, призначений для опису реакції програми на помилки часу виконання й інші можливі проблеми (виключення), які можуть виникнути при виконанні програми і призводять до неможливості (безглуздості) подальшого відпрацювання програмою її базового алгоритму. У російській мові також застосовується більш коротка форма терміна: «обробка виключень».
переривання виняток програма помилка
2.1 Загальне поняття виняткової ситуації
Під час виконання програми можуть виникати ситуації, коли стан даних, пристроїв введення-виведення або комп'ютерної системи в цілому робить подальші обчислення відповідно до базового алгоритмом неможливим або безглуздими. Класичні приклади подібних ситуацій наведені нижче Нульове значення знаменника при виконанні операції цілочисельного ділення. Результату у операції бути не може, тому ні подальші обчислення, ні спроба використання результату ділення не приведуть до вирішення завдання. Помилка при спробі вважати дані із зовнішнього пристрою. Якщо дані не вдається ввести, будь-які подальші заплановані операції з ними безглузді. Вичерпання доступної пам'яті. Якщо в якийсь момент система виявляється не в змозі виділити достатній для прикладної програми обсяг оперативної пам'яті, програма не зможе працювати нормально. Поява сигналу аварійного відключення електроживлення системи. Прикладну задачу, по всій видимості, вирішити не вдасться, в кращому випадку (при наявності якогось резерву харчування) прикладна програма може потурбуватися збереженням данних.Появленіе на вході комунікаційного каналу даних, що вимагають негайного зчитування. Чим би не займалася в цей момент програма, вона повинна перейти до читання даних, щоб не втратити інформацію, що надійшла.
2.2 Види виняткових ситуацій
Виняткові ситуації, що виникають при роботі програми, можна розділити на два основних типи: синхронні і асинхронні, принципи реакції на які істотно розрізняються. Синхронні виключення можуть виникнути тільки в певних, заздалегідь відомих точках програми. Так, помилка читання файлу або комунікаційного каналу, нестача пам'яті - типові синхронні виключення, оскільки виникають вони тільки в операції читання з файлу або з каналу або в операції виділення пам'яті відповідно. Асинхронні виключення можуть виникати в будь-який момент часу і не залежать від того, яку конкретно інструкцію програми виконує система. Типові приклади таких винятків: аварійний відмова харчування або надходження нових даних. Деякі типи помилок можуть бути віднесені як до синхронним, так і до асинхронним. Наприклад, інструкція поділу на нуль на багатьох програмно-апаратних платформах призводить до синхронного виключенню, але на деяких платформах за рахунок глибокої конвейеризации виключення може виявитися асинхронним.
2.3 Оброблювачі винятків
У відсутність власного механізму обробки виключень для прикладних програм найбільш загальною реакцією на будь-яку виняткову ситуацію є негайне припинення виконання з видачею користувачеві повідомлення про характер винятку. Можна сказати, що в подібних випадках єдиним і універсальним обробником винятків стає операційна система. Наприклад, в операційну систему Windows вбудована утиліта Dr. Watson, яка займається збором інформації про необробленому виключення і її відправкою на спеціальний сервер компанії Microsoft. Можливо ігнорування виняткової ситуації та продовження роботи, але така тактика небезпечна, оскільки призводить до помилкових результатів роботи програм або виникнення помилок згодом. Наприклад, проігнорувавши помилку читання з файлу блоку даних, програма отримає в своє розпорядження не ті дані, які вона повинна була вважати, а якісь інші. Результати їх використання передбачити неможливо. Обробка виняткових ситуацій самою програмою полягає в тому, що при виникненні виняткової ситуації, управління передається деякого заздалегідь визначеному оброблювачу - блоку коду, процедурі, функції, які виконують необхідні дії. Існує два принципово різних механізму функціонування обробників винятків.
Обробка з поверненням передбачає, що обробник виключення ліквідує виниклу проблему і призводить програму в стан, коли вона може працювати далі за основним алгоритмом. У цьому випадку після того, як виконається код обробника, управління передається назад в ту точку програми, де виникла виняткова ситуація (або на команду, що викликала виняток, або на наступну за нею, як в деяких старих діалектах мови BASIC) і виконання програми продовжується. Обробка з поверненням типова для обробників асинхронних винятків (які зазвичай виникають з причин, не пов'язаним прямо з виконуваним кодом), для обробки синхронних винятків ...