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

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

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

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

Всем знакомы конструкции типа Р(А, 7) или 0(В, Ра1зе, ' а ' ). Но выражения типа 328 Глава 7. Наследование К1)ЬЬецег, гез1), в которых параметрами являются типы данных, встречаются крайне редко. Полиморфизм означает способность одной операции или имени подпрограммы ссылаться на любое число определений функций, зависящих от типа данных параметров и результатов. Мы уже сталкивались с некоторым ограниченным видом полиморфизма в главе 5 при обсуждении перегрузки некоторых операций. В выражениях1+ 2и1.5 ч 2.7имеютсяввидудверазличныеоперациисложения:в первом случае это целочисленное сложение, во втором — вещественное.

Использование модификатора йепег)с в языке Ас)а позволяет с некоторыми ограничениями перегружать функции, когда компилируется несколько экземпляров функции, каждому иэ которых соответствует свой набор типов параметров и результатов. Операция унификации в языке Рго!оц также может рассматриваться как вид полиморфизма, так как Рго!оя пытается унифицировать запрос при помощи набора правил и фактов, содержал)ихся в его базе данных. Полиморфизм, как правило, применяется к функциям, у которых одним из параметров является тип данных. Из обсуждаемых языков наиболее общее применение полиморфизма обеспечивают МЕ и Зта!)Ьа!)с. Например, аргумент тождественной функции ) с)епС может быть любого типа. Если мы определим ее как гю щелмх) = х: мы получим от М1. ответ: - вю ~веэмх) = х: ча) ~дель = гл .

'а -> 'а означающий, что функция ) с)ел1 получает аргумент типа ' а (то есть произвольного типа) и возвращает аргумент типа ' а (то есть того же типа) для параметра типа ' а. Таким образом, передача в функцию 1))епс целочисленных и строковых параметров, а также целочисленных списков является корректной: - ~сепмэ): ча) 1С = 3 : ~пг - 3зепм "аЬс"): ча) Ы = "аЬс" ; Ып л9 ~ Ьепщ 11, 2. 3) ) .

ча1 Ы = [1.2.31 1пг !мг В МЕ некоторые операции в определении функции допускают полиморфизм, как, например, операция равенства и операции, создающие списки объектов. Тем нс менее для некоторых операций область возможных типов параметров ограничена. Например, арифметические операции сложения и вычитания могут применяться только к арифметическим типам. Как уже было объяснено ранее, операция сложения + перегружена, так как опа относится к различным числовым типам данных. По этой причине уже рассмотренные нами выше определения в М1 типа тип агеы )еьсгл.ю ссл) - )елвСЬ"чл ССЬ. являются неоднозначными, хотя агеа(1, 2) или агеа(1.3.

2.3) будут уже вполне однозначными обращениями к функции. В М Е используется статическая проверка типов ар)ументов функпий, хотя динамическая проверка типов сделала бы функцию эгеа полиморфной. Разница между полиморфизмом в МЕ и общими функциями в Ас)а заключается в том, что в Ас!а компилировалось бы несколько различных функций ) Ьелд каж- 7.3. Полиморфизм 329 дая из которых соответствовала бы своему типу артуа)ента, а в М[. достаточно одного экземпляра функции. Вообще говоря, функции в М[., в которых используются равенство [или неравенство) и создание кортежей [гпр! ез) и списков, могут быть полиморфными, так как зти операции не обязательно производятся над фактическими данными.

Аргументы функций М1. могут принадлежать любому типу [который определяется статически). Следовательно, мы можем написать полиморфные функции, которые получают параметры и применяют их к объектам данных. Рассмотрим следующие две функции М[.: 1епдт)), которая вычисляет длину списка целых чисел, и рг) пт) Г, которая печатает элементы этого списка в заданном порядке: Гоп 1еодЖоа1) = 0 ! 1еодГЩ а.:у)- 1+1еодть(у): Гоп ршоммш1) = рга оы 'Чо" ) ! ргх(а:.у. ао( 1аао) = (ргаог(а).ргзотм(у)): Теперь можно вызвать функцию ргосезз с аргументами любого типа (единственное требование заключается в том, чтобы они были совместимы), например Гоо ргосем (Г,1) = Г 1: где г" 1 эквивалентно 1(1).

