Главная » Просмотр файлов » Р.У. Себеста - Основные копцепции языков программирования (2001)

Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 146

Файл №1160794 Р.У. Себеста - Основные копцепции языков программирования (2001) (Р.У. Себеста - Основные копцепции языков программирования (2001)) 146 страницаР.У. Себеста - Основные копцепции языков программирования (2001) (1160794) страница 1462019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Если тип Т является классом, -соответствующим" является обработчик, параметр которого имеет тип Т, или любой класс, являющийся предком класса Т. Существуют более запутанные ситуации, в которых выражение г)згсн соответствует формальному параметру. но здесь они не рассматриваются. Исключительная ситуация, возбужденная конструкцией ггу, приводит к немедленному завершению выполнения кода в данной конструкции агу. Поиск соответствующего обработчика начинается с обработчика, непосредственно следующего за конструкцией Сгу, н выполняется последовательно, пока не будет найлен подходящий обработчик. Это означает, что если некоторый другой подходящий обработчик предшествует обработчику, точно соответствующему данному выражению сйгон, то точно соответствующий обработчик не будет использован.

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

Если во всей программе не найден ни олин подходящий обработчик, то выполнение программы завершается. Глава 13. Обработка исключительных ситуаций 13.4.3. Продолжение выполнения программы После выполнения обработчика управление переходит к первому оператору. следующему за конструкцией цку (оператору, находящемуся непосредственно после последнего обработчика в последовательности обработчиков).

Обработчик может повторно возбудить исключительную ситуацию с помощью оператора ц)зкон. не содержащего выражения. В этом случае такая исключительная ситуация передается в вызывающий модуль. 13.4.4. Другие проектные решения В контексте вопросов разработки языка. перечисленных в разделе!3.1.2, обработка исключительных ситуаций в языке является довольно простой. Существуют только определенные пользователем исключительные ситуации, и они не указываются (хотя могут быть объявлены как новые классы). Нет обработчиков по умолчанию, которые были бы предназначены для обработки исключительных ситуаций. обнаруживаемых системой.

Исключительные ситуации нельзя заблокировать. Функция в языке С++ перечисляет типы исключительных ситуаций (типы выражений с)эком), которые могут возникать. Это осуществляется с помощью приписывания зарезервированного слова с)звон, за которым в скобках следует список этих типов. к заголовку функции. Например, заголовок функции дпс бцп() с)звон (дпц, аЬак*] ( ...

1 указывает, что функция бцп может возбудить исключительные ситуации типа дпц или сЬак*, и никакие другие. Если типы в операторе ц)звон являются классами, то функция может возбудить любую исключительную ситуацию. производную от перечисленных классов. Если заголовок функции имеет оператор Итон. и эта функция возбуждает исключительную ситуацию, не указанную в списке из оператора СЬкон и не являющуюся производной от класса, указанного там, то возникает фатальная ошибка.

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

Следовательно, обработчик никогда не сможет получить доступ к этим переменным. 13.4.5. Пример Следующий пример имеет тот же смысл, что и предыдущие, и использует обработку исключительных ситуаций, как и программа на языке Рь/1, приведенная в разделе 13.2.5. Этот код определяет распределение входных оценок с помощью массивов счетчиков для десяти категорий оценок.

Недопустимые оценки распознаются с помощью проверки неверных индексов, используемой при увеличении выбранного счетчика. 1ЗА. Обработка исключительных ситуаций в языке С++ 41пс1цбе <1овсгеаш.)з> чойб шазп() ( //* Может возбуждаться любая исключительная //* ситуация Дпе пеи дгабе, зпбех, 11ш1с 1, 11ш1г 2, йгед[10] = (0,0,0,0,0,0,0,0,0,0)) е)тоге зпе еой сопбзгдоп) агу ( иы1е (1) ( дг (!сзп » пеи дгабе) //* Когда входной поток сзп //* обнаруживает конец файла, СЬгои еой сопбзп1оп //* возбуждается исключительная //* ситуация еой сопбзгзоп //* 1пбех = пеи дгабе / 10; ( агу ( дк (зпбех < 0 )( 1пбех > 9) Саган(пеи дгас)е); йгед[1пбех] ++з //* конец внутреннего блока Сгу сакс)з(зпе дгабе) ( //* Обработчик для ошибки, // связанной с индексами дй (дгабе == 100) йгед(9]++г е1ве сонг « "Ошибка — новая оценка:"« дгабе « "выходит за пределы допустимого диапазона" « епб1; ) //* конец функции сасс)з(1пс дгабе) ) //* конец блока ип11е(1) ) //* конец внешнего блока Сгу саеаЬ(в)зогС зпп) ( //и Обработчик еоб соис « "Границы Частоты" « епб1; йог(зпбех = 0; 1пбех < 10з 1пбех++) 11ш1г 1 10 * 1пбех; 11ш1с 2 11ш1с 1 + 9; Дг (1пбех == 9) 11шзг 2 = 100) сонг « 11шзг 1 « 11шзс 2 « Егед[дпбех] « епб1; ) //* конец цикла гог (зпбех == 9] ) //* конец функции сасс)з(в)зогг 1пс) ) //* конец функции ша1п Эта программа иллюстрирует механизм обработки исключительных ситуаций в языке С++.

Однако обе исключительные ситуации в данном примере лучше обрабатывать другими средствами. Условие достижения конца файла легче обработать с помошью простой проверки условия выхода из цикла и)з11е, содержашего выражение со входным потоком сзп. Более того, исключительная ситуация, связанная с выходом индекса массива за пределы допустимого диапазона, обычно обрабатывается в языке С++ с помощью перегрузки операции индексирования, которая затем может возбуждать исключи- Глава 13. Обработка исключительных ситуаций тельную ситуацию. а не путем непосредственного распознавания операшш индексирова- ния с помощью условного выражения.

как в приведенном примере. 13.4.6. Оценка В некоторых отношениях механизм ооработки исктючительныч ситуаций в языке С++ похож на соответствуюший механизм языка Аба: связывание псключительныч ситуаций с обработчиками является статическим. и необработанные исключительные ситуации передаются в модуль. вызвавший данную фчнкцпю. Но в лрз пж аспектач разработка языка С++ совершенно отличается от языка Аба. Здесь нет встроенных распошаваемых аппаратурой исключительных ситуаций. которые может обраоатывать пользователь, и исключительные ситуашш не именуются.

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

Намного лучше иерархически определять классы с осмысленными именами. которые можно использовать для определения исключительных ситуаций. 13.5. Обработка исключительных ситуаций в языке Лача В главе !2 пример программы иа языке 1ача содержал обработку исключительных ситуаций с небольшими пояснениями. В этом разделе описываются летали возможностей языка 1ача, связанных с обработкой исключительных ситуаций. Обработка исключительных ситуаций в языке 1ача основывается на механизме.

рсьпп зованном в языке С++, но больше соответствует объектно-ориентированной парадигме. 13.5.1. Классы исключительных ситуаций Все исключительные ситуации в языке Зача являютсл обьектами классов. произволных от класса Тпгсиао1е. Система языка 1ача содержит два системно-ориснгироьанных класса исключительных ситуаций, являющихся подклассами классов ..-. -.:.

-:.. е. Ег лог и Ехсергсоп. Класс Еггог и производные от него классы связаны с гокими ошибками, порождаемыми интерпретатором языка 1ача, как исчерпанная динамическая память. Эти исключительные ситуации никогда не возбуждаются пользовазельскими программами и не обрабатываются там. Сушествуют два класса.

являюшихся непосредственными наследниками классов Ехсер=ьсп, ВцпС1жеЕхсер ' =-.. и Как следует из их названий. исключительная ситуация 10Ехсер ' сп возбуждается при возникновении ошибки в операциях ввода или вывода, каждая из которых определена в качестве метода в различных классах, обьявленных в пакете з ача . Ес. Сушествуют определенные системные классы. являющиеся производными от класса ВцпсбвеЕхсерсдоп. В большинстве случае исключительная ситуация йцп:"'.".ебхсо..- .сп возбуждается, когда пользовательская программа порожлает ошибку.

Например. класс Аггау1пбехОиссВсопблЕхсера1сп. опрелеленый в пакете ~ача. ".'1. обычно воз- 567 13.5. Обработка нсключмтепьнмх ситуаций в языке 3ача буждает исключительную ситуацию, являюшуюся производной от исключительной ситуации йцпг1щеехсерг1оп. Другой широко распространенной возбуждаемой исключительной ситуацией является Ии11РотпсегЕхсерсуоп. Пользовательская программа может определять свои собственные классы исключительных ситуаций. В языке )ача принято соглашение о том, что определенные пользователем исключительные ситуации являются подклассами класса Ехсерсзоп. 13.5.2.

Обработчики исключительных ситуаций Обработчики исключительных ситуаций в языке )ача имеют тот же вид, что и в языке С++. Однако каждая функция саго)э должна иметь параметр, а классы исключительных ситуаций должны быть производными от встроенного класса Т)тгонаЪ1е. Синтаксис конструкции ггу в языке )ача в точности такой же, что и в языке С++.

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

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

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

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