Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
іНФОРМАТИКА 1.doc
Скачиваний:
24
Добавлен:
15.08.2019
Размер:
13.85 Mб
Скачать
  1. Опрацювання виняткових ситуацій

Виняткові ситуації можуть виникати в процесі виконання програми тоді, коли неможливо виконати заплановані програмою операції або в комп'ютері виникла непередбачена ситуація.

Мова Object Pascal має спеціальні засоби для ефективного та зручного програмування виняткових ситуацій. Такі засоби називають захищенім блоком коду. Вони бувають двох різновидів.

Перший різновид захищеного блоку коду забезпечує продовжений виконання програми у випадку виникнення неполадок. Такий блок ще називають блоком try-finally.

В загальному випадку структура захищеного блоку першого різновиду така:

try

оператор(и)

{між try та finally записуємо оператори, у разі виконання яких можливе виникнення виняткової ситуації}

finally

оператор(и)

{між finally та end записуємо оператори, виконати які треба обов'язково навіть у разі наявності виняткової ситуації}

end;

Приклад

var

AF: File;

{файл, з яким ми працюємо}

begin

AssignFile (AF, 'MyText.pas');

try

{тут починається захищений блок}

Reset(AF);

{відкриваємо файл для читання)

...

{тут маємо деякі оператори для роботи з файлом AF}

...

finally

{початок обов'язкової до виконання частини блоку}

Close (AF) ;

{файл буде закрито незалежно від неполадок}

end;

{кінець захищеного блоку явно позначається end}

{звичайна незахищена частина програми {

end;

Захищений блок розташований між словами try та end. Усі оператори після слова try виконуються у звичному порядку до слова finally. Якщо протягом їх виконання не виникло ніяких виняткових ситуацій, то далі виконуються оператори після finally до кінця захищеного блоку end Тобто якщо нема виняткових ситуацій, то слів try-finally-end ніби немає. Якщо ж між try та finally виникла будь-яка виняткова ситуація, наприклад, нема заданого файлу чи стався збій під час читання записів цього файлу тощо, то керування негайно передається на оператори після finally. Отже, частина блоку після finally буде завжди виконуватися незалежно від наявності виняткових ситуацій, тому тут зазвичай записують оператори вивільнення ресурсів, відновлення стану пам'яті тощо. Зауважимо, що конкретний тип виняткової ситуації не має значення, важливий лише сам факт її виникнення.

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

Загалом структура захищеного блоку другого різновиду має декілька варіантів, головним можна вважати такий:

try

оператор(и)

{між try та except записуємо оператори, у випадку виконання яких можливе виникнення виняткової ситуації}

except

on Exception1(виняткова ситуація1) do оператор;

{виконається у разі виникнення Exception1}

on Exception2(виняткова ситуація2) do оператор;

{виконається у разі виникнення Exception2}

end;

Захищений блок так само розташований між словами try та end. Усі оператори після слова try виконуються у звичному порядку до слова except. Якщо протягом їх виконання не виникло ніяких виняткових ситуацій, то далі виконуються оператори після кінця захищеного блоку. Тобто в цьому випадку виконується лише секція операторів try-except, а секція except-end взагалі не береться до уваги.

Якщо ж під час виконання операторів секції try-except виникла деяка виняткова ситуація, то керування негайно передається на секцію except для її аналізу. Секція except складається в загальному випадку з багатьох операторів on-do, кожен з яких аналізує певний тип виняткової ситуації та визначає реакцію програми на випадок її появи. В загальному випадку це дає змогу продовжити виконання програми та скоригувати потрібні дані.

Після закінчення опрацювання виняткової ситуації виконання програми продовжується після кінця захищеного блоку.

Кожен оператор on-do пов'язує виняткову ситуацію, задану своїм іменем, з групою операторів (складеним оператором), які треба в цьому випадку виконати. У разі виникнення виняткової ситуації відбувається переглядання операторів on-do послідовно в порядку запису, і виконується перша група операторів опрацювання, що відповідає імені ситуації. Якщо ж виникла ситуація, не визначена жодним оператором on-do, то виконується опрацювання за замовчуванням. Це означає, зазвичай, вихід з процедури чи функції, де виникла виняткова ситуація, та стандартне повідомлення про помилку в окремому вікні, яке формує система.

Стандартні виняткові ситуації бувають такі:

EDivByZero- помилка цілочислового ділення на нуль;

EInOutError- будь-яка помилка в файлових операціях;

EFOpenError - помилка у разі відкриття потоку даних, наприклад, спроба відкрити неіснуючий файл;

EOutOfMemory - програма під час виконання просить Windows виділити їй пам'яті більше, ніж є в розпорядженні системи.

EzeroDivided При виконанні операції розподілу, якщо дільник дорівнює нулю

EconvertError При виконанні перетворення, якщо дані, які перетворюються не можуть бути приведена до необхідного виду. Найчастіше виникає при перетворенні рядка символів у число