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

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

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

Виняткова ситуація - помилкова ситуація, яка виникає під час компіляції програми. Кожна ВС є об'єктом. Приклади ВС: ділення на нуль, число або вираз виходить за допустимий діапазон, недостатньо пам'яті, невірний аргумент мат. ф-ії. Для роботи з ВС блоки: try ... except (застосовується для реакції на конкретний тип ситуації),try ... finally (застосовується коли необхідно повернути виділення програмі ресурси навіть у випадку аварійної сит-ії. Цей блок ще називають блок звільнення ресурсів. Дана конструкція нічого не робить із самою ВС. Задача 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;

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