Главная » Просмотр файлов » Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004

Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 90

Файл №1160791 Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004) 90 страницаБ. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791) страница 902019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Традиционной реакцией является «как-ннбудь довести дела до конца и надеяться на лучшее». Таким образом, обработка исключений делает программы более «хрупкими» в том смысле, что требуется больше внимания и усилий для их приемлемого выполнения . Однако такой подход выглядит предпочтительней, чем обнаружение неверного результата позднее в процессе разработки — или после того, как процесс разработки считается завершенным и программа отдана ничего не подозревающим конечным пользователям.

В тех случаях, когда завершение программы является неприемлемым, мы мо- 14.1. Обработка ошибок 409 жем перехватывать все исключения (9 14.3.2) или перехватывать все исключения определенного вида (9 14.6.2). Таким образом, исключение завершает выполнение программыы только в том случае, если программист позволяет это сделать, Это лучше, чем безусловное завершение, которое происходит, когда традиционное неполное восстановление приводит к катастрофическим ошибкам. В некоторых случаях программисты пытались смягчить непривлекательные аспекты подхода «как-нибудь довести дела до конца» путем вывода сообщений об ошибках, отображения диалоговых окон, обращением к пользователю за подсказкой и т. д. Подобные подходы прежде всего полезны при отладке в ситуации, когда пользователем является программист, знакомый со структурой программы.

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

Как минимум, сообщение об ошибке может быть нс на том языке (скажем, на финском для английского пользователя). Хуже того, сообщение об ошибке будет, как правило, иметь отношение к концепциям библиотеки, совершенно незнакомым пользователю (скажем, «недопустимый аргумент а(ап2», вызванное неправильным вводом в графической системе). Хорошая библиотека не должна быть настолько беспомощной. Исключения предоставляют возможность коду, обнаружившему проблему, от последствий которой он не может восстановиться, передать эту проблему некоторой части системы, которая в состоянии ее решить, Только часть системы, имеющая представление о контексте, в котором выполняется программа, имеет шанс выдать осмысленное сообщение об ошибке. Можно рассматривать механизм обработки исключений как аналог времени выполнения для таких механизмов времени компиляции, как проверка соответствия типов и контроль неоднозначности.

Обработка исключений делает процесс проектирования более важным и может увеличить объем работ, который требуется выполюпь, чтобы заставить работать исходную, содержащую ошибки, версию программы, Однако результатом является код, у которого намного болыпе шансов: выполняться так, как ожидалось; работать в качестве части большей программы; быть понятным для других программистов; успешно обрабатываться различными инструментальными средствами. Аналогично другим средствам С++, обработка исключений предоставляет конкретные средства языка для поддержки «хорошего стиля», который можно практиковать лишь неформально и не в полном объеме в таких языках, как С и Рааса).

Надо понимать, что обработка ошибок остается сложной задачей и что механизм обработки исключений — несмотря на большую формализацию, чем альтернативные методы — относительно менее структурирован по сравнению со средствами языка, обеспечивающими локальное управление выполнением. Механизм обработки исключений С++ предоставляет программисту средство обработки ошибок в том месте, где их наиболее естественно обрабатывать при данной структуре системы. Исключения делают сложность обработки ошибок более явной.

Однако исключения не явля ются причиной этой сложности. Не обвиняйте того, кто принес плохую новость. Возможно, наступил подходящий момент для повторного прочтения 9 8.3, где изложены базовый синтаксис, семантика и стили использования исключений. 410 Глава 14. Обработка исключений 14.1.1. Альтернативный взгляд на исключения «й1сключение» является словом, которое означает разное для разных людей. Механизм исключений С++ разработан для обработки ошибок и других исключительных состояний (отсюда название).

В частности, подразумевалась поддержка обработки ошибок в программах, составленных из независимо разработанных компонент. Механизм исключений предназначен для обработки только синхронных исключений, таких как вгяход за пределы диапазона в массиве и ошибки ввода/вывода. Асинхронные события, такие как прерывания от клавиатуры и некоторые арифметические ошибки, не обязательно являются исключительными и не обрабатываются непосредственно обсуждаемым механизмом. Асинхронные события требуют механизма, фундаментально отличного от исключений (как они здесь определены), для обеспечения их обработки понятным и эффективным способом.

