Отладка и тестирование приложений в среде Visual Studio 2005. Евсеева О.Н - 24 стр.

UptoLike

Составители: 

24
бросить текущее исключение или выбросить новое исключение, содержащее
дополнительную информацию.
Таким образом, обработку возникшей исключительной ситуации могут
выполнять несколько обработчиков, принадлежащие разным уровням цепочки
вызовов.
Блок finally
До сих пор ничего не было сказано о важном участнике схемы обработки
исключенийблоке finally. Так как рассматриваемая схема является схемой без
возобновления, то это означает, что управление вычислением неожиданно по-
кидает try-блок. Просто так в большинстве случаев этого делать нельзянужно
выполнить определенную чистку. Прежде всего, удаляются все локальные объ-
екты, созданные в процессе работы блока. В языке С++ эта работа требовала
вызова деструкторов объектов. В C#, благодаря автоматической сборке мусора,
освобождением памяти можно не заниматься, достаточно освободить стек. Но в
блоке try могли быть заняты другие ресурсыоткрыты файлы, захвачены неко-
торые устройства. Освобождение ресурсов, занятых try-блоком, выполняет
finally-блок. Если он присутствует, он выполняется всегда, сразу же после за-
вершения работы try-блока, как бы последний ни завершился. Блок try может
завершиться вполне нормально без всяких происшествий, и управление достиг-
нет конца блока, выполнение может быть прервано оператором throw, управле-
ние может быть передано другому блоку из-за выполнения таких операторов
как goto, returnво всех этих случаях, прежде чем управление будет передано
по предписанному назначению (в том числе, прежде чем произойдет захват ис-
ключения), предварительно будет выполнен finally-блок, который освобождает
ресурсы, занятые try-блоком, а параллельно будет происходить освобождение
стека от локальных переменных.
1.3.3. Схема Бертрана обработки исключительных ситуаций
Схема обработки исключительных ситуаций, предложенная в языке C#,
обладает одним существенным изъяномее можно применить некорректно.
Она позволяет, в случае возникновения исключительной ситуации, уведомить о
ее возникновении и спокойно продолжить работу, что, в конечном счете, при-
ведет к неверным результатам. Из двух золпрервать вычисление с уведомле-
нием о невозможности продолжения работы или закончить вычисления с оши-
бочным результатом вычисленияследует выбирать первое. Некорректно при-
мененная схема C# приведет к ошибочным результатам.
Бертран Мейер [11] предложил следующую схему обработки исключи-
тельных ситуаций. В основе ее лежит подход к проектированию программной
системы на принципах «Проектирования по Контракту». Модули программной
системы, вызывающие друг друга, заключают между собой контракты. Вызы-
вающий модуль обязан обеспечить истинность предусловия, необходимого для
корректной работы вызванного модуля. Вызванный модуль обязан гарантиро-