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

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

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

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

Чаще всего используется операция присваивания одной записи некоторой другой, имеющей такую же структуру, например: жгись Еяр1оуееТуре !МРОТЙЕС: Еяр!оуее - !МРОТРЕС, где !!!РОТ!!ЕС вЂ” запись, имеющая те же атрибуты, что и Епр1оуее. Соответствие имен компонентов различных записей позволяет применять присваивание в языках СОВО1. и Р1./1. Например, в СОВО1. оператор ЯОЧЕ СОРРЕ5РОВО!ЙС !ВРОТЙЕС ТО ЕМРЕОУЕЕ бд. Структурированные типы данных 259 присваивает каждый компонент записц 1((РОТйЕЕ соответствующему компоненту записи ЕИРЕОУЕЕ, где соответствующие компоненты должны иметь одинаковые имсна и типы данных, но порядок их расположения в каждой записи может быть произвольным. Реализация.

Представление записи в памяти состоит из единого непрерывного блока памяти, в котором компоненты расположены последовательно (рис. 67). Для указания типов данных или других атрибутов отдельных компонентов могут потребоваться дескрипторы, но обычно для компонентов записи нс требуется никаких дескрипторов во время выполнения программы. АОЕ ЗАЬАйУ ЕзЕРТ Рис. влк Представление в памяти записи Егор(оуее Поскольку инлсксы отпел ьных компонентов (имена полей) известны еще во время компиляции (их не надо вычислять во время выполнения программы), то реализация операции выбора достаточно проста. Объявление записи также позволяет определить рззмср каждого компонента и его позицию внутри блока памяти еще во время трансляции.

В результате смеи(ение каждого компонента также можно вычислить во время трансляции. Основная формула доступа, которая используется лля вычисления местоположения 1-го компонента, выглядит следующим образом: (-зиачеиие(ч.11 - а + „з (разиер й.З) где а — базовый адрес блока памяти, содержащего запись ((, а н.,з — компонент под номером з.

Суммирование здесь необходимо из-за возможного различия размеров каждого компонента. Но зту сумму всегда можно вычислить во время трансляции и тем самым получить значение сдвига К, для 1-го компонента, так что во время выполнения потребуется добавить только базовый алрес основного блока памяти: 1-зиачеииеЯ 1) = и + К, Отводимые для хранения некоторых типов данных области памяти должны начинаться с определенных адресов. Например, области памяти, выделяемые под целые числа, должны пачипатьгя на границе слова.

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

1оиппьег: 1 еар1оуее: 260 Глава О. Инкапсуляция область памяти, отводимая под ноле 1Фцвйег, должна начинаться на границе слова, и поэтому три байта межпу полями 01и(5(оп и 1ФцвЬег никак не используются и заполняются незначащей информацией. Представление в памяти такой записи равносильно представлению в памяти записи, создаваемой слелуюшим объявлением: 5$гисг Евр1оуеео(ю 51оп слог 01у151оп. сьэг ЧпооеОРаОО1пр[31: шт 1ОНовэег ) Евр(оуее Операция присваивания целой записи некоторой другой, обладающей такой же структурой, может быть реализована как простое копирование содержимого блока памяти, представляющего первую запись, в блок памяти, представляющий вторую запись.

Более сложная операция МОЧЕ СОРРЕ5РОНО1МО может быть реализована как последовательность операций присваивания отлельных компонентов одной записи компонентам другой записи. Записи и массивы со структурированными компонентами В тех языках, в которых предусмотрены в качестве основных типов дани ых и записи, и массивы, обычно допускается использование комцонептов этих двух типов совместно с компонентами элементарных типов [и, как правило, других структурированных типов, таких как строки символов).

Например, может оказаться полезным такой объект, как вектор, компонентами которого являются записи. Например, следующее объявление языка С: 55гост Евр1оуеетуре 11по 1О: 1п1 Яро. Поа( 5ЯСАку; сваг рерм ) Евр1ауее[5001: объявляет массив, состоящий из пятисот компонентов, каждый из которых является записью типа Евр1оуееТуре. Компонент такой сложной структуры обычно выбирается при помощи послеловательности операций выбора, причем сначала выбирается компонент вектора, а затем — компонент записи, например Евр1 оуее[3) . 5А[АНУ.

Запись также может состоять из компонентов, которые являются массивами или другими записями. В результате этого можно создавать записи, имеющие иерархическую структуру, на верхнем уровне которой располагаются компоненты, сами являющиеся массивами или записями. Компонентами второго уровня иерархии также могут быть записи или массивы. В языках СОВО1. и Р1/1 эта иерархическая организация выражена синтаксически посредством присваивания номеров уровней для указании каждого нового уровня компонентов, Типичным в этом отношении является объявление РЕ/1( 1 Евр1оуее.

2 Нале 3 [551 СНАНАСТЕЙ(1(О . 3 Е1г51 СНЯРЯСТЕк(15ц 3 Н1ОО1е СНАРЯСТЕН( 1 М 2 Яре Е1ХЕ0(2ц 2 ЯОПге55, 6.1. Структурированные типы данных 261 3 5(геем 4 Иишвег Е1ХЕО(51, 4 5Г-Наше СНАЧАСТЕк(20 К 3 Сгту СНАНАСТЕН(!5!. 3 5тате СНАНАСТЕЧ(!01, 3 7гр Г1ХЕ0(51; Сиггтаксис этого объявления похож на краткое содержание книги с заголовками, подзаголовками и т. д. Структура данных, определяемая этим объявлением, состоит из одной записи Ешр! оуее, компоненты второго уровня которой представлены именами Маше, Аое и А(1(1гезц Аое — зто компонент злементарного типа (целое число), а компоненты Наше и А((огезз являются записями, компонспты которых расположены уже на третьемуровне иерархии. Когипонспт51 ее! записиАН((гезз также является записью, причем ее компоненты являются компонентами уже четвертого уровня иерархии, Реализация.

Представление в памяти векторов и записей, компонентами которых являются другие векторы и записи, является простым расширением представления простых векторов и записей, В разделе 6,1.5 мы рассматривали векторы, состоящие из векторов. Вектор, состоящий из записей, представлен в памяти так же, как и простой вектор, составленный из целых чисел или компонентов другого элементарного типа, с тем лишь отличием, что блок памяти, прсдставлщошии компонент вектора в блоке большего размера, отведенном для самого вектора, является блоком памяти, выделенным для хранения записи.

Таким образом, вектор записей представлен в памяти примсрно так же, как вектор, состоящий из векторов (см. рис. 6.5), но каждая строка в нем заменена на представление записи в памяти. САЕТ МАМŠ— ---г - ГЕЙЗТ МЕ00(.Е -- АОЕ (ЧОМВЕЙ ЕМР1.0УЕЕ ЗТЙЕЕТ ЗТ-ЫАМŠ— А00ЙЕЗЗ С(ТУ ЗТАТЕ Рис. З.В. Представление многоуровневой записи языка РС/1 262 Глава б. Инкапсуляция Аналогично запись, компонентамн которой являются записи (или векторы), сохраняет свою последовательную структуру прелставления в памяти, но подблоки, отведенные пол отдельные компоненты, могут являться прелставлениями целой записи. Рис.

68 иллюстрирует прелставление в памяти структуры данных РЕ/ 1, объявление которой приведено выше, Выбор отлельных компонентов происхолит последовательно — сначала определяется базовый алрес всей структуры в целом, затем вычисляется сдвиг для компонента первого уровня иерархии, после чего вычисляется смещение относительно этого базового адреса лля нахождения местоположения компонента второго уровня и т, д. Вариантные записи Записи часто используются для прелставления похожих объектов, которые могут содержать различаюгциеся лаиные. Например, зарплата служащему может начисляться за отработанные часы (почасовая) или за работу в течение месяца (оклад). Может оказаться полезным иметь один тип зашг:и, который, впрочем, имеет несколько вариантов. В такой записи имеюгся один или несколько компонентов, общих лля всех вариантов, а также несколько других компонентов, чьи имена и типы данных уникальны для каждого варианта записи.

Например, в записи, содержащей информацию о зарплате служащих, могут быть лва варианта — для тех служащих, которые имеют ежемесячную фиксированную зарплату (оклал), и для тех, кому установлена почасовая оплата. Объявление языка Разса) Гуре РауТуре - (5а1аг1ев. Ноьг1у П чаг Еяр1оуее гесогв 1О; 1лтедег. Оерм аггау [1 .3) оГ сЬаг: Аве; 1лсевег: сазе РауС1азм РауТуре от 5а1аг1ев; ОЧолсюуяаье; геа1: 5сагсваге: 1лтеяег П Новг1у; <Ноэгвасе: геэ1; Рея; лееяег; Окегмве 1псеяег) елв' определяет такую вариантнук> запись.

В атой записи всегда присутствуют компоненты ТО, Оерт, Аое и РауС!а55. Если значение компонента РауС1а55 равно 5а1аг1ег1, то в записи также присутствуют компоненты НолЕл1упате и 5тагТОаъе, в то время как если РауС1а55 = Ноог1у, то в записи будут содержаться компоненты НоигйаТе, Ред и Оуегс1пе. Компонент РауС!а55 называется тегом (Разса!) или дискрцчигшптом (Ада), поскольку оп служит лля указания варианта записи, который лолжен использоваться в данном месте программы. Операция выбора компонента вариантной записи аналогична операции выбора компонента обычной записи.

Например, Епр1оуее.иолсл1удате и Епр1оуееЯеп выбирают компоненты из определенных ранее вариан~оп записи Епр1оуее. Для обычных записей каждый компонент существуег в течение всего времени жизни записи, а в случае вариантной записи компонент может просуществовать какое-то время (пока тег имеет соответствующее значение), затем прекратить свое существование (если тег меняет значение) и вновь появиться впослелствии при изменении значения тета на первоначальное. Таким образом, выбор компонента Епр1оуееЯеО может 6Д. Структурированные типы данных 263 означать пепл<тку выбрать не существующий в данный момент компонент. Проблема выбора не существующего в программе компонента вариантной записи аналогична ошибке, связанной с указанием индекса вне диапазона его значений для массивов.

Эту проблему мы обсуждали в предыдущем разделе, и методы се решения для вариапю<ых записей похожи на те, что используются вообще для всех структурированных Ланных. 1. Динамическая проверка. Во время выполнения программы до того, как осуществлять выбор нужного компонента, можно проверить значения компонента-тета.

Это позволит убедиться в том, что компонент в данный момент существует. Если значение тега правильное, то нужный компонент доступен; в противном случае ато является ошибкой времени выполнения программы, н тогда инициируется специальный способ ес обработки, во многом схожий с проверкой приналлежности индекса массива лиапазону его значений. 2. Отсу<яствие проводки. Язык програмлшрования может быть разработан такил< образом, что он попускает определение вариантной записи без явного указания тета-компонента, солержимое которого можно было бы проверить во время выполнения программы, поэтому всегда предполагается, что выбор компонента такой записи правилен. Из-за способа реализации вариантных записей, которую мы обсудим чуть позже, подобный выбор всегда возможен. Однако если компонент не существует, то существующие в ланный момент значения вариантных компонентов могут быть нечаянно переписаны или использованы не по назначению.

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

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

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