На головну

Винятки та їх об'єктна обробка

  1. III. Обробка списків за допомогою форми
  2. Важливі виключення з теореми
  3. Введення і обробка даних в Excel
  4. Глава 8. статічтіческая обробка радіометричних вимірювань
  5. ДАНІ І ЇХ ОБРОБКА
  6. Будівельне устаткування, РІЗАННЯМ
  7. Індукція методом виключення

винятки (exception) - Реакція обчислювальної системи на деяку особливу ситуацію, Що виникла під час роботи програми. Найчастіше такі особливі ситуації пов'язані з виникненням в виконуваному коді програми будь-якої помилки - звернення до неіснуючого файлу, неправильна робота з адресним покажчиком, невідповідність типів даних і т. Д. У будь-якому випадку програма не може далі виконувати і аварійно завершується з висновком деякого коду помилки. Будь-яка програма, яка претендує на роль сучасної, повинна вміти перехоплювати такі ситуації і, по можливості, обробляти їх тим чи іншим способом. Для цього зазвичай в програму вставляється велике число перевірок різних умов, що робить логіку програми досить заплутаною. Механізм винятків дозволяє спростити обробку особливих ситуацій, виділивши в програмі спеціальні блоки - обробники винятків.

Всі основні сучасні операційні системи та мови програмування підтримують централізовану обробку винятків, яка будується на об'єктних принципах. Це означає, що для кожного подібного винятку автоматично створюється об'єкт відповідного класу. Для цього всі типові помилки часу виконання класифіковані на кілька десятків класів. У мовах Delphi Pascal і Java базові бібліотеки класів містять спеціальну подіерархію класів, які описують найбільш типові помилки. Наприклад, в бібліотеці VCL родоначальником цієї ієрархії є клас Exception. Цей клас містить близько десяти різних конструкторів, які використовуються при створенні об'єкта-виключення. Кожен створений об'єкт несе інформацію про виниклу особливої ??ситуації.

від класу Exception породжуються дочірні підкласи для різних типів помилкових ситуацій, наприклад:

· EInOutError - Помилки при виконанні операцій введення або виведення;

· EIntError - Помилки цілочисельний арифметики;

· EMathError - Помилки при обробці дійсних чисел;

· EConvertError - Помилки перетворення типів;

· EAccessViolation - Помилки, пов'язані з неправильним використанням пам'яті.

Ці класи, в свою чергу, можуть бути батьками для більш конкретних класів, наприклад - EDivByZero (Цілочисельне ділення на нуль). Знання ієрархії класів винятків дуже важливо для грамотного застосування даного механізму.

Для об'єктної обробки винятків, перш за все в початковому тексті, необхідно знайти ті оператори, які потенційно можуть бути джерелами таких помилок. Ці оператори можуть йти послідовно один за одним або можуть бути розкидані по всьому вихідного коду. Такі оператори можна назвати критичнимабозахищенимкодом. Початок критичного коду позначається спеціальною директивою try, за якої йде один або кілька критичних операторів. Після них розміщується спеціальний блок обробки винятків. Початок цього блоку позначається директивою except в мові програмування Delphi Pascal і директивою catch в Java. Загальний вигляд критичного коду виглядає наступним чином:

try

критичний оператор (и)

except

обробники винятків

end;

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

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

except

on EIntError do ...;

on EInOutError do ...;

on ІмяКласса do ...;

end;

У цьому блоці важливим є порядок слідування обробників. Якщо необхідно перехопити більш конкретну помилку, то в списку її необхідно вказати раніше, Ніж загальний клас.

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

Крім стандартного блоку try-except-end, досить часто використовується інший різновид:

try

захищений код

finally

оператори завершення

end;

На відміну від блоку except, блок finally виконується незалежно від появи чи не поява помилки в блоці try. блок finally доцільно використовувати для звільнення зайнятих раніше ресурсів. блоки except и finally можна комбінувати один з одним.

При необхідності виключення можна згенерувати програмно за допомогою спеціального оператора raise (throw в мові Java), після якого задається ім'я одного з класів подіерархіі винятків і один зі стандартних конструкторів. наприклад:

raise EMathError.Create;

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

Контрольні питання

1. Які класи називаються інтерфейсними?

2. Які умови вводяться інтерфейсні класи?

3. Який механізм успадкування доступний для інтерфейсних класів?

4. Як взаємодіють інтерфейсні і реальні класи?

5. Які типи класів може включати об'єктна модель програми?

6. Чим інтерфейсні класи відрізняються від абстрактних класів?

7. Як виконується опис інтерфейсних класів в мові Java?

8. Як принцип поліморфізму застосовується до інтерфейсним типам?

9. Які інтерфейси є базовими для стандартної бібліотеки контейнерів мови Java?

10. Які контейнери реалізовані в стандартній бібліотеці класів мови Java?

11. Що таке ітератори і як вони використовуються?

12. Які методи оголошуються в стандартних Ітератор мови Java?

13. Що таке компаратори і як вони використовуються?

14. Як оголошуються інтерфейсні класи в мові Delphi Pascal?

15. Що таке узагальнені класи?

16. Як оголошуються шаблонні функції в мові С ++?

17. Коли і яким чином обробляються шаблонні функції?

18. Наведіть приклад опису та використання шаблонної функції.

19. Що таке шаблонний клас і що він може містити?

20. Наведіть приклад опису шаблонного класу.

21. Як виконується опис методів шаблонного класу за межами класу?

22. Що відбувається при обробці оголошень об'єктів шаблонних класів?

23. Що таке STL?

24. Що таке виключення?

25. У чому сенс об'єктної обробки винятків?

26. Наведіть приклади найбільш типових класів винятків.

27. Що необхідно зробити в програмах для обробки винятків?

28. Наведіть загальну структуру програмного коду для обробки винятків?

29. Як оформляється блок завершення і чим він відрізняється від блоку обробки винятків?

30. Як програмно можна згенерувати виключення?

 




Агрегація і композиція | Узагальнення і спадкування | Порядок виконання роботи; | Приклади тестових завдань | Перевизначення методів. Поліморфні (віртуальні) методи | Поліморфні об'єктні покажчики | Контейнери та їх об'єктна реалізація | практичні завдання | Приклади тестових завдань | інтерфейсні класи |

© um.co.ua - учбові матеріали та реферати