Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_OOP_2009.doc
Скачиваний:
3
Добавлен:
18.09.2019
Размер:
1.36 Mб
Скачать

12. Поняття виключної ситуації, наведіть приклади виключних ситуацій. Як реалізуються виключні ситуації та їх обробка в об’єктно-орієнтованих мовах програмування?

Виключна ситуація (exception) є несподіваною подією — помилкою — в програмі. Під винятковою ситуацією ми розумітимемо якусь непередбачену подію, здатну вплинути на подальше виконання програми. При обробці такої ситуації Delphi, як завжди, працює з об'єктами. З точки зору компілятора Delphi виняткова ситуація - це об'єкт. Для роботи з цим специфічним об'єктом в Delphi (точніше, в Object Pascal) були введені наступні мовні конструкції: try .. except і try .. finally. Розглянемо ці мовні конструкції детальніше.

Приклад:

try {виконуваний код};

except on Exceptionl do {код, що виконується в разі виникнення помилки 1};

on Exception2 do {код, що виконується в разі виникнення помилки 2};

else {код, обробник всіх не перехоплених раніше помилок};

end;

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

try

а:=10;

b:=0;

c:=a/b;

except on Ezerodivide do Messagebox(''Ділити на нуль не можна!'');

end;

Отже, як можна бачити з наведеного вище прикладу, для обробки різних виключень служать різні оператори. Розглянемо детальніше оператора обробки on .. do. Даний оператор знаходиться усередині розділу except і може мати дві форми:

on <клас виключення> do <оператор>; або

on <ім'я>: <клас виключення> do <оператори, в яких можна використовувати властивості виключення>

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

С++

Якщо виклик функції прошел успішно і виняткова ситуація не виявлена, C++ просто ігнорує операторів catch. Оскільки обробник може перехопити похідні особливі ситуації декількох типів, порядок, в якому йдуть обробники в блоці, що перевіряється, істотний.

try { // ... }

catch (ibuf) { // обробка переповнювання буфера введення }

catch (io) { // обробка будь-якої помилки введення-виводу }

catch (stdlib) { // обробка будь-якої особливої ситуації в бібліотеці }

catch (...) { // обробка всіх останніх особливих ситуацій }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]