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

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

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

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

Также не возникает никаких дополнительных сложностей при реализации классов л>обым из оцисанных Вы! Пс спОсОбОВ. 7.2.2. Методы Термин обьектно-ориентиролинцое програлсчираоплие в последние годы был пред- мстим >акой шумной рекламы, что быстро утратил снос нстншн>с .>Пачснне. Для многих людей этот термин стал синонимом концепции инкапсуляции, которая обсуждалась в предыдущих разделах и главах.

Но объектная ориентация означает все жс нечто болыцсе, чем просто обьеднцсние данных и подпрограмм в единый модуль. Наследование методов при создании новых объектов даст дололнитсльные возможности, выходя>цис за пределы простой инкапсуляции. Рассмотрим, пан ример, как можно расшириты>аш Пример с классом Е1еа>БГасК, привеленный выше. В определение класса, представленное в листинге 7.7, мы добавили открытую процедуру >(утуре, которая выводит на печать имя тина: 1 ав 1уре Е!еа>игаса; а также сделали внутреннюю структуру класса Е1еа>ЫГасг зал(ии1ен- 7.2. Наследование 317 ной [ргогесгс((), чтобы она могла наследоваться любым производным от нашего классом.

В наш класс стека входили только операции роп!1 и рор, которые соответственно добавляли и удаляли элементы стека. Предположим, что нам нужен новый класс йен5Еэсп, который ())ункционирует так же, как класс Е1ев5ЕасЕ, но включает еще один метод рееЕ, который возвращает значение верхнего элемента стека, никак не изменяя при этом сам стек. При помощи определения класса йе(ч5гасЕ из листинга 7.7 зта цель, по-видимому, достигается. Действительно, класс йечбЕасЕ наследует все свойства класса Г1епбгасЕ (все открытые методы и данные), но в него добавлен новый метод рееЕ.

Хотя в определении класса йеп5ЬасЕ ничего не сказано об операциях ропЬ и рор класса Г1оп5гпсЕ и операциях ТОЕ1 ев и ГговЕ1ев класса е1 ев, эти операции автоматически становятся применимыми к объектам класса йе(ч5гасЕ. Если эги классы поддерживаются как отдельные модули, разрабатываемые разными программистами, изменения в спецификации [а следовательно, и в реализации) или класса е1ев, или класса Е1ев5пасЕ будут автоматически перенесены и в определение класса йппч5[асЕ и будут оказывать такое же действие на объекты класса йе((5тасЕ, как и на объекты класса Е)ев5гасЕ. Листинг 7.7.

Наследование методов с1апп е1ев ( рпЬ)(с: е1ев() [ ч=О;) чощ ТоЕ1ев((п( Ь) ( ч - Еч ) ппп Ггов[!ев() ( гещгп ч: ) рг(чапе: пп( ч; с1апп [1ев5(ась: е1ев ( рпвыс: Е1ев5(асп() ( ю пе"О:) чппп рапп(е!ев и) ( мпе=пыеч1; пюгапе[пппе)=! ) е!еп рпрю ( юге=злее-1: ге[пгп п(огапе[ппге 1!) чп(6 Мутуре() (ргпп((("! ав (уре Е1ев5(ась ( и")) рготестеп(: пп(:ые: е1ев ппогппе[100)! с1апп йвч5(псп. Е1ев5(псп ( рюш (с: пп( рееп() (гещгп п(огпде[пые).РговЕ1ев() )) Тем не менее некоторая проблема остается нерешенной.

Дело в том, что метод Му5пасЕ для объектов типа йеч(5гасЕ по-прежнему печатает! ав Еуре Е1ев5ЕасЕ, поскольку этот метод унаследован от класса Г!ев5ЕасЕ. Эту проблему можно решить одним из следующих двух способов. 1. Можно просто переопределить метод МуТуре в классе йен5ЬасЕ следующим образом: чощ Мутуре() (рг!пп("! ав Гуре йеч5[асг(о")) Хотя этот способ и работает, он все же не является оптимальным, поскольку требует в производном классе полного переопределения каждого метода, в котором необходимы изменения.

318 Глава 7. Наследование 2. Можно использовать виртуальную (у(ггпа!) функцию. При определении метода обычно каждое имя подпрограммы, которая вызывается в определении, связывается с подпрограммой, на которую оно ссылается, во время определения метода. Это стандартная методика синтаксического связывания, присутствующая в языках типа С, Рааса(, Аоа и РОКТКАХ и большинстве компилируем)ах языков.

Но виртуальные подпрограммы динамически связываются во время вызова подпрогргьчиы. Чтобы понять разницу, определим метод г)уТуре внутри класса Е1еп)5(ас1 следующим образом: у)гтоа1 но1о Туреяаее)) (ртпГТСЕ1епзоасюп"):); хош мутуре)) (рг1пгй" 1 ав гуре" ). туренаве();1 В классе пен5тас1 можно определить Туре))ап)е следующим образом: Гпгтоа1 уо)6 Туреяаве() (рг1пгг(еяен5оасй)п"):1: Хотя в приведенном примере разница между двумя подходами не очень ярко выражена, отсроченное, позднее связывание вызова виртуального метода позволяет динамически изменять поведение классов во время выполнения.

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

Для каждого виртуального метода в производном классе резервируется некоторая область внутри записи, определя)ошей этот класс. Процедура-конструктор просто заполняет эту область, помещая туда ссылку на новую виртуальную процедуру, если она определена для данного класса. В противном случае в агу область помещается ссылка на виртуальную процедуру пз базового класса. 7.2.3. Абстрактные классы Может возникнуть ситуация, когда нам нужно, чтобы наше определение класса было всего лишь простым шаблоном для класса и с его помощьк) не было бы возможно объявлять объекты.

Для реализации подобной модели существует два альтернативных способа: абстрактные суперклассы и смешанное (пнх)п) наследование. Абстрактный суперкласс. Рассмотрим класс Е1еп)5(ас~ с виртуальной функцией Туре))зп)е, определенный выше. Голи он определен, то пользователь имеет право включить в программу оператор Е)ев51асп Х; и создать экземпляр класса Е1еп)5тасЕ. Однако нам может понадобиться, чтобы класс Е1еп)5ТзсЕ был просто шаблоном суперкласса и чтобы все объекты, использующие этот класс, принадлежали к производным от него классам. В Сп-+ это можно сделать, объявив Туре))ап)е как чисто виртуальную функцию: Игтоа1 уощ Туреяаое()=0; 7.2, Наследование 319 Невозможно создать объект класса, содержащего хотя бы одну чисто виртуальную функцию. Любой производный класс должен переопределить эту функцию для того, чтобы можно было создавать экземпляры этого класса. Смешанное наследование.

До сих пор предполагалось, что наследование происходит по принципу А =~ В, так что класс В является производным и в то же время модификацией класса А. Имеется и другая форма наследования, называемая смешанной (гп!х(п), при использовании которой мы только определяем различие между базовым классом и новым производным классом. Вернемся к нашему примеру и снова рассмотрим базовый класс Е1ев5сасЕ и производный от него класс йен5(ас1. Вместо того чтобы определять новый класс для класса йеи5сасЕ, можно определить дельта-класс, содержащий отличия производного класса от базового.

Хотя на самом деле в языке С++ такая возможность не предусмотрена, мы воспользуемся обозначениями, принятыми в этом языке, для определения дельта-класса 5сас1иобе: г(е1сас1азз 5мспипг( (1пт рееп() (ге!ьгп э!спаде(ю ге).ггппЕ1епю;! Затем мы создали бы новый класс йеи5сасЕ следующим образом: с1азз Кеп5тасп - с1азз Г1еп51асЬ ч Ое1гас1азз 51асхнпп' Смысл этой записи в том, что новый класс наследует все свойства класса Е1еп5сасЕ в том виде, как они были модифицированы дельта-классом 51аспйог(. Преимущество смешанного наследования заключается в том, что дельта-классы могут применяться с любым классом.

Так, если бы у нас имелся некоторый сравнимый класс Е1еп0цеце, то мы могли бы, используя тот же дельта-класс, что и в предыдущем примере со стеками, создать новый класс, который позволял бы получить значение элемента в конце очереди: с1апз пепрпеие = с1азз Г1епциепе + Ое11ас!ам 5тасгнпп' Этот кельта-класс можно было бы применять в различных ситуациях, избегая таким образом необходцмости сложного переопределения всех объектов класса.

7.2.4. Обзор языка ЗгпаШаПс История. Язык Вша!!га!(г отличается от всех других языков, описанных в этой книге, в двух отношениях: 1, Он разрабатывался как целая система, а не как просто средство для написания программ. 2. Объектная ориентация в этом языке изначально была встроенной концепцией в противоположность языкам С++ и Ас(а, в которых к уже существующим механизмам была просто добавлена концепция наследования.

Использование языка Вн1аИга!(с исходно было ограничено отсутствием доступных реапизаци1ь Но теперь это уже не так. Язык Вша!!га((с имеет немногочисленных, но преданных приверженцев. БшаИСа((с был разработан в начале 70-х гг. Аланом Кеем 1А1ап Кау) в исследовательском центре Хегох РАКС (Ра!о А(со Везеагс!1 Сепгег), Делью проекта под названием Пупа!юо(с было создание целой среды для персонального компьютера. 320 Глава 7. Наследование Это происходило во время расцвета деятельности Хегох РАКС вЂ” тогда были раз- раГ>отаны персональные компьютеры АИо и Вгаг, мышь, оконная среда (впоследствии весьма аффективно использованная Стивеном Джобсом (Я!геп )о!>з) в фирме Арр1е для разработки компьютеров Мас1пгоз1>), значки для программ, сети Ег!>егпег и Бшайгай.

В 1972 г. Дан Ингаллс (Рап 1пяа!Ь) разработал первую реализацию языка, известную как Бп>а!!га1к-72. Это была первая практическая версия языка. Затем в Яп>ай!а!к были внесены некоторые изменения и общепринятым стандартом описания языка стал 5>вайса!к-80, Поскольку официального стандарта не существует, название 5та11га1>! применяется для обозначения набора нескольких достаточно близких и чрезвычайно совместимых языков. Первоначально для выполнения программ на Яшайга)к требовалась целая вычислительная срока компьютера специального назначения По этой причине распространение этого языка было постаточно о> раниченным, Тех> не менее в настоящее время существует несколько реализаций этой системы общего назначения, и ее можно легко устанавливать на машины широкого класса типа рабочих станций РХ1Х и РС. В пашей книге мы описываем язьпс (а также реализацию, использованную для тестирования представленных в книге программ), соответствующий версии ОНС Вшайгайг 1.1.1, разработанной Фондом свободно распространяемого программного обеспечения (Ргее Вой»>агс ГоппдаВоп), которая легко доступна из многочисленных источников.

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

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

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