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

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

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

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

В листингах 7.2 и 7.3 приведены фрагменты пакетов Айа, демонстрирующие применение обеих стратегий реализации инкапсуляции. Л исти ш 7 2 соответствует модели, схематически изображенной па рис. 7.1, а (ассевв — переменная-указатель в языке А«1а), а листинг 1Ъ вЂ” модели, представленной на рис. 7.1, б. Листинг 7.2. Пример не а«мой инкапсуляции данных в языке Два раоааре А 1а Суре Му51аса 1в опчаве, ргосеоиге Меи51аса(5 сыт Му5васы: рг!часе Сура Му5васИер: прололжениеФ 308 Глава 7. Наследование листиигт .2 (продолжение) — Скрытие детали представления Му5Саск Суре Мувтасд 1в ассеяв Му5саскдер; — В пакете В содержится только указатель на стек епе: Листинг 7.3.

Пример прямой инкапсуляции данных в языке Ас)а раска9е А !в Суре Му5Саск тв ргтчасе; ргоседоге Меи5Саск[5: аос Му5Саск 1: рг1часе Суре Му5Саск тв гесогд: 1Ор; тПСЕВЕг: А аггау 11 .1001 от тптечег; епе гесоге. В пакете В содержится инфорнания о структуре стека епе; Некоторая разновидность прямой инкапсуляции, пример которой приведен в листинге 7.3, дается следующим определением типа; расдаве А 1в Суре МХ5Сася тв гесоге тор тпсерег: А: аггау 11..

1001 от тптедег; епе гесогд; В данном случае организация записи активации совпадает с моделью прямой инкапсуляции; тем не менее все имена переменных из пакета В видны. Этот механизм характерен лля языков типа Рааса!, в которых типы данных реализованы без инкапсуляции. Общие абстрактные типы данных Элементарные типы данных, встроенные в язык, часто позволяют программисту объявлять базовый тип лля нового класса объектов данных и затем уточнять некоторыее атрибуты последних. Это простая форма пол иморфизма, которы й более полробно обсуждается в разделе 7.3. Например, в языке ~ача имеется базовый тип данных лтлссив, Лля которого определены некоторые элементарные операции, например операция индексации. Однако в опрелелении класса Чесс (в нижеследующем примере) в)ача зацается определение массива Чест Х, который содержит объекты целого типа: с1аьв Чесс )тпС [) Х = пен тпт [10)) Здесь Х является массивом из десяти компонентов целого типа, доступ к которым осуществляется при помощи индексов О, 1, 2, ..., 9, Можно написать подпрограммы, которые будут манипулировать объектами класса Чесс, но те операции, которые были определены лля базового ттлпа лацных (то есть в данном случае для массивов), будут также оставаться доступными.

При определении абстрактных типов ланных желательно также использовать подобную структуру. Например, в языке Аг)а определение нового абстрактного типа данных стек с операциями ридй и рор, которые вставляют и удаляют элементы стека, можно реализовать в форме пакета, текст которого приведен в листинге 7.4.

7.1. Повторное рассмотрение абстрактных типов данных 309 Отметим возникающую здесь проблему: опрелеление типа элемента стека является частью общего определения стека, поэтому наше определение является определением только стека целых чисел, Для стека вещественных чисел или объектов типа 5есс)оп требуется отдельное определение в лругом пакете, хотя прелставлеьше стека и операций рцеп и рор может быть определено точно таким же образом. Листинг 7.4.

Определение стека целых чисел как абстрактного типа данных в языке Ас)а раскаре !пс51асКТуре !а суре 5саскь5ьае: Роаьсьче) 1а рючасе; ргосевцге Ршп! 1: чп !ьяеоег: 5 !и оцС 5ьась). ргосесцге Рор!1: оцС !пьецег; 5: ьп ацС 5!ась); рг1чате Суре 5!ась!5!се: Ром Сьче) ьа гесого 5ск5согаре: аггау !1. 5!се) ог ьпсечег. Тор: ььяеоег галов О .5!ее := О. епо гесаго. епв !пС5Сасьтуре; расхаОЕ Ьооу !п151асьтуре !а ргосевцге Рцаш 1: !и н!Серег; 5. 1п оцс 5!ась)!а Ьев!п тело процедуры Рцап епгд ргосевцге Рор! 1 оцс ! пьерег; 5. 1п оцс 5!ась )! а Ьевтп — 1ело процедуре Рор епо, епо 1пС5СасСТуре: Определение общих абгьпрактььыхпьныов дань!их позволяет такой атрибут типа залавать отлсльпо, для того чтобы дать определение одного базового типа с атри- бутами в виде параметров с последующим созданием нескольких специализиро- ванных типов, выведенных из оп ного и того жс базового ти па.

Эта структура похо- жа на структуру определения типа с параметрами, за исключением того, что в ней паральетры могут влиять пс только па опрслслепис самого типа, но и па определе- ние операций в определении абстракп юго типа, а параметрами могут быть не только числовые значения, по и имена типов, Пакет Лба, прпвслсп ный в листинге 75, дает пример такого определения общего типа для типа оби1ий стек, в котором и тип хранимого в стеке алельента, и максимальный размер стека определены как пара- метры этого общего типа, Листинг 7.5. Абстракция общего стека в языке Ас)а Оепегпс Суре Г!еп 1а рг1часе: расхаое Апу51асхтуре 1а Суре 5ьаск!5!ге: Рогьььче) ьа рг!часе; ргосеоцге Рцаы 1: !и Е!еп; 5: 1п оцС 5ьаса): ргосевцге Рор!1: оцС Е!вп; 5: ьп оцС 5!ась): рг1чаСе Суре 5!ась!5!ге: Роьп Сьче) ьа гесогв 5СК5Согаре: аггау !1 .

5!ге) от Е)еп; Тор; ьпСерег гапОЕ О .5!Се :- О, епв гесогв; продолжение аь 310 Глава 7. Наследование Листинг 7.о(продолжение) епе Апу5тасЕТуре: расдаде Ьоеу Апу51аситуре да ргосеоцге Рцдп(1: яп е1едц 5 дп оцт 5тасМ)!д Ьед1п Тело процедуры Рцдп епо, ргосеецге Рор(1: оцт Е)еп. 5 )п оцт 51аск))д Ьеддп — Тело процедуры Рор епо; епе Апу5тасдтуре; Порождение конкретного типа из определения общего типа.

Определение общего пакета представляет собой шаблон, который можно использовать для соз- дания опрслеления конкретного типа данных. Г(роцесс конструирования конкрет- ного определения тина из общего определения для заданного набора параметров называется лорождепиеж ((па(апг(ат(оп), или соэданиелс типа. Например, из обще- го определения стека, приведенного в листинге 7.5, можно создать определение стека целых чисел, аквивалентного тому, который определен в пакете 1пт5таскТуре (см.

листинг 7А), при помощи объявления расходе [п15тдсктуре дд ПЕЫ АПу5тдС)шуре(Е1Еа иы ~ПЕЕдЕГ), Стек, содержащий данные тина 5ест',оп, можно определить нри помощи следу- ющего порождения: раскаде 5ет5)аситуре )д ПЕИ Аоу5таСИТурЕ(Е1ЕП ик 5ЕСт~ОП).

Далее можгш определять стеки целых чисел, имеющие различные максималь- ные размеры: 51к1: 1п15тасЕТуре, 5)ась(100) . Иеы5кю (п15тасдтуре.5)ад(20): Аналогично можно задавать размеры стеков, содержащих объекты тина 5ест) оп: 5ес51асд 5е)51асдтуре 5)асд(10); Отметим, что общий тип Апу5тасдгуре можно использовать для порождения кон- кретных типов много раз с различными значениями параметров, и каждый раз мы буд~м получать другое определение типа с именем 51асЕ в соответствующем пакете. Таким образом, при ссылке на тип 50асЕ в каком-либо объявлении программы может возникнуть неоднозначность.

Для се разрешения язык Аг(а требует, чтобы имя паке- та предшествовало имени типа, например 1005тасктуре. 50асЕ или 5ет51асЕ Туре. 50асу. В Сее имеется аналогичное понятие шаблон (теп)р(а(с), который используется для определения общих классов, например: ЬЕяр)атЕ ко1адд ИИя тИПди С)ада Икя КПИССа ОиридСПЕИИС КЛаССа Здесь задается неограниченное множество определений классов для всех пара- метров ия)я типа. Реализация. Реализация общих типов данных, в принципе, осуществляется непосредственно. Когда в программе создается определение типа, требуется пере- дать в пакет с определением общего типа конкретные значения параметров.

Ком- пилятор использует определение общего тина как шаблон, вставляя в него задан- 7.2. Наследование 311 ные значения параметров и компилируя затем определение так же, как если бы оно было обычным пакетным определением без парамш ров. Этот способ можно сравнить с макроопределениями 1)се~1 пе в языке С. В процессе выполнения программы появляются только объекты данных и подпрограммы; определение пакета служит в первую очередь для того, чтобы ограничить область видимое~и этих объектов данных и подпрограмм. Сами пакеты не являются частью структуры исполняемого кода программы, Если в программе на основе опредечепия общего порождается много конкретных типов (как могло бы случиться, если бы пакете определениями общих типов поставлялся в виде библиотеки), то такая непосредственная реализация может оказаться слишком неэффективной, так как каждое порождение нового конкретного типа требует включения в программу копии всего пакета вместе со всеми определенными в нем подпрограммами, которые затем должны быть заново перекомпилированы.

Было бы лучше, еслибы реализация позволяла избегать создания новой копии каждой подпрограммы, а также полной перекомпиляции всего пакета. Эта тема подробнее обсуждается в разделе 7,3, п<квяшенном полиморфизму. 7.2. Наследование Информация, известная в одной части программы, часто должна использоваться в другой ее части. Например, использование фактических параметров вызывающей подпрограммы в качестве формальных параметров некоторой вызываемой подпрограммы представляет собой механизм передачи значений фактических параметров вызывающей подпрограммы в вызываемую подпрограмму. В данном случае эта связь между различными частями программы осуществляется явным образом— ее формирует конкретный вызов подпрограммы.

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

Раннюю форму наследования можно обнаружить в правилах определения области видимости для структурированных блоков данных. Имена, используемые во внутреннем блоке, могут быть унаследованы из впешнсго блока. Рассмотрим, например, следующий блок данных; рпь ъ з. Н1оаг з, к В операторе присваивания 1 = 1 ъ ~ и 1, и 1 являются локальными вещественными переменными, объявленными во внутреннем блоке. Но переменная 1 унаследована из внешнего блока, а наследование объявления пг ) блокируется во 312 Глава 7. Наследование внутреннем блоке благодаря переопределению типа переменной ! как вещественного. Хотя правила определения области видимости в языках Ада, С и Рааса! являются разновидностью наследования, этот термин чаще используется для ссылки на передачу данных и функций между независимыми модулями программы.

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

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

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