Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Функции, помещаемые в библиотеку *.dll





Таблица 6.1


 

№ варианта № функций № варианта № функций № варианта № функций
  1, 15   5, 12   1, 10
  2, 14   6, 11   2, 9
  3, 12   7, 10   3, 8
  4, 11   8, 9   4, 7
  5, 10   3, 15   5, 6
  6, 9   4, 14   2, 13
  7, 8   5, 13   3, 12
  2, 15   6, 12   4, 11
  3, 14   7, 11   5, 10
  4, 13   8, 10   6, 9

 

 


Лабораторная работа № 7

Обработка исключительных ситуаций в Visual C#

 

 

7.1. Цель работы

Ознакомление с классом исключительных ситуаций Visual C# и выработ- ка навыков создания приложений, осуществляющих обработку возникающих исключительных ситуаций

 

7.2. Теоретические сведения

 

Любое взаимодействие программы с операционной системой (ОС) на предмет получения ее ресурсов (открытия файла, места в оперативной памяти и т.п.) может окончиться неудачно. Выполнение любого вычисления может окончиться делением на нуль или переполнением. Платой за надежную работу программы в таких условиях является введение многочисленных проверок, га- рантирующих надежную работу программы при возникновении внештатных ситуаций. Как правило, бывает недостаточно просто в очередной конструкции условного перехода (типа if… then) поставить оператор выхода exit, а требу- ется отменить целую последовательность действий, предшествующих некор- ректному. Код программы, осуществляющий эти действия, будет маскировать четкую структуру главного алгоритма и приводить к ухудшению читабельности программы. Выход из данной ситуации был предложен разработчиками ОС Windows NT и получил название структурной обработки исключительных си- туаций (ИС). Позднее его поддержка была введена во все ОС, а также в среды разработки программ.

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

паратуры или неправильной работой программы, например делением на ноль или переполнением. Обычно эти события приводят к завершению программы с системным сообщением об ошибке. С# дает программисту возможность вос- становить работоспособность программы и продолжить ее выполнение. Ис- ключения С# не поддерживают обработку асинхронных событий, таких как ошибки оборудования или прерывания, например нажатия клавиш Ctrl^C. Ме- ханизм исключений предназначен только для событий, которые могут произой-

ти в результате работы программы и указываются явным образом. Исключения возникают тогда, когда некоторая часть программы не смогла сделать то, что от нее требовалось. При этом другая часть программы может сделать что-нибудь иное.

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

только для лучшей структуризации программы. Главное то, что функция, обна- ружившая ошибку, может не знать, что предпринимать для ее исправления, а использующий эту функцию код может знать, что делать, но не уметь опреде- лить место возникновения. Это особенно актуально при использовании библио-


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

Исключения генерирует либо среда выполнения, либо программист с по-

мощью оператора throw. Наиболее часто используемые предопределенные ис- ключительные ситуации в C# следующие:

ArithmeticException – ошибка в арифметических операциях или преобразованиях (является предком DivideByZeroException и OverFlo- wException);

ArrayTypeMismatchException – попытка сохранения в массиве элемента несовместимого типа;

DivideByZeroException – попытка деления на ноль;

FormatException – попытка передать в метод аргумент неверного формата;

IndexOutOfRangeException – индекс массива выходит за границы диапазона;

InvalidCasrException – ошибка преобразования типа;

OutOfMemoryException – недостаточно памяти для создания нового объекта;

OverFlowException – переполнение при выполнении арифметических операций;

StackOverFlowException – переполнение стека.

 

Все перечисленные исключения определены в пространстве имен System. Все они являются потомками класса SystemException. Исключе- ния обнаруживаются и обрабатываются оператором try, который имеет сле- дующий синтаксис:

try блок [блоки catch] [блок finally]

Отсутствовать могут либо блоки catch, либо блок finally, но не оба

одновременно. Оператор try содержит три части:

1) контролируемый блок – составной оператор, предваряемый ключе-

вым словом try. В контролируемый блок включаются потенциально опасные операторы программы. Все функции, прямо или косвенно вызываемые из бло- ка, также считаются ему принадлежащими.

2) один или несколько обработчиков исключений - блоков catch, в которых описывается, как обрабатываются ошибки различных типов.

3) блок завершения finally выполняется независимо от того, возникла ошибка в контролируемом блоке или нет.

