- •Розділ 1. Об’єктно-орієнтоване програмування
- •Тема 1.1. Візуальне програмування.
- •Тема 1.2. Приклади та застосування інкапсуляції, успадкування, поліморфізму.
- •Тема 1.3. Бібліотека візуальних компонентів vcl та її базові класи.
- •1. Клас tWinControl.
- •2. Клас tСustomControl.
- •3. Клас tGraphicControl.
- •Тема 1.4. Обробка виняткових ситуацій.
- •1. Використовування виняткових ситуацій.
- •2. Протоколювання виняткових ситуацій.
- •3. Коди помилок у виняткових ситуаціях.
- •4. Виняткова ситуація eAbort. Функція Assert.
- •Розділ 2. Мова програмування Object Pascal.
- •Тема 2.1. Середовище Delphi.
- •Тема 2.2. Елементи мови Object Pascal.
- •1. Коментарі.
- •2. Логічні вирази.
- •Тема 2.3. Типи даних, процедури та функції.
- •1. Вказівники та динамічна пам'ять. Динамічна пам'ять
- •Вказівники
- •Виділення і звільнення динамічної пам'яті
- •Процедури і функції для роботи з динамічною пам'яттю
- •Тема 2.4. Управляючі структури Object Pascal.
- •Розділ 3. Програмування в середовищі Delphi.
- •Тема 3.1. Застосування списків. Способи запису/читання зі списків.
- •Є списком CheckBox елементів.
- •Тема 3.2. Масиви.
- •1. Пошук мінімального (максимального) елементу масиву.
- •2. Пошук в масиві заданого елементу.
- •Тема 3.3. Робота з файлами.
- •Тема 3.4. Типи даних визначені програмістом.
- •1. Показники.
- •2. Динамічні змінні.
- •Тема 3.5. Графічні програми.
- •1. Бітові образи.
- •2. Мультиплікація.
- •Властивості компоненту Timer
- •Тема 3.6. Приклади застосування анімацій у Delphi.
- •Тема 3.7. Рекурсія.
- •1. Крива Гільберта.
- •2. Пошук шляху.|колії|
- •Значення властивостей компоненту stringGrid1
- •3. Пошук найкоротшого шляху.|колії|
- •Тема 3.8. Компоненти для інтернету. Компонента tSocketConnection
- •Розділ 4. Бази даних.
- •Тема 4.1. Види баз даних. Структура та зв’язки між таблицями. Бази даних
- •Класифікація баз даних
- •Структура бази даних
- •Модель бази даних в Delphi
- •Тема 4.2. Модифікація структури таблиці в bde.
- •1. Зміна структури таблиці.
- •2. Встановлення перевірок правильності даних.
- •3. Завдання вторинних індексів.
- •Тема 4.3. Об’єкти відображення даних бази даних Delphi.
- •1. Класифікація компонентів відображення даних.
- •2. Елемент керування тdbGrid.
- •3. Компонент tdbEdit.
- •4. Компонент tdNavigator.
- •Тема 4.4. Обчислювальні поля і поля підстановки в Delphi.
- •1. Створення поля підстановки (поля синхронного перегляду).
- •2. Обчислювальні поля.
- •Тема 4.5. Компонента tdbEdit.
- •Тема 4.6. Переміщення по записам таблиці. Набір методів і властивостей tDataSet. Огляд
- •Клас tDataSet
- •Відкриття і закриття DataSet
- •Тема 4.7. Налаштування фільтрів.|
- •Тема 4.8. Приклади застосування пошуку.
- •Тема 4.9. Поєднання різних видів пошуку.
- •Тема 4.10. Типи даних та пошук в діапазоні.
- •Список літератури
4. Виняткова ситуація eAbort. Функція Assert.
Якщо ви уважно проглянули код системної процедури HandieException, то побачили там згадку класу EAbort. ВС EAbort служить єдиним – і дуже важливим – виключенням з правил обробки. Вона називається "тихою" (Silent) і відрізняється тим, що для неї обробка за умовчанням не передбачає висновку повідомлень на екран. Природно, все сказане торкається і породжених від неї дочірніх об'єктних класів.
Застосування EAbort виправдано у багатьох випадках. Ось один з прикладів. Хай розробляється деяка прикладна програма або деяке сімейство об'єктів, не пов'язане з VCL. Якщо в них виникає ВС, то потрібно якось сповістити про це користувача. А тим часом прямий виклик для цього функції showMessage або навіть MessageBox не завжди виправданий. Для маленької і компактної динамічної бібліотеки не потрібно тягнути за собою громаду VCL. З другого боку, у великому і різнорідному проекті не можна давати кожному об'єкту або підпрограмі самій спілкуватися з користувачем. Якщо їх розробляють різні люди, такий проект може перетворитися на вавілонську башту. Тут і допоможе EAbort. Ця виняткова ситуація не створюється системою – її повинен створювати і обслуговувати програміст.
Застосування EAbort – реальна альтернатива численним конструкціям if..then і тим більш (спаси боже!) goto. Ця ВС не повинна підміняти собою інші, ніби помилки виділення пам'яті або читання з файла. Вона потрібна, якщо ви самі бачите, що склалися певні умови і пора міняти логіку роботи програми.
If LogicalCondition then Raise EAbort.Create('Condition 1');
Якщо не потрібно визначати повідомлення, можна створити EAbort і простіше - викликавши процедуру Abort (без параметрів), що міститься в модулі SYSUTILS.PAS.
Функція Assert.
Ця процедура і супутня їй ВС EAssertionFailed спеціально перенесені в Object Pascal з мови для зручності відладки. Синтаксис її простий:
procedure Assert(expr : Boolean [; const msg: string]);
При виклику функції перевіряється, чому рівно значення переданого в неї булевого виразу ехрr. Якщо воно рівне True, то зовсім нічого не стається. Якщо ж воно рівне False, створюється ВС EAssertionFailed. Все це було б досить тривіально з погляду вже вивченого, коли б не дві обставини:
1. Приречений обробник EAssertior.Failed влаштований таким чином, що видає не шістнадцяткову адресу помилки, а ім'я файла з початковим текстом і номер рядка, де відбулася ВС, як показано на мал.
Вікно повідомлення обробника виняткової ситуації EAssertionFailed
2. За допомогою спеціальної директиви компілятора {$ASSERTIONS ON/OFF} (або, що те ж саме {$с+}/{$с-}) виникнення цих ВС можна централізований заборонити. Тобто у відладжуваному коді в режимі {$с+} можна розставити виклик Assert у всіх сумнівних і перевіряються місцях. Коли ж прийде час генерації кінцевого варіанту коду, перемиканням директиви на {$с-} весь налагоджувальний висновок забороняється.
В Delphi для обробки виняткових ситуацій використовуються спеціальні конструкції мови Object Pascal і класи на основі базового класу виняткових ситуацій Exception.
Питання для самоконтролю:
За яким алгоритмом обробляється виняткова с итуція ?
Як здійснюється протоколювання виняткових ситуацій?
Зі скількох етапів здійснюється поміщення текту у файл ресурсів?
Для чого призначена виняткова ситуація EAbort?
Яке призначення функції Assert?
