Обработка на иключенията в MS Visual C++ – try-блок, throw-блок, catch-блок


  • Определение:

Изключителна ситуация (накр. изключение) представлява неочаквано или не толкова често срещано събитие възникнало по време на изпълнение на дадена програма

  • Примери: недостиг на памет, деление на нула, прекъснат кабел (при мрежови конфигурациии) и др.

обща идея:

Обработката на изключения (exception handling) в съвременните ЕП и по-специално в обектно ориентираното програмиране включва следните средства:

–        дефиниране на изключения (Е)

–        разпознаване на настъпването на Е

–        програмен код – отговор на Е (обработчик на изключения, прихващане на Е), който трябва да бъде изпълнен при настъпването на Е

Дефиниране на изключения в етапното птограмиране

  • Предназначение: При възникване на изключителна ситуация, обикновено се налага някаква информация да се предаде на обработчика на изключения
  • Реализация на този обмен в различните ЕП:
    • чрез глобални променливи (Ada, PL/I) – най-простият механизъм, но тромав, бавен, и труден за четене
    • параметризирани обработчици (Modula-3, CLU) – по-сложен и по-малко ефективен, но по-гъвкав и четлив
    • специални обекти-изключения (Java, C++) – елегантен подход, който позволява използването на йерархия от подтипове за обработване на изключения

Разпознаване на настъпването на етапи в етапното програмиране – обявяване

  • Предназначение: Да се сигнализира за условие, което не може да се обработи с текущата процедура или метод – текущата подпрограма прекратяват дейността си (по анормален начин) и обявява  (raising, throwing в Java) изключителната ситуация на извикващата я програмна част
  • Реализация в различните ЕП:

–        Предварително дефинираните Е се обявяват автоматично, а тези дефинирани от потребителя – явно, чрез raise (throw)

–        В Modula-3, CLU и Java възможността една процедура или метод да обяви Е се разглежда като част от нейната входно/изходна спецификация и трябва да бъде декларирана явно в заглавната част на процедурата или метода

–        В С++ – явно обявяване при появя на Е

Предимства на механизма за обработка на Е

  • Сигурност – появата на аномалия ще спре изпълнението на програмата по елегантен начин и ще даде съобщение, че се е появила изключителна ситуация (в някои случаи дори ако няма определен от програмиста обработчик на изключението)
  • Яснота на алгоритъма – обработчиците на изключения се кодират само там, където е възможно да се наложи обработка на съответните изключения. Останалата част от кода не се натоварва с подробности около обработката на грешки

Обработка на Е в С++

Ситуациите, в които може да възникне грешка по време на изпълнение на програмата в С++ се класифицират в три групи:

  • нормално изпълнение на функция, която връща код на завършване, който може и да е индикация за грешка (напр. ф-я за отваряне на файл). В този сл. от програмиста се очаква да изследва код на завършване и …
  • неправилно изпълнение (напр. грешно предаване на параметри или извикване на ф-я в погрешен контекст) –  проверката дали са верни подобни предусловия за правилното изпълнение на части от кода се проверяват обикновено с макроса assert
  • изключения са ситуации на неправилно изпълнение на програмата в следствие на причини, които са независими от управлението на програмата (недостиг на памет, В/И грешки и др.) –  обработват се чрез обявяване и прихващане на изключения

Е в С++ са елементи данни, които могат да бъдат използвани да връщат полезна информация

Синтаксис за дефиниране на защитен код try-блок

try <блок>

<посл. от обработчици на изключения>

Където:

  • <блок> е съставен оператор, който съдържа throw-израз пряко или в блока на ф-я, към която той предава управлението
  • <посл. от обработчици на изключения> включва произволен брой catch-блокове (обработчици на Е)

! try-блоковете могат да се влагат пряко или чрез блока на ф-я, към която той предава управлението

Синтаксис за обявяване на изключение throw-израз

throw <израз> незад.

Където:

  • <израз> е аналогичен на този от оператора return
  • throw без аргумент е допустим само в catch-блок или ф-я активирана от него и предизвиква обявяване на изключението, което се обработва в момента

Синтаксис за дефиниране на обработчик на изключение catch-блок

catch (<декларация на изключения>)                   <блок>

Където:

  • <декларация на изключения> е списък подобен на <списък формални параметри> при деклариране на прототипи на функции и показва типовете изключения, които обработчикът прихваща* (!всеки предварително дефиниран стандартен или потребителски тип на С++)
  • <блок> е кодът на обработчика на изключения, който прихваща изключенията от съответните типове, обявени чрез throw-изрази

* обработчик за тип class или негов псевдоним(&) прихваща всички обявени изключения от същия тип или кой да е негов наследник. Ето защо обработчик за клас-предшественик не бива да предхожда тези за наследниците му

! catch-блокът допуска и следния синтаксис:

catch (…) <блок>, което означава, че обработчикът прихваща произволни изключения (системни и потребителски). !Трябва да е последният в последователността от обработчици за даден try-блок

Подобни статии

  • Реализация на понятието наследяване в MS Visual C++. Наследяване на методи. Правила за достъп до полета и методи. Активиране на конструкторите и деструкторите на предшествениците
    Наследяване в С++. Единично публично наследяване В С++ е реализирано, както единично така и множествено наследяване като се допуска наследяване както полета, така и на методи (в тази лекция ще раз-глеждаме само единично наследяване) Синтаксис: Class <име_на_клас>:...
  • Програмиране на алгоритми за обработка на масив
    Масивът е вътрешна, статична структура от еднотипни данни, последователно разположени в паметта и притежаващи общо име. Всяка отделна данна се нарича елемент на масива и се характеризира с име, тип на масива (базов тип) и индекс. Името на масива е аналогично на име на променлива...
  • Java Servlet технологията
    Когато Интернет започва да се използва за предоставяне на услуги, доставчиците на услуги усещат нуждата за динамично съдържание. Затова е създадена технологията на аплетите, един от първите опити за постигане на тази цел. Те работят на клиентската платформа. В същото време разраб...
  • Метрики в софтуерното инжинерство
    Какво включват разходите за софтуерното инженерство? Измерване в софтуерното производство Какво е софтуерна метрика? Класификация на софтуерните метрики Примери за софтуерни метрики Проблеми на използването на софтуерните метрики Какво включват разходите за софтуе...
  • Оператори за цикъл във Visual Basic
    Цикли. Предназначение и приложение. Видове Цикълът представлява група повтарящи се действия, които се изпълняват за различни стойности на участващите в тях величини. Всеки цикъл би могъл да се разгледа като съставен от четири основни части: Инициализация – в нея задаваме н...
Публикувано в Програмиране с етикети , , , , , . Постоянна връзка.

Коментарите са забранени.