Тогда мы можем получить следующее: ргосе55(рг~пы К [1,2,31); 123 ргосеаа(1еодщ,[1.2.31): 3 Реализация. В случае языков со статической проверкой типов, таких как М1. и Са-+, полиморфизм не прибавляет новых сложностей при реализации. Тем не менее с языками, в которых допускается динамический полиморфизм [например, вариант языка [.1ЯР под названием Яс!)еше), дело обстоит несколько сложнее, поскольку аргументы полиморфной функции должны быть определены во время выполнения программы. В качестве примера можно рассмотреть зту ситуацию в языке [.15Р.

Элемент списка в 1.[БР состоит их трех полей, которые мы называли ранее полем типа, полем саг и полем с()г [раздел 6.1.7). Поскольку поля саг и сйг имеют фиксированный размер, а аргументы пол иморф ной функции могут быть одного из нескольких различных типов, то для выполнения программы необходимо определить, каков фактический тип аргумента. Аргумент полиморфной функции может быть представлен одним из двух следующих способов. 1.

Непосредственный дескриптор встречается тогда, когда значение параметра, передаваемого в функцию, меньше, чем размер фиксированного поля. Например, если функции передается в качестве параметра булево значение, короткое целое число или символ, то используется пространство меньшее, чем позволяет объект фиксированного размера. В таком случае фактическое значение параметра помещается в поле сог или сйг, а оставшиеся дополнительные биты в поле используются для сообщения функции о фактическом типе аргумента.

2. Блоковый дескриитпор используется во всех других случаях. Поля саг и сйг будут содержать индикатор типа, указывающий на то, что параметр яв- 330 Глава 7. Наследование ляется блоковым, а остальная часть поля будет содержать адрес памяти фактического объекта (который может располагаться тле угодно, например в куче). По этому адресу будет содержаться вся информация о типе этого объекта, например в случае сложного объекта данных — его полная структура. В качестве примера рассмотрим ситуацию, когда размер поля саг или сог равен 5 байт. Первый байт является идентификатором типа ланных, а байты со второго по пятый отведены непосредственно под данные.

Полиморфной функции могут быть переданы следующие параметры. 1. Целое число размером 32 бил<. Первый байт равен О, что соответствует целому типу параметра, байты со второго по пятый содержат 32-битовое целое число. 2. Символ размером 8 бит. Первый байт в данном случае равен 1 (что соответствует символьному типу данных), второй байт содержит фактическое значение аргумента, остальные байты (с третьего по пятый) не используются. 3.

Булево значение размером 1 бил<. Первый байт принимает значение 2, а второй байт равен 0 или 1. 4. Запись сложной структуры, Первый байт равен 3, а байты со второго по пятый содержат указатель на запись. г-значение, соответствующее этому адресу, предоставляет более полную информацию о фактическом аргументе. Вычисление такой полиморфной функции будет более медленным, чем для функции в языке со статическим определением типов, например С++, потому что выполняющая программа должна исследовать параметры, прежде чем получить нх фактические значения. Тем нс менее во многих приложениях выигрыш от использования полиморфных функций перевешивает неэффективность выполнения программ. 7.4.

Рекомендуемая литература В начале 70-х гг. Давид Парнас (с<ач!<! Рагпаз) внес значительный вклад в разработку инкапсулированных типов данных [86). Развитие объектно-ориентированного подхода в программировании является предметом рассмотрения в [53). Конференция АСМ «Разработка языков программирования для создания надежного программного обеспечения», состоявшаяся в 1977 г., явилась, вероятно, наиболее глобальным событием подобного рода, где предлагались различные механизмы инкапсуляции в языках А!р)<аг<[, С!Х, Сурзу, Меха, Епс!Ы и лр, [122).

Начало развития объектно-ориентированного подхода к программированию было положено при появлении 5ша!!<а![<-72 и его «последователей» [56), хотя признанию этого языка препятствовали проблемы с доступностью его реализаций. Более полное обсуждение вопросов наследования вы найдете в [110). Полиморфизм и типы в языке М1 обсуждаются в [115). 7.5. Задачи и упражнения 331 7.5.

Задачи и упражнения 1. 2. 3. 5. 6. 7. 8. 9. Определите полиморфную функцию геуегзе в М1., которая получала бы в качестве аргумента список объектов некоторого типа и возвращала бы эти же объекты, но в обратном порядке. Разработайте набор полиморфных функций (например, рцФ, рор, неи51зс1, 1ор) в М1., которые позволяли бы создавать стеки, содержащие элементы любого типа. Предположим, что для экземпляров класса оЬ3есе определен метод рг1пС.

Объясните, как будет выполняться оператор Вщайса1й 3 рг|пС. Опишите выполнение каждого из следующих выражений ВщаПгайц а)2~3 б) 3 ~ 2 в) '2' ч 3 г) (2 + 3) рг1пт д) (2 < 3) 1Пгие:1'Сгие' рг1п11 1гга1зе:Е'га1зе' рг1пе) Почему использование стандартных файлов включения . й в С не обеспечи- вает адекватных возможностей абстракции данных для программ на С? Зачем нужны чистые виртуальные классы в Сч-ч-? Мы могли бы воздержаться от распределения в памяти объектов этого класса и просто использовать подклассы суперкласса.

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

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

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