|
||||||||
|
Защищенный блок кода
Радикальный выход из положения предложен, в частности, в языке Object Pascal: вынести всю обработку исключительных ситуаций (ИС) из основной части, выделив в составе блока кода: собственно реализацию алгоритма; обработчик ИС; заключительную часть, выполняющую необходимые действия по корректному завершению вне зависимости от того, возникали или нет исключительные ситуации.Рассмотрим два примера:
Блок, ограниченный зарезервированными словами try и end и содержащий одно из зарезервированных слов finally или except, называется защищенным блоком кода. Существует два основных вида таких блоков; каждый из примеров соответствует своему виду. Первый пример соответствует случаю, когда необходимо возвратить выделенные программе ресурсы даже в случае аварийной ситуации. Синтаксис блока try...finally таков:
Следующие за try операторы выполняются в обычном порядке. Если за это время не произошло никаких ИС, далее выполняются те операторы, которые стоят после finally. В случае, если между try и finally произошла ИС, управление немедленно передается на оператор(ы) после finally, которые называются кодом очистки (cleanup code; в документации встречается также термин termination code). Допустим, вы поместили после try операторы, которые должны выделить вам ресурсы системы (дескрипторы блоков памяти, файлов, контекстов устройств и т. п.). Тогда операторы, освобождающие их, следует поместить после finally, и ресурсы будут освобождены в любом случае. Блок try?finally, как можно догадаться, называется блоком защиты ресурсов. Первый пример собственно обработки ИС не содержит: в нем важен только факт ее возникновения. Для реакции на конкретный тип ситуации применяется блок try... except. Синтаксис его следующий:
Во втором примере, как и в первом, выполнение блока начинается с секции try. В случае отсутствия исключительных ситуаций только она и выполняется. Секция except получает управление в случае возникновения ИС. Обработчик ИС состоит из набора директив on...do, определяющих реакцию приложения на определенную ситуацию. Каждая директива связывает ситуацию (on...), заданную своим именем, с группой операторов (do...). При возникновении ИС директивы просматриваются последовательно, в порядке их появления. Если возникла ситуация, не определенная ни в одной из директив, вызывается обработчик ИС по умолчанию. После обработки происходит выход из защищенного блока, и управление обратно в секцию try не передается.
Для комментария : kadan@grsu.grodno.by | |||||||||||
За содержание страницы отвечает Гончарова М.Н. © Кафедра СПиКБ, 2002-2017 |