Исключительные ситуации

Автор работы: Пользователь скрыл имя, 29 Февраля 2012 в 10:52, реферат

Описание

Обработка исключительных ситуаций - механизм языков программирования, предназначенный для описания реакции программы на ошибки времени выполнения и другие возможные проблемы (исключения), которые могут возникнуть при выполнении программы и приводят к невозможности (бессмысленности) дальнейшей отработки программой её базового алгоритма. В русском языке также применяется более короткая форма термина: «обработка исключений».

Содержание

Долговременность керамических изделий, наличие распространённого сырья для их изготовления, высокие санитарно-технические и художественно-декоративные качества, огнестойкость, водонепроницаемость, кислотостойкость определяют их широкое распространение во всех развитых странах.

Работа состоит из  1 файл

Реферат мсключительные ситуации.docx

— 31.82 Кб (Скачать документ)

begin

writeln(`enter NewB`);

GetMem(P, 1000);

try

writeln(`enter NewB``s try block`);

C;

writeln(`end of NewB``s try block`);

finally

writeln(`inside NewB``s finally block`);

FreeMem(P, 1000);

end;

writeln(`exit NewB`);

end;

 

Если  в A поместить вызов NewB вместо B, то программа  выведет сообщения 

следующим образом:

 

begin main

Enter A

Enter A`s try block

enter NewB

enter NewB`s try block

Enter C

Raising exception in C

inside NewB`s finally block

Inside A`s ESampleError handler

Exit A

end main

 

  Код в блоке finally выполнится  при любой ошибке, возникшей в 

соответствующем блоке try. Он же выполнится и в том  случае, если ошибки не возникло. В любом  случае память будет освобождена. Если возникла ошибка,

то  сначала выполняется блок finally, затем  начинается поиск подходящего 

обработчика. В штатной ситуации, после блока finally программа переходит на

следующее предложение после блока.

  Почему вызов GetMem не помещен  внутрь блока try? Этот вызов  может 

окончиться  неудачно и вызвать exception EOutOfMemory. Если это произошло,

то FreeMem попытается освободить память, которая  не была распределена.

Когда мы размещаем GetMem вне защищаемого  участка, то предполагаем, что B

сможет  получить нужное количество памяти, а  если нет, то более верхняя 

процедура получит уведомление EOutOfMemory.

  А что, если требуется в B распределить 4 области памяти по  схеме все- 

или-ничего? Если первые две попытки удались, а третья провалилась, то как 

освободить  захваченную область память? Можно  так:

 

procedure NewB;

var

p,q,r,s: Pointer;

begin

writeln(`enter B`);

P := nil;

Q := nil;

R := nil;

S := nil;

try

writeln(`enter B``s try block`);

GetMem(P, 1000);

GetMem(Q, 1000);

GetMem(R, 1000);

GetMem(S, 1000);

C;

writeln(`end of B``s try block`);

finally

writeln(`inside B``s finally block`);

if P <> nil then FreeMem(P, 1000);

if Q <> nil then FreeMem(Q, 1000);

if R <> nil then FreeMem(R, 1000);

if S <> nil then FreeMem(S, 1000);

end;

writeln(`exit B`);

end;

 

  Установив сперва указатели в NIL, далее можно определить, успешно ли

прошел  вызов GetMem.

  Оба типа конструкции try можно  использовать в любом месте, 

допускается вложенность любой глубины. Исключительную ситуацию можно 

вызывать  внутри обработчика ошибки, конструкцию try можно использовать

внутри  обработчика исключительной ситуации.

 

  Вызов исключительной ситуации 

В процедуре C из примера мы уже могли  видеть, как должна поступать 

программа при обнаружении состояния ошибки - она вызывает

исключительную  ситуацию:

 

raise ESampleError.Create(`Error!`);

 

После ключевого слова raise следует код, аналогичный тому, что 

используется  для создания нового экземпляра класса. Действительно, в момент

вызова  исключительной ситуации создается  экземпляр указанного класса;

данный  экземпляр существует до момента  окончания обработки 

исключительной  ситуации и затем автоматически  уничтожается. Вся 

информация, которую нужно сообщить в обработчик ошибки передается в 

объект  через его конструктор в момент создания.

Почти все существующие классы исключительных ситуаций являются

наследниками  базового класса Exception и не содержат новых свойств или 

методов. Класс Exception имеет несколько конструкторов, какой из них 

конкретно использовать - зависит от задачи. Описание класса Exception можно 

найти в on-line Help.

 

  Доступ к экземпляру объекта  exception

До  сих пор мы рассматривали механизмы  защиты кода и ресурсов, логику

работы  программы в исключительной ситуации. Теперь нужно немного 

разобраться с тем, как же обрабатывать возникшую  ошибку. А точнее, как 

получить  дополнительную информацию о коде ошибки, текст сообщения и т.п.

Как уже говорилось, при вызове исключительной ситуации (raise)

автоматически создается экземпляр соответствующего класса, который и 

содержит  информацию об ошибке. Весь вопрос в  том, как в обработчике данной

ситуации  получить доступ к этому объекту.

Рассмотрим  модифицированную процедуру A в нашем  примере:

 

procedure NewA;

begin

writeln(`Enter A`);

try

writeln(`Enter A``s try block`);

B;

writeln(`After B call`);

except

 

on E: ESampleError do writeln(E.Message);

 

on ESomethingElse do

writeln(`Inside A``s ESomethingElse handler`);

end;

writeln(`Exit A`);

end;

 

Здесь все изменения внесены в строку

 

  on ESE: ESampleError do writeln(ESE.Message);

 

Пример  демонстрирует еще одно новшество  в языке Object Pascal - создание

локальной переменной. В нашем примере локальной  переменной является ESE -

это тот самый экземпляр класса ESampleError, который был создан в процедуре 

C в  момент вызова исключительного  состояния. Переменная ESE доступна 

только  внутри блока do. Свойство Message объекта ESE содержит сообщение,

которое было передано в конструктор Create в  процедуре C.

  Есть еще один способ доступа  к экземпляру exception - использовать 

функцию ExceptionObject:

 

on ESampleError do

writeln(ESampleError(ExceptionObject).Message);

 

 

 

 

 

 

 

 

Заключение

В данной работе мы рассмотрели, как можно  использовать систему 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  литературы

  1. П. Дарахвелидзе, Е. Марков, О. Котенок   Программирование в Delphi 5
  2. В. В. Кузнецов, И.В. Абдрашитова "Основы объектно-ориентированного программирования в DELPHI", "Школьный Университет, Томск, 2008.
  3. "Delphi для учителя в примерах и задачах" часть I, "Образование и Информатика", Москва, 2006.
  4. Г.В. Галисеев "Программирование в среде Delphi 7", "Диалектика", Москва · Санкт-Петербург · Киев, 2003.
  5. Delphi 7. Основы программирования. Решение типовых задач. Самоучитель: Л. М. Климова — Санкт-Петербург, КУДИЦ-Образ, 2006 г.- 480 с.
  6. Delphi в задачах и примерах (+ CD-ROM): Никита Культин — Санкт-Петербург, БХВ-Петербург, 2008 г.- 288 с.
  7. Delphi. Профессиональное программирование: Дмитрий Осипов — Санкт-Петербург, Символ-Плюс, 2006 г.- 1056 с.

 


Информация о работе Исключительные ситуации