Многие системы имеют механизмы, например сигналы, для работы с асинхронностью, но ввиду того, что они склонны приводить к зависимости от системы, здесь не приводится описание подобных средств. Механизм обработки исключений является нелокальной структурой, основанной на «раскручиванип» стека Я 14А), и его можно рассматривать в качестве альтернативы механизму возврата пз функции. Поэтому вполне законно использовать исключения, которые не имеют никакого отношения к ошибкам Я 14.5). Однако изначачьной целью механизма обработки исключений и предметом обсуждения этой главы является обработка опшбок и обеспечение устойчивости при возникновении ошибок. В стандарте С++ нет понятия потока пли процесса. Поэтому исключения, имеющие отношение к параллельности, здесь пе обсуждаются.

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

Задача программиста— решить, что является исключительным в данной программе. Это не всегда просто Я 14.5). Может ли событие, которое происходит в большинстве случаев при выполнении программы, считаться исключительным? Может лп запланированное и обрабатываемое событие считаться ошибкой? Ответ на оба вопроса — да. «Исключитечьпый» не означает «почти никогда не происходящий» или «разрушительный». Лучше рассматривать исключения в смысле «некоторая часть системы не смогла сделать ~ о, ч ~ о от нее требовалось». После этого мы обычно можем попытаться сделать что-нибудь другое. Генерация исключений должна происходить реже по сравнению с вызовами функций, в противном случае структура системы будет недостаточно стройна.

Однако мы вправе ожидать, что болыпинство крупных программ генерируют и перехватывают по крайней мере несколько исключений в процессе нормального и успешного выполнения, 14.2. Группировка исключений Исключение является объектом некоторого класса, являющегося представлением исключительного случая. Код, обнаруживший ошибку (часто библиотека), генерирует объект (З 8.3) инструкцией 1лгош. Фрагмент кода выражает свое жела- 4.2. Группировка исключений ° ~Р 411 с(аез Ма!аеас ( ); с!азз Озерове: рив(!с Ми!лесе (); с(изв (гас(ег/(от риЬ(гсМа1Бегг(); с(азз Еегос(гти(с(е. рибйс Ма()сегг ( ); // аереаолнение сверху //аереаолнение снизу 0 деление на ноль Это позволяет нам обрабатывать любин Ми!/сегг, не заботясь о том, какое в точности исключение возникло.

Например: оон»/() ( ггд ( 0- сагой (Ооег/)оы) ( // обработка Оиег/(ою или всех арон зв од них от Ооег/)ощ сагой (Ма!дега)( // обри баока ею бои б!аг!~егг, не неллю с(елея Овес!! оен В этом примере Онегинов обрабатывается специальным образом. Все остальные исключения Ма(аеггбудут обрабатываться вместе. Организация исключений в виде иерархий может иметь большое значения для надежности кода. В качестве примера рассмотрим, как бы вы могли обрабатывать все исключения в библиотеке математических функций без такого механизма группировки.

Это можно сделать путем утомительно~о перечисления исключений; ион!и() ггу ( 0 саыб (Овеет)ощ) ( /* ... */ ); си!об (Бас(ег/(ои» (/' ... */), си!об (Хегос((огс(е) (/* ... */), Это не только утомительно. Программист легко может забыть указать исключение в этом списке.

Рассмотрим, что бы нам потребовалось, если бы мы не сгруппировали математические исключения. При введении нового исключения в математн- нпе обрабатывать исключение при помощи инструкции са!са. Результатом (/ггов является раскру кивание стека до тех пор, пока не будет обнаружен подходящий са(са (в функции, которая непосредственно или косвенно вызывала функпию, сгенерировавщую исключение). Часто исключения естественным образом разбиваются на семейства. Из этого следует, что настедование может оказаться полезным для структурирования исключений и помочь при их обработке.

Например, исключения для математической бнб лпотеки можно организовать следувощим образом: 412 Глава 14, Обработка исключений ческой биолиотске каждый фрагмент кода, который пытается обрабатывать все математические исключения. подлежал бы модификации.

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

Это неприемлемо почти для всех библиотек. Перечисленные выше причины приводят к определению исключений в виде иерархий классов на уровне библиотеки или на уровне подсистемы (() 14.6.2). Обратите внимание на то, что ни встроенные математические операции, нн базовая математическая библиотека (совместно используемая с С) не сообщают об арифметических ошибках в форме исключений. Одной из причин является то, что обнаружение некоторых арифметических ошибок, таких как деление на ноль, является асинхронным на многих машинах с конвейерной архитектурой. Приведенная здесь иерархия Ма!йегг является просто иллюстрацией.

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

Тип файла
DJVU-файл
Размер
10,02 Mb
Тип материала
Высшее учебное заведение

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

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