Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Структурна обробка виняткових ситуацій



Структурна обробка виняткових ситуацій - це система, що дозволяє програмісту при виникненні помилки (виняткової ситуації) зв'язатися з кодом програми, підготовленим для обробки такої помилки. Це виконується за допомогою мовних конструкцій, що як би “охороняють” фрагмент коду програми і визначають оброблювачі помилок, що будуть викликатися, якщо щось піде не так у “охоронюваному” ділянці коду. У даному випадку поняття виняткової ситуації відноситься до мови і не потрібно його плутати із системними винятковими ситуаціями (hardware exceptions), такими як General Protection Fault. Ці виняткові ситуації звичайно використовують переривання й особливі стани “заліза” для обробки критичної системної помилки; виняткові ситуації в Delphi же незалежні від “заліза”, не використовують переривань і використовуються для обробки помилкових станів, з якими підпрограма не готова мати справу. Системні виняткові ситуації, звичайно, можуть бути перехоплені і перетворені в мовні виняткові ситуації, але це тільки одне з застосувань мовних виняткових ситуацій.

При традиційній обробці помилок, помилки, виявлені в процедурі звичайно передаються назовні (у процедуру, що викликала,) у виді значення функції, що повертається, чи параметрів глобальних перемінних (прапорців). Кожна зухвала процедура повинна перевіряти результат виклику на наявність помилки і виконувати відповідні дії. Часто, це просто вихід ще вище, у більш верхню зухвалу процедуру і т.д. : функція A викликає B, B викликає C, C виявляє помилку і повертає код помилки в B, B перевіряє код, що повертається, бачить, що виникла помилка і повертає код помилки в A, A перевіряє код, що повертається, і видає повідомлення про помилку або вирішує зробити що-небудь ще, раз перша спроба не удалася.

Така “пожежна бригада” для обробки помилок трудомістка, вимагає написання великої кількості коду в який можна легко помилитися і який важко відлагоджувати.

Одна помилка в коді чи програми переприсвоєння в ланцюжку значень, що повертаються, може привести до того, что не можна буде зв'язати помилковий стан з положенням справ у зовнішньому світі. Результатом буде ненормальне поводження програми, утрата чи даних ресурсів, чи крах системи.

Структурна обробка виняткової ситуації заміщає ручну обробку помилок автоматичної, сгенерованої компілятором системою повідомлення. У приведеному вище прикладі, процедура A установила б “охорону” зі зв'язаним оброблювачем помилки на фрагмент коду, у якому викликається B. B просто викликає C. Коли C виявляє помилку, то створює (raise) виняткову ситуацію. Спеціальний код, сгенерований компілятором і убудований у Run-Time Library (RTL) починає пошук оброблювача даної виняткової ситуації. При пошуку “захищеного” ділянки коду використовується інформація, збережена в стеці. У процедурах C і B немає такої ділянки, а в A - є. Якщо один з оброблювачів помилок, що використовуються в A, підходить по типу для виниклої в C виняткової ситуації, то програма переходить на його виконання. При цьому, область стека, використовувана в B і C, очищається; виконання цих процедур припиняється.

Якщо в A немає придатного оброблювача, то пошук продовжується в більш верхньому рівні, і так може йти, поки пошук не досягне придатного оброблювача помилок серед використовуваних за замовчуванням оброблювачів у RTL. Оброблювачі помилок з RTL тільки показують повідомлення про помилку і форсовано припиняють виконання програми. Будь-яка виняткова ситуація, що залишилася неопрацьованої, приведе до припинення виконання додатка.

Без перевірки коду, що повертається, після кожного виклику підпрограми, код програми повинний бути більш простим, а скомпільований код - більш швидким. При наявності виняткових ситуацій підпрограма B не повинна містити додатковий код для перевірки результату, що повертається, і передачі його в A. B нічого не повинна робити для передачі виняткової ситуації, що виникла в C, у процедуру A - убудована система обробки виняткових ситуацій робить усю роботу.

Дана система називається структурної, оскільки обробка помилок визначається областю “захищеного” коду; такі області можуть бути вкладеними. Виконання програми не може перейти на довільну ділянку коду; виконання програми може перейти тільки на оброблювач виняткової ситуації активної програми.




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.