Алгоритм обработки исключения выглядит следующим образом:

1. Обработка исключения начинается с появления ошибки. Функция или операция, в которой возникла ошибка, генерирует исключение. Как правило,

 

 


исключение генерируется не непосредственно в блоке try, а в функциях, пря- мо или косвенно в него вложенных.

2. Выполнение текущего блока прекращается, отыскивается соответст- вующий обработчик исключения и ему передается управление.

3. Выполняется блок finally, если он присутствует (этот блок выпол- няется и в том случае, если ошибка не возникла).

4. Если обработчик не найден, вызывается стандартный обработчик ис-

ключения. Его действия зависят от конфигурации среды. Обычно он выводит на экран окно с информацией об исключении и завершает текущей процесс.

Обработчики исключений должны располагаться непосредственно за

блоком try. Они начинаются с ключевого слова catch, за которым следует в скобках тип обрабатываемого исключения. Можно записать один или несколь- ко обработчиков в соответствии с типами обрабатываемых исключений. Блоки catch просматриваются в том порядке, в котором они записаны, пока не будет найден соответствующий типу сгенерированного исключения. Существуют три формы записи обработчиков catch:

catch (тип имя) { …// тело обработчика} catch (тип) {… // тело обработчика} catch () {… // тело обработчика}

Первая форма применяется, когда имя параметра используется в теле об-

работчика для выполнения каких-либо действий, например вывода информации об исключении. Вторая форма не предполагает использования информации об исключении, играет роль только его тип. Третья форма применяется для пере- хвата всех исключений.

При генерации ИС их обработчики просматриваются в порядке их распо-

ложения в программе. Поэтому обработчик третьего типа следует помещать только после всех остальных. Также следует учитывать, что если обработчик ИС родительского класса будет стоять перед обработчиком ИС дочернего клас- са, то последний в этом случае не получит управления. Если исключения в за- щищаемом блоке не возникло, то все обработчики пропускаются.

В любом случае, произошло исключение или нет, управление передается

в блок завершения finally (если он существует), а затем первому оператору, находящемуся непосредственно за оператором try. В завершающем блоке обычно записываются операторы, которые необходимо выполнить независимо от того возникло исключение или нет. Обычно в этот блок помещают операто- ры, освобождающие ресурсы, выделяемые ОС программе, поэтому он еще ино- гда называется блоком защиты ресурсов.

Операторы try могут быть многократно вложены друг в друга. Исклю- чение, которое возникло во внутреннем блоке try и не было перехвачено соот- ветствующим блоком catch, передается на верхний уровень, где продолжается поиск подходящего обработчика. Если на внутреннем уровне недостаточно ин- формации для того, чтобы провести полную обработку ошибки, программист может выполнить частичную обработку и сгенерировать исключение повторно,

 


чтобы оно было обработано на верхнем уровне. Генерация исключения выпол- няется при помощи оператора throw, который имеет следующий синтаксис:

throw[выражение]

 

 

Конструкция без параметра применяется только внутри блока catch для повторной генерации исключения. Тип выражения, стоящего после throw, оп- ределяет тип исключения, например:

throw new DivideByZeroException();

Здесь после оператора throw записано выражение, создающее объект

стандартного класса «ошибка деления на 0» с помощью оператора new.

При использовании throw с параметром, последний должен быть объек- том, порожденным от стандартного класса System.Exception и опреде- ляющим вид исключения. Этот объект используется для передачи информации об исключении его обработчику.

При генерации исключения выполнение текущего блока прекращается и происходит поиск соответствующего обработчика с передачей ему управления. Обработчик считается найденным, если тип объекта, указанного после throw, либо тот же, что задан в параметре catch, либо является производным от не- го.

 

 

7.3. Программа работы

Добавить в программу калькулятора с динамически подключаемыми биб- лиотеками из второй лабораторной работы обработку возможно возникающих

в ней исключительных ситуаций (деления на ноль, ввода чисел вместо цифр,

отсутствия динамически подключаемой библиотеки и т.д.).

 

 


Лабораторная работа № 8 ( дополнительная )





Поделиться с друзьями:


Дата добавления: 2017-02-11; Мы поможем в написании ваших работ!; просмотров: 285 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Бутерброд по-студенчески - кусок черного хлеба, а на него кусок белого. © Неизвестно
==> читать все изречения...

2464 - | 2389 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.