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

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

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

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

Таким образом, опа может игнорировать операции, специально разработа<шые для манипулирования с объскгами данных этого типа, и вместо этого непосредственно обращаться к их компонентам. Основная цель инкапсуляции определения абстракпюго тина данных — сделать такой доступ невозможным, чтобы только подпрограммы, которые «знают», как представлены объекты данных этого типа, и являлись операциями, определенными как часть абстрактного типа. Из тех языков, которые описаны в этой книге, только А<)а, Сь<- и Вша11<а11< поддерживают инкапсуляцию таких определений абстрактных типов данных.

В языке А<1а определение абстрактного типа данных представляет одну из форм пикета (конструкция раскаце). ~акст, определяющий абстрактный тип данных 5есг опгуре, может быть определен в виде, представленном в листинге 7.1. Объявление > з рг> «аге для типа 5есюоп означает, что внутренняя структура объектов данных 5ест>оп недоступна из подпрограмм, использующих:этот пакет. Фактические детали этого 7.1. Повторное рассмотрение абстрактных типов данных 305 типа даны в конце пакета в компоненте ргвчаге. Только подпрограммы, определенные в самом пакете, имеют доступ к этим закрытым данным. Так, например, процедуры Авввдп5(о((епг и Сгеасе5есг(оп могут обращаться к массиву С1азвйо11, который является одним из компонентов типа 5есг! сп.

Но никакие другие процедуры, внешние по отношению к пакету, не имеют доступа к этому компоненту, хотя могут объявлять переменные как объекты типа 5есгвоп (и указывать значение параметра, задающего максимальное количество студентов в группе). Реализация. Определение абстрактных типов данных в виде пакетов А()а не затрагивает никаких новых идей, относящихся к их реализации.

Пакет обеспечивает инкапсуляцию для множества определений типов н подпрограмм. Таким образом, его осповнос достижениезаключается в ограничении видимости пмсн, объявленных в пакете, чтобы пользователи абстрактного типа дшшых не смогли получить доступа ко внутренним элементам определения. Если же компилятор определяет, что некоторая процедура имеет доступ к определению типа, то применяются алгоритмы размещения объектов данных в памяти и доступа к пнм, описанные в предыдущих главах. Хотя, как только что было сказано, реализация пакетов языка А()а не использует новые идеи реализации, все же стоит рассмотреть концепцию пакетов более подробно. Кюкдый пакет состоит из днух частеи: спецификации и реализации.

Как видно из листинга 7.1, спецификация пакета 5есг оп1уре определяет все данные, типы и процедуры, которые известны н видимы для подпрограмм, определенных вдругих пакетах. Реализация процедур, объявленных в спецификации пакета, задается в компоненте раск аде Ьоду (тело пакета). В тело пакета ыо(ут входить также дополнительные объекты и типы данных, которые нс должны быть видны на других пакетов. В данном случае процедура 5сйесы1е((оо!в вызывается только из процедур Авв!Оп5тосепг и Сгеасе5есгвоп, и сс имя просто неизвестно вне данного пакета.

Листинг 7.1. Определение абстрактного типа данных Вес((оп в языке Ас!а расхаде 5осмоптуре ха Суре 5гшеещ!О (в 1пгедег; Суре 5есюоп(Мах5ые вп(едег1 !в рг1чате; ргосепыге Аввщп5(озеп'(5есв, 1п оыт 5есмоп: 51чс 1п 51ыееп(!ОН ргосееоге Сгеа(е5есмоп(5есц !и ощ 5ессхоп! 1пв(г 1п впседег: роав хп впгедег1: ргхчаее Суре 5есыоп(нах5ые: !пеедег1 1в гесогв аоою 1пседег; !пв(гос(ог 1п(едег; С1авв5(ве вп(едег галде д Мах5ые =- 0; с!асвао11 аггау ( 1. мах5ые1 ог 51ыоепьш; епе гесоггй епо расхаде Ьооу 5ес(1оптуре вв ргосесоге Авв!дп5ьосеп((Л вв — Операторы, всгавпвющие обвехт ввысеп( в С(аввяо11 епсц ргосееыге сгеаье5ессвоп(11 1в продолжение р 306 Глава 7. Наследование Листинг 7.1 (продолжение) Операторы. инициализирующие конлоненты записи 5есыап епб; ргаседцге 5несцаейоою<аз зв Операторы.

определяющие расписание лекций в аудитории епб: епб, Необходимость указания имени процедуры в спецификации пакета объясняется достаточно просто: компилятору нужно знать сигнатуру процедуры, если она вызывается из другого пакета, а типы формальных параметров каждой процедуры задаются именно в спецификации пакета. Например, при вызове процедуры Авюдп51цбе из подпрограммы какого-либо другого пакета необходима информация о том, что у данной проттедуры имеются два фактических параметра: один типа 5ес1топ (являющийся одновременно входным и выходным те оцс) и второй параметр типа 51цбеп110 (являкзщийся только входным те).

Но почему же определения закрытых данных, которые используются только в тслс данного пакета и неизвестны за его пределами, также помещаются в его спецификации? Казалось бы, проще ограничиться номсщением их в тело пакета. Чтобы понять, почему в языке Аг1а пакеты определены именно таким образом, нужно рассмотреть два типичных способа реализации абстрактных типов данных. На рис.

7.1 представлены две модели реализации инкапсулированных объектов данных. На рис. 7.1, а схематически изображен пример ттегтряятой итткапсуляции. В атом случае структура абстрактзтого тина данных определяется спецификациейй пакета А, Фактическое местоположение объекта Р задается и ко~пролируется в записи активации для пакета А. В записи активации пакета В, который объявляет и использует объект Р, содсржтгтся указатель на фактическое местоположение объекта. Запись активации пакет А Запись активации Запись активации пакет В пакет А Запись активации пакет В Рис. 7.1. Две модели реализации абстрактных типов данных: в — непрямая инкапсуляция обьектв Р; б — прямая инкапсуляция обьектв Р Альтернативная реализация,называемая прямой инкапсуляцией, схематически изображена на рис.

7.1, б, Как и в случае непрямой инкапсуляции, структура объекта данных абстрактного типа определена в спецификации для пакета А. Но теперь фактическое местоположение объекта Р контролируется записью активации для пакета В. 7.1. Повторное рассмотрение абстрактных типов данных 307 В чем же разница между этими двумя способами7 В случае непрямой инкапсуляции реализация абстрактного типа данных действительно не зависит от его использования. Если потребуется изменить внутреннюю структуру объекта Р, то п ридется менять только пакет А, Пакету В только необходимо «знать», что объект Р является просто указателем, а формат данных, на который указывает Р, для пакета В не имеет значения.

Способ непрямой инкапсуляции хорош для больших программ, содержащих тысячи модулей, так как отпадает необходимость заново компилировать каждый модуль, где используется объект, определение которого поменялось; за счет этого можно значительно сэкономить время. Но, с другой стороны, при использовании этого способа дополнительное время тратится на доступ к инкапсулированным объектам при выполнении программы. Доступ к объекту Р каждый раз подразумевает обращение к указателю на этот объект. Хотя само по себе это действие не связано со значительными затратами времени, многократное обращение к объекту через указатель может оказаться довольно дорогостоящим. Прямая инкапсуляция характеризуется прямо противоположными свойствами.

В данном случае объект данных Р хранится в записи активации пакета В. Доступ к компонентам объекта Р теперь может быть осуществлен быстрее, поскольку в пределах локальной записи активации можно применить стандартную технику доступа к объектам данных по формуле базовый адрес + сцвиц в данном случае нс требуется никаких промежуточных указателей. Но если представление объекта данных меняется, то все пакеты (например, пакет В), в которых этот объект используется, должны быть заново скомпилированы. Это увеличивает затраты иа компиляцию, но ускоряет выполнение программы. В языке Аг1а используется прямая модель инкапсуляции, которая обеспечивает максимальную эс1х1зсктнвность выполнения программы.

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

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

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

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