7.4. АС-ПРЕДСТАВЛЕНИЕ ЦИКЛОВ
359
5) если обработчик исключений не найден и объемлющего оператора
try-
catch
нет в контексте программы, то
вызывается функция завершения работы программы;
6) завершается оператор (7.8).
Возникает вопрос: что считается объемлющим контекстом? Тот контекст, в
который вложен оператор
try-catch
в тексте самой программы или контекст
подпрограммы, вызвавшей другую подпрограмму, в тексте которой находит-
ся данный оператор? И здесь мы естественно переходим к следующей главе
курса, в которой подробно разбираются процедуры и аспекты работы про-
грамм, связанные с их вызовами.
Но перед завершением главы нужно упомянуть о еще одной возможно-
сти. В языках
Java
и
Object Pascal
оператор
try
может завершаться опера-
тором
finally
, который выполняется в любом случае, и при нормальном за-
вершении, и при структурном выходе, и при ошибке. В языке
C++
можно
добиться почти такого же эффекта, использовав
catch(...)
, но нормальный
выход в этом случае остается неотработанным.
Идея поддержки работы с исключительными ситуациями плодотворна и
в методическом плане. В самом деле, удобнее программировать действия,
не заботясь о том, как должна реагировать программа на ситуации, когда
нарушается естественная логическая последовательность действий. Описа-
ние необходимых в этих ситуациях действий в таких случаях выносится из
основной «канвы повествования» программы в специальные разделы, четко
разграничивающие то, что необходимо выполнить в каждой из ситуаций. К
примеру, вы пишите серьезную вычислительную программу, которая может
работать с некорректными данными, вызывающими деление на ноль. Учет
этого в алгоритме потребовал бы реализовать соответствующие проверки,
нарушающие логику изложения, а вот отдельное описание того, что нужно
делать, когда такое происходит, помогает, в частности, при организации стан-
дартного реагирования на данную ситуацию.
Как уже отмечалось (см. § 3.5), оперирование с исключительными си-
туациями можно рассматривать как один из вариантов программирования в
событийно-ориентированном стиле. Здесь события — возникновение ситуа-
ций, для которых планируется реакция. Если таких событий много, а основ-
ной процесс, для которого следует запрограммировать реакцию на исключе-
ния, логически не очень сложен, то использование средств поддержки опе-
рирования с исключительными ситуациями является реализацией стиля про-
грамирования от событий. Как и в общем случае, здесь возникает вопрос о