Главная » Просмотр файлов » Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)

Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 133

Файл №1160801 Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002)) 133 страницаТ. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801) страница 1332019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 133)

Хотя в программу обычно можно вставить явный тест отслеживания подобных исключительных ситуаций, такие дополнительные операторы могут делать неясной основную структуру программы. Проще смягчить требование, гласящее, что подпрограммы должны вызываться исключительно с помощью явного оператора вызова и обеспечить возможность вызова подпрограммы в случае выполнения определенного условия или возникновения определенного события. Это условие или событие обычно называются исключениач, или сигналом, а подпрограмма, выполняющая их специальную обработку, — обработчиком исключений. Действия, связанные с отслеживанием появления исключения, прерыванием работы программы и передачей контроля обработчику исключений, называются генерацией исключения.

В языке Лпа существуег класс исключений, называемых проверками, или условиями, которые требуют выполнения определенного кода. Например, 1лбех Слеск — это исключение Солз1гз1лс Еггог, которое генерируется, когда программа выходит за границы массива. Обработчики ошибок Поскольку обработчик ошибок вызывается без всякого явного оператора, обычно ему не требуется ни имя, ни параметры. Определение обработчика ошибок обычно включает в себя только лишь 1) набор объявлений локальных переменных (если необходимо); 2) последовательность выполняемых операторов. Для того чтобы установить связь между исключениями и их обработчиками, каждому классу исключений присваивается некоторое имя. Некоторые исключения вязыксмогутбытьопределеннызаранее(например,Солзтгз1лг Еггог, Ргодгза Еггог, 11.1.

Различные варианты управления подпрограммами 488 5согабе Еггог или 1тыпег1 с Еггог в Ада). Другие могут быть определены программистом (например, в программу может быть включено объявление Опбегб1очг: ехсерс1оп или Очес т1 очн ехсерст оп). Каждый обработчик исключений затем сопоставляется с именем (или именами) тех исключений, которые он должен обрабатывать. Обычно все обработчики исключений группируются в начале или в конце большой программы или подпрограммы, где может произойти исключительная ситуация. Типичной в этом отношении является структура языка Агтат ргосебыге 5ыЬ тв Вас Оата Ча1ые: ехсермол: -другие обвявления в 5ыЬ Ьевтп -операторы вылолняеиые лри нариалвнои коде 5ыЬ ехсератоп ввел Вас Оата Ча1ые .> -обработчик для некорректных значений данных нвеп Солвсгатггс Еггог -> -обработчик для предопределенного исклюнения солвсгатот еггог ыаеп оавегв > -обработчик для всех других исключений ела; Генерация исключения.

Исключительная ситуация может быть сгенерирована какой-либо элементарной операцией, определенной в языке (например, операция сложения или умножения может сгенерировать исключение Сопзсга т пг Еггог). С другой стороны, исклточение может быть сгенерировано явным образом программистом с помощью оператора, специально предназначенного для этой цели, как, например, следующий оператор Аг(а: га!ве Вас Оата Чатые: который может быть выполнен в подпрограмме, если окажется, что какая-либо переменная или входной файл содержат некорректное значение. Если в подпрограмме используется явный оператор генерации исключения газ ве и в ней имеется обработчик этого искл юч ения, как, например, в случае, когда оператор 1г х - О ььеп га1ве Вас Овса ча1ые елд тг. появляется в теле приведенной выше процедуры 5ОЬ, то оператор га15Е передает управление соответствующелту обработчику исключений, который затем осуществляет выход из процедуры.

В языках, в которых отсутствуют возможности явной генерации исключений, для передачи управления колу, обрабатывающему исключение, используется оператор Восо, как отмечалось в разделе 8.2. Обработчику исключений можно передавать данные, как показано в следующем примере из языка М1. Нормальным действием в МЕ является завершение процедуры при возникновении исключительной ситуации. Если же в ней присутствует обработчик исключений, то после его выполнения управление возвращается в подпрограмму в ту точку, где была обнаружена ошибка, как, например, в следующем случае; ехсерьцоп ВаООелопю лагат от тлт; Гил 1ппегОтчтбе1а.тлт Ь:тлтт геа1= зт Ь=О Сиен гатве ВаООелаютлатогтЬ1 е1ве геа11а)/геа1101: Гыл Отчтбета.Ь1-1ллегОтчтбе1а.

Ы Ьалб1е ВаООелопппатог1Ь1->1ргтлттЬК "попытка деления на О"г 0.01. 486 Глава 11. Распределенная обработка данных В данном случае программа вызывает функцию 0з у)бе, которая, в свою очередь, вызывает функцию )ппег0т юг)е. В случае, если зналтепатель равен нулю, функция )ппег0тн1бе обращается к обработчику исюлючений Ваб0епогзз па ьог, который печатает сообщение об ошибке, возвращает вещественное значение 0 0 функции 0т ю бе, и выполнение продолжается. (Отметим, что для функции 01 уз бе нс требуется указывать типы аргументов и возврагцаеьтого результата. МЕ пытается сделать предположение о корректном типе, и в данном случае он может сделать это, используя явное оцределснне типов, данное для функции )ппег01нз бе.) В С++ (хотя не в каждом трансляторе Сч-ч- реализованы исключения) и ~ача исключения обрабатываются при помощи оператора ггу.

Сч-ч- генерирует исключение, порождая' (г(тггпх (пя) его, а обрабатывает исключение посредством его перехвата (саге)г(ггя). Синтаксис для вызова и обработки исключений в Сч-ч- похож на синтаксис М)., за исключением того, что после обработки исключения выполнение программы завершается: сгу ( тхаг.епепг,; згагепепг,: 1Г Заббспщю сп (сйгсн Ехсербзспиапе); ) свеев бхсертзспнзюе ( г'г' Действия по сбрабатке исключении О Конец исключения Распространение исключения.

Часто при проектировании программы выясняется, что место возникновения исключения не является лучшим местом для его обработки. Например, назначением некоторой подпрограммы может быть считывание значений ланных из входного файла и передача их группе вложенных подпрограмм для дальнейшей обработки. Предположим, что во входном файле могут содержаться неверные значения данных нескольких различных типов, и каждая из подпрограмм проверяет свой тип ошибок в данных входного файла, но результат всех этих проверок один и тот же; печатается сообщение об ошибке и файл прололжает обрабатываться дальше, минуя неправильные значения. В таком случае было бы правпльнес, если бы обработчик ошибок являлся частью подпрограммы, которая считывает файл, а каждая из подпрограмм могла бы порождать исключение Ваг) 0ата Уа)це.

Когда исключение обрабатывается в подпрогралтме, отличной от той, которая его породила, то говорят, что исключение распространяется от точки его порождения до точки его обработки. Правило, определяюгцее, какой обработчик должен обрабатывать конкретное исключение, обычно определяется в терминах диналгичвской цепи активаций подпрограмм, которая ведет к подпрограмме, породившей исключение. Если исключение Р порождено в подпрограмме 0, то опо обрабатывается обработчиком, определенным в этой подпрограмме С (есля таковой имеется). Если обработчика нет, В С««и )ата исключение представляется специальным сбъсктсм, который существует, пока сгс нс перехватит какой-нибудь обработчик.

Отскздз в англсязычнсй технический литературе испслгпуется термин «гьгсж«(«выбрсснть«) для сбсзначсния псрсждсния исключении — процедура «выбрасываст объект-исключение, который должен быть «псйман«каким-либо обработчиком, нс сбязатсльцс сярсдслснным в этай жс прсцслурс. — Примем. науч.

ред. 11.1. Различные варианты управления подпрограммами 457 то С завершает свое выполнение. Если С была вызвана из подпрограммы В, то исключение распространяется на В и снова порождается в той точке подпрограммы В, откуда вызывалась подпрограмма С. Если в В нет обработчика для исключения Р, то В также завершается, а исключение распространяется на подпрограмму, вызвавшую В и т. д. Если ии в одной подпрограмме, а также в главной программе ие найдется обработчика для этого исключения, то вся программа останавливается и вызывается стандартный обработчик, определенный в данном языке програмгиирования.

В частности, в предыдущем примере из МЕ функция 1ппег01н10е породила искл н>чсние Ва00епоэ1пэсог, которое было распространено до обработчика исключения в функции 01ю0е, который затем вернул определенное программистом значение как результат обработки этого исключения. Важной особенностью этого правила распространения исключений является то, что оно позволяет подпрограмме оставаться определенной пользователем абстрактной операцией даже в случае обработки исключений Элементарная операция или подпрограмма могут внезапно прервать свое нормальное выполнение и породить исключение. Для вызывающей подпрограммы эффект порождения исключения подпрограммой н элементарной операцией будет одинаковым, если подпрограмма сама не обрабатывает это исключение.

Если же это исключение обрабатывается внутри подпрограммы, то она завершается нормальныл1 образом, и вызывающая подпрограмма даже не заметит, что имела место исключительная ситуация. После обработки исключения. После того как обработчик завершил обработку исключения, возникает несколько неприятный вопрос; куда должно быть передано управление, так как для обработчиков ие существует явного вызова? Должно ли управление передаваться в точку порождения исключения (эта точка может отстоять от точки обработки на несколько уровней вызовов подпрограмм)? Или управление следует передать оператору содержащей обработчик исключения подпрограммы, в котором исключение было порождено снова после его распространения? Должна ли подпрограмма, содержащая обработчик, завершиться, но завершиться нормально, так что вызвавшей ее подпрограмме будет «казаться», что ничего и не произошло? В языке Лг1а, например, именно последнее решение и используется; в М1 предусмотрено несколько различных вариантов, а в других языках предлагаются иные решения.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее