Главная » Просмотр файлов » И.Г. Головин, И.А. Волкова - Языки и методы программирования

И.Г. Головин, И.А. Волкова - Языки и методы программирования (1160773), страница 30

Файл №1160773 И.Г. Головин, И.А. Волкова - Языки и методы программирования (И.Г. Головин, И.А. Волкова - Языки и методы программирования) 30 страницаИ.Г. Головин, И.А. Волкова - Языки и методы программирования (1160773) страница 302019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Действительно, ожидать, что неспецифицированное исключе­ние будет обработано, не следует (ведь никто и не подозревал, чтооно произойдет), а нарушение спецификации говорит о серьезнойошибке в функции, так что лучше завершить программу сразу, чемпродолжать распространение ИС, потеряв информацию о месте воз­никновения реальной проблемы.Язык Java тоже содержит конструкцию спецификации ИС, толькоэта конструкция обязательна.Это означает, что функция ignore из предыдущего примера небудет успешно откомпилирована:class X extends Exception { ... }class Sample{void f throws X { ....

throw new X ( ) ; .... }void suppress (){// нет списка — значит ничего не выбрасываетtry{f(); // здесь может возникнуть ИС типа X}catch (X ex){// успешная обработка ИС типа X}void ignore ()152{f (); / / ошибка: необработанное исключение X}}Наличие обязательной спецификации ИС повышает надежностьпрограмм на Java, заставляя программиста тщательнее продумыватьвопросы обработки ошибок. Однако с языковой точки зрения обя­зательность ИС породила некоторую проблему.Проблема возникает вследствие того, что существуют ИС, по­явление которых возможно всюду. Это относится к стандартнымИС, а точнее, к ИС, которые возбуждаются исполняющей системойвиртуальной Java-машины (JRTE).Исключения, порождаемые JRTE, относятся к одному из двухклассов (точнее, являются производными от этих классов): Errorи RuntimeException.

Все ИС, порождаемые JRTE, не надо специ­фицировать. Рассмотрим подробнее иерархию классов ИС.class Error extends Throwable {...} — ошибки функ­ционирования Java-машины и JRTE;class Exception extends Throwable { . . .} — базовыйкласс для пользовательских ИСclass RuntimeException extends Exception {...} —базовый класс для ошибок типа выхода за границу ин­декса массива, нехватки памяти и так далее.Очевидно, что ошибки типа Error могут непредсказуемо воз­никать везде, и обрабатывать их не надо. Как можно исправить наJava ошибки работы JVM?Ошибки типа RuntimeException могут появляться тоже почтивезде (например, везде, где порождаются новые объекты, и т.д.).Требование повсеместной проверки таких ошибок невозможно.

Од­нако эти ошибки отличаются от первой категории (и потому имеютобщий базовый класс с пользовательскими ИС) тем, что программистможет по своему усмотрению ставить ловушки на отдельные ИС изэтого класса. При этом компилятор не будет требовать обязательнойспецификации или реакции на эти ИС.Таким образом, обязательно специфицировать или обрабаты­вать (подавлять) только ИС, являющиеся наследниками классаException, но не RuntimeException. Именно к этому виду должныотноситься пользовательские ИС.Конечно, программист может «обмануть» транслятор (точнее,самого себя), выведя свои ИС из Error или RuntimeException.

Ав­торы языка Java указывают: «Расширение типов RuntimeExceptionили Error и использование их объектов в методах конкретных клас­сов свидетельствует о неверном понимании механизмов обработкиисключений и затрудняет практическое применение методов про­153граммистами, которые вправе надеяться на наличие исчерпывающегоописания набора возможных исключений в составе предложенийthrows» [2].Конструкция t r y - f i n a l 1 уКак уже отмечалось, в процессе свертки стека в языке C++ га­рантируется выполнение деструкторов всех локальных объектов.Если программист грамотно использует методики типа RAII (см.подразд.

7.2), то он может быть уверен, что локально захваченныересурсы будут освобождены.Однако в языках с автоматической сборкой мусора уничтожениеобъектов (и, как следствие, выполнение финализаторов) носит не­детерминированный характер. Существуют классы, объекты которыхнеобходимо уничтожать (освобождая захваченные ими ресурсы) позапросу (например, классы для работы с файлами и т.п.).

Работас такими объектами проходит по следующей схеме:создание объекта;работа с объектом;уничтожение объекта;Однако если в процессе работы с объектом произойдет выброснеобработанной ИС, то объект уничтожен не будет, и произойдетутечка ресурса.Необходимо иметь механизм гарантированного исполнения неко­торого кода в блоке независимо от того, завершился блок нормальноили аварийно.Такой механизм уже есть в C++ (деструкторы локальных объектов),а в C# и Java эту роль играет конструкция t r y - f i n a l l y :try {блок кода}finally {// этот код выполнится сразу после любого// выхода из try-блока}Блок finally может появляться также после всех ловушек tryблока, если они есть.

Тогда работа с явно уничтожаемым объектомможет выполняться по следующей схеме:создание-объекта ;try{работа-с-объектом;154}ловушкиfinally{уничтожение-объекта;}В языке C# есть специальный интерфейс для работы с явно уни­чтожаемыми объектами:interface IDisposable{void D i s pose();}Явно уничтожаемые объекты должны реализовать этот интерфейс.Процедура Dispose () должна освобождать ресурсы, занятые объ­ектом (кроме памяти, разумеется, поскольку это забота сборщикамусора).Примером класса, реализующего этот интерфейс, является стан­дартный класс Image из библиотеки .NET, инкапсулирующий работус растровыми изображениями. Схема работы с объектами типа Imageследующая:Image img = Image.FromFile("picture.jpg");try{работа-с-картинкой-в-img}finally{((IDisposable)img).Disp o s e (); // освободили// картинку}Интерфейс IDisposable является примером интерфейса дляязыковой интеграции.

Этот интерфейс интегрирован с u s i n g блоком языка С#. Оператор using-блок позволяет автоматическидля заданной переменной (типа ссылки на объект, реализующийIDisposable) гарантированно выполнить процедуру Dispose ().В примере using-блока выполняется та же работа, что и в предыду­щем примере:using (Image img = Image.FromFile("picture.jpg") ){работа-с-картинкой-в-img}// img гарантированно освобожденГ л а в а 10СТАТИЧЕСКАЯ ПАРАМЕТРИЗАЦИЯ. ПОНЯТИЕОБ ОБОБЩЕННОМ ПРОГРАММИРОВАНИИ10.1. Параметрический полиморфизмСовременные объектно-ориентированные языки поддерживаюттри вида полиморфизма: статический, динамический и параметри­ческий.Статический полиморфизм в форме перегрузки подпрограмм и ди­намический полиморфизм в форме динамического связывания вирту­альных методов поддерживаются всеми объектно-ориентированнымиязыками.

Параметрический полиморфизм в форме механизма ша­блонов реализован в языке C++ с 1990-х гг., а в языках C# и Java —относительно недавно (2003 —2005 гг.).Первые две формы полиморфизма мы рассмотрели ранее (см.гл. 6, 7 и 8). Отличительной чертой этих видов полиморфизма яв­ляется то, что связывание сводится к выбору одного варианта изнекоторого конечного набора. При статическом полиморфизме попрофилю вызова подпрограммы статически выбирается вариант ееперегрузки, а при динамическом — в момент вызова виртуальногометода по ссылке (указателю) динамически выбирается вариант за­мещения этого метода.Отличие параметрического полиморфизма состоит в том, что присвязывании может порождаться новая сущность — класс или функ­ция (метод).

Методы реализации параметрического полиморфизмадостаточно сильно различаются для разных языков.При параметрическом полиморфизме полиморфными сущностямиявляются параметризованные типы (классы) и подпрограммы (ме­тоды). В C++ параметризованные сущности называются шаблонамиклассов и функций, а в C# и Java — обобщенными (или настраи­ваемыми) классами и методами, или обобщениями.Два основных понятия параметрического полиморфизма — этообъявление параметризованной абстракции (шаблона или обобще­ния) и конкретизация этой абстракции (т. е. ее использование).Связывание конкретизации и объявления всегда происходит ста­тически (во время трансляции).В C++ при конкретизации шаблона происходит создание новыхнепараметризованных сущностей — классов и функций (конечно,повторного создания одних и тех же сущностей не происходит, транс­лятор за этим следит).

Во время конкретизации происходит статиче­156ский контроль корректности (соответствия типов) и генерация кода.Конкретизация происходит статически во время трансляции.В C# при конкретизации обобщения проверяется корректность(соответствие типов). Генерация машинного кода для создаваемыхнепараметризованных сущностей происходит при запуске сборки(JIT-компилятором среды .NET) на основе промежуточного кода,созданного при трансляции объявления обобщения, и информациио типах — аргументах конкретизации.И, наконец, в языке Java при конкретизации обобщения толькопроверяется корректность конкретизации (соответствие типов).Можно рассматривать конкретизацию как процесс создания но­вых непараметризованных сущностей (классов и методов), однаковся информация об этих сущностях существует только во времятрансляции и стирается при генерации объектного кода для JVM.Фактически во всех конкретизациях используется одна версия обоб­щенного класса или метода, код которого генерируется в контекстеобъявления.Каждый из этих подходов обладает своими достоинствами и не­достатками.

Механизм шаблонов C++ позволяет создавать оченьмощные и одновременно эффективные абстракции. Выразительныесредства языка C++ не имеют аналогов среди современных индустри­альных языков. На основе статической параметризации разработаныбиблиотеки шаблонов STL (часть стандартной библиотеки C++), Lokiи Boost, значительная часть которой вошла в последний стандартC++.Правда, платой за мощность и выразительность при этом сталаповышенная сложность шаблонов C++.Обобщения в языке C# позволяют создавать мощные и достаточноэффективные параметризованные библиотеки, распространяемыев виде сборок.Обобщения в языке Java также позволяют создавать удобныепараметризованные классы, однако выигрыша в эффективности посравнению с непараметризованным представлением в этом случаенет.

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

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

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

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