Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция-9.doc
Скачиваний:
8
Добавлен:
20.02.2016
Размер:
119.3 Кб
Скачать

8

Лекція №9 (4 год.)

ТЕМА: Класи загального призначення.

  1. Клас Exception.

  2. Виклик винятків.

  3. Створення власного класу.

  4. Клас Tfont.

  5. Клас Tpen.

  6. Клас Tbrush.

  7. Клас TCanvas.

  8. Області.

I.Клас Exception – обробіток винятків.

Клас Exception являється прямим потомком базового класу TObject. Разом зі своїми нащадками він призначений для обробітку виняткових ситуацій(винятків), що виникають при некоректних діях програми.

При роботі в середовищі Delphi експеременти з винятками погано прослідковуються, так як при кожному винятку середовище перехоплює керування програмою. В даному випадку буває корисним відключення даної опції середовища: Tools/Environment Options/ Preference флажок Break on exception.

Для обробітку винятків в Об’єктному паскалі є механізм захищеного блоку:

Try

<оператори>

except

<обробка винятків>

else

<оператори>

end;

Try

<оператори>

finally

<оператори>

end;

Захищений блок починається зарезервованим словом try (попробувати [виконати]) і закінчується словом end. Існує два типи захищених блоків except (виключити) і finally ( в завершення), що відрізняються способом обробки винятків.

В блоці except порядок виконання операторів такий: спочатку виконуються оператори секції try...except; якщо оператори виконуються без винекнення виняткових ситуацій, робота захищеного блоку завершується, і керування отримує оператор що йде за словом end; якщо при виконані частини try виник виняток, керування отримує відповідний обробник в секції except, а якщо такий там не знайдений – то перший оператор, що стоїть за словом else.

В блоці finally оператори в секції finally...end отримують керування завжди, незалежно від того, виник винято чи ні в секції try...finaly чи ні. Якщо виняток виник, всі оператори в секції try...finaly, що стоять за оператором в якому виник виняток пропускаються, і керування отримує перший оператор секції finally..end. Якщо винятку не було, цей оператор отримає керування після виконання останнього оператора секції try...finally.

Обробники винятків в блоці except мають такий синтаксис: on <клас винятку> do <оператор>;

Тут on, do – зарезервовані слова; <клас винятку> - клас обробки винятків; <оператор> - будь-який оператор ОП, крім оператора передачі керування goto на мітку по-за блоку except. Оператор що стоїть за словом do може бути складовим.

Пошук потрібного обробника здійснюється з початку списку вниз до тих пір поки не зустріниця клас, здатний обробити виняток даного типу. Якщо потрібного класу не знайдено, керування передається опрераторам, що стоять за словом else, а якщо даного виразу немає (частина else <оператори> може упускатися), виконується замовчувана обробка винятків.

Якщо для програміста важливий тільки сам факт виникнення помилки, і неважливий тип зв’язаний з даною помилкою, він може упустити в секції except..end обробники разом зі словом else, залишивши лише необхідний код реакції на будь яку помилку.

Захищені блоки можуть вложуватися один в один на необмежену глибину.

Клас Exception.

Клас Exception являєть батьківським класом для всіх класів винятків. Цей клас оголошений в модулі SysUtils.

В класі оголошено два поля:

Fmessage: string;

FhelpContext:Integer;

І визначено 8 конструкторів для створення об’єкта. За їх допомогою можна прочитати тексове повідомлення із ресурса, відформатувати його, зв’язати виняток з контекстом довідкової служби.

Також клас використовує дві властивості за допомогою яких здійснюється доступ до полів класу це

HelpContext i Message.

В Delphi визначені стандартні класи винятків, які можуть використовуватись в обробнику винятків.

Важливо пам’ятати, що шукається самий перший із можливих декількох обробників винятків.

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

On er:EdivByZero do er.----;

-EdivByZero – клас пов’язаний з помилкою при цілочисленому ділені на 0.

Для стандартних класів це дозволить використати властивість Message з стандартним повідомленням про помилку.

Винятком є лише клас EinOutError, в якому є цілочислена властивість ErrorCode з кодом помилки введення/виведення.

Для виведення повідомлень можливо використати такий спосіб:

ShowMessage(s:string);

ІІ.Виклик винятків.

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

Слово raise викликає виняток самого загального класу Exception. Якшо програміст бажає викликати виняток конкретного типу (не важно стандартного або власного), він повинен явно вказати клас створюваного в цей момент об’єкту шляхом виклику його конструктора. Наприклад наступний оператор викличе помилку введення виведення:

Raise EinOutError.Create(‘Помилка!’)

ІІІ.Створення власного класу.

Програміст може створити власний клас обробки винятків, оголосивши його нащадком Exception або будь-якого стандартного класу (цим будь-яким класом найчастіше буває клас Eabort).

Приклад:

Type

EkError = class(Eabort)

End;

Тепер можна використати його:

Try

..........

reise EkError.Create(‘Повідомлення’);

..........

except

on e:EkError do ShowMessage(E.Message);

..........

end;

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