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

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

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

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

Реализация интерфейса полностьюинкапсулирована.Таким образом, понятие интерфейса очень хорошо сочетаетсяс понятием абстрактного типа данных (см. подразд. 7.3).Отметим, что за счет множественного наследования класс C++может реализовывать произвольное количество интерфейсов.Реализация интерфейсов в C# и JavaЭти языки в отличие от C++ явно поддерживают интерфейсы наязыковом уровне.

Одной из причин этого является то, что в них нереализовано множественное наследование в полном объеме.C# и Java поддерживают одиночное наследование класса и множе­ственное наследование интерфейсов. Не вдаваясь в детали, отметим,что множественное наследование классов с членами-данными и вир­туальными методами создает некоторые проблемы при реализации.Этих проблем нет, если наследуемые множественным образом классымогут иметь только (абстрактные) методы.Таким образом, в C# и Java есть конструкция «интерфейс».Интерфейс состоит только из объявлений прототипов методов.Модификаторов доступа нет, так как скрывать надо только реали­зацию, а методы интерфейса обязаны быть открытыми. Из данныхдопускаются только статические члены-константы.

Допускаютсятакже объявления вложенных интерфейсов (для «композиции» ин­терфейсов).Приведем примеры объявлений интерфейсов:interface IEnumerable // стандартный интерфейс C#{IEnumerator GetEnumerator();}141interface IEnumerator // стандартный интерфейс C#{object Current { get;bool M o ve N e x t ();void R e s e t () ;}}interface Iterable // стандартный интерфейс Java{Iterator iterator();}interface Iterator // стандартный интерфейс Java{boolean h a s N e x t ();Object n e x t ();void re mo v e ();}Приведем также примеры объявлений классов, реализующихинтерфейсы:class MyCollection : IEnumerable // C#{ --public IEnumerator GetEnumerator(){ ....

/* реализация метода */ }}class MyCollection implements Iterable // Java{ --public Iterator iterator (){ /* реализация метода */ }}Это примеры интерфейсов (из стандартной библиотеки C# и Java),которые объявляют «контракт» итераторов, позволяющих последо­вательно перебирать элементы коллекции.Класс может реализовывать произвольное количество интерфей­сов:class Sample extends Base implements II, 12, 13, 14{ - - .}class SampleCS : Base, II, 12, 13, 14 {...}Объектов-интерфейсов нет, и это понятно почему: ведь интер­фейс — обобщение понятия «абстрактный класс», а объекты аб­страктного класса создавать нельзя. Однако можно получать ссылкуна интерфейс (точнее, на реализацию интерфейса) из ссылки накласс, реализующий этот интерфейс.

Ссылки на интерфейс можноиспользовать для вызова методов интерфейса.Таким образом, ссылка на интерфейс имеет синтаксис и ведетсебя как ссылка на объект базового класса. Этой ссылке можно при­142сваивать ссылку на объект класса, реализующего интерфейс (что по­хоже на неявное преобразование из производного класса в базовый).Также ее можно явно (и только явно) преобразовывать к ссылке наобъект класса, реализующего интерфейс (это похоже на явное пре­образование из базового в производный класс).Приведем следующий пример:void RemoveLongStrings (MyCollection coll, int maxLen)Iterable obj = coll;// ссылку на коллекцию поместили в интерфейсIterator i = o b j .iterator ();while (i.hasNext ()){String s = (String)i.next ();if (s.

l e n gt h() > maxLen)i .remove ();}}Эта функция удаляет из коллекции coll все строки длинойбольше заданного значения. Если коллекция содержит нестроковыеобъекты, то преобразование (String) i .next () сгенерирует ис­ключение (см. гл. 9).Интеграция интерфейсов в язык программированияКак уже отмечалось, интерфейсы — мощное средство интеграциипрограмм, настолько мощное, что его можно использовать и для ин­теграции механизмов языка и пользовательских классов. Языки C#и Java поддерживают ряд стандартных интерфейсов, позволяющихинтегрировать семантику языковых конструкций и классы, реали­зующие эти интерфейсы.Например, приведенные ранее интерфейсы итераторов интегри­руют классы-коллекции, реализующие эти интерфейсы, с цикломf oreach:MyCollection coll;int sum = 0;for (int i : coll)sum += i;Компилятор языка Java вставит обращ ения к интерфейсамIterable и Iterator, а также распаковку из Object в int.Другим примером является интерфейс IDisposable, использу­емый в using-блоке языка C# (см.

гл. 9).143Язык Java использует понятие пустых интерфейсов (интерфейсовмаркеров), которые специально предназначены для интеграциис транслятором. Интерфейсы-маркеры не содержат никаких методов,их смысл зафиксирован в документации и воплощен транслятором.Например, если класс реализует интерфейс-маркер Cloneable, то этоозначает, что класс будет реализовывать открытый метод clone ()создания своей копии:class CloneAttack implements Cloneable{public Object c lo n e (){// возвращает свою копию}}Следует отметить, что любой класс уже содержит версию методаclone (), унаследованную от класса Object.

Этот метод возвращаетповерхностную копию объекта. Однако проблема состоит в том, чтоэтот метод — защищенный, следовательно, может использоватьсятолько из производных классов или из классов своего пакета. Чтобыпозволить копировать себя внешним классам, используется интер­фейс Cloneable. Более подробно подходы к копированию объектовв Java рассматриваются в [2].Глава 9БЕЗОПАСНОСТЬ И ОТКАЗОУСТОЙЧИВОСТЬПРОГРАММ9.1. Надежность программ. Подходык обеспечению отказоустойчивостипрограммИнтуитивно надежность программы — это свойство программыработать без отказов.

Мера надежности программы — вероятностьбезотказной работы в заданном окружении в течение заданного про­межутка времени.Причина отказов программы — ошибки. Можно условно выделитьдва основных подхода к проектированию «безошибочных» (надеж­ных) систем: математический и инженерный.При математическом подходе программа рассматривается какпреобразователь предикатов. Есть предусловие — предикат, опи­сывающий входные данные и окружение, и постусловие — преди­кат, описывающий требуемый результат работы программы. Есликорректно построить программу как преобразователь предусловияв постусловие, то можно математически доказать ее правиль­ность.Математический подход весьма сложен и не до конца разработан.Сложность построения предикатов сопоставима со сложностью раз­работки соответствующей программы (а нередко и превосходит ее).Кроме того, встает вопрос о том, правильно ли сформулированыпредикаты и о правильности собственно доказательства правиль­ности.

Современная индустрия программирования не используетдоказательства правильности программ, хотя при разработке рядаособо критичных систем используются элементы математическогоподхода.Инженерный подход рассматривает разработку надежных про­грамм как искусство построения надежной системы из потенциальноненадежных компонент.Надежная система должна быть готовой к появлению ошибоки реакции на них. В случае некритичных ошибок система должнавосстанавливать свое состояние и продолжать свое нормальноефункционирование, а в случае серьезных сбоев система может де­градировать, но обязана продолжать работу в режиме ограниченнойфункциональности.Различают два основных источника ошибок (точнее, сбоев илиотказов):• не выявленные до текущего времени ошибки в программе;145• проблемы внешнего окружения (сбои оборудования, отказы связии т.п.).В любом случае программа должна адекватно реагировать на лю­бые отказы (насколько это возможно).

Отказоустойчивые программыобязаны проверять результат выполнения каждого потенциальносбойного участка программы. Например, системные вызовы (обра­щения к сервису виртуального компьютера ОС) всегда возвращаютнекоторое значение, которое сигнализирует об ошибке. Также долж­ны быть устроены и другие компоненты надежного кода.Основная проблема состоит в том, как именно реагировать наобнаружение ошибки.

В подразд. 9.3 будут рассмотрены два основныхподхода к обработке ошибок: семантика продолжения и семантиказавершения.В современных языках для обработки ошибок введено понятиеисключительной ситуации. Исключительная ситуация (или ис­ключение) ассоциируется с ошибкой. Важно подчеркнуть, что ис­пользование исключительных ситуаций для других целей влечет засобой и резкое снижение как эффективности программы, так и ееотказоустойчивости. Следует придерживаться следующего принципа:исключительная ситуация — всегда «авария».Далее мы рассмотрим следующие аспекты обработки исключи­тельных ситуаций (ИС):• определение ИС;• возникновение ИС;• распространение ИС;• реакция на ИС.Классическая техника обработки ошибок в императивном языкеподразумевает, что при каждом аварийном происшествии программаприобретает примерно следующий вид:if (проверка-возникновения-ИС)нормальный-ход-выполнения} else { // ошибкапытаемся-исправитьif (не-получается)return error_code;{}return SUCCESS;В такой программе нормальный ход выполнения и собственнокод, который обрабатывает ошибки, переплетены между собой, чтовесьма неудобно.Механизм обработки ситуаций, чтобы быть управляемым и кон­тролируемым, должен поддерживать принцип разделяемое™ (от­дельно код для нормальной ситуации и отдельно — для исправле­ния ошибок).

Причем часто реакция на ошибку находится совсемв другом месте относительно места возникновения ошибки. Далее146рассмотри^ средства обработки ИС в языках программирования C++,Java и С#. Причем отметим, что базовые механизмы обработки ИСв этих языках практически идентичны.9.2. Определение исключительной ситуацииИдея определения ИС состоит в том, что ошибке (исключитель­ной ситуации) сопоставляется тип данных. В языке C++ разреша­ется связать с исключительной ситуацией любой тип данных (какбазисный, так и определенный пользователем класс).

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

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

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

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