Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 183

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 177 178 179 180 181 182 < 183 > 184 185 186 187 188 189 .. 316 >> Следующая

редварительно опием те аспекты поведения абстрактного вчислите-ля, которые явля тся обими для оперирования с лбыми языковми конструкциями, имеющими тип: для переменной, процедуры и др. Как было уже замечено, у такой конструкции имеется атрибут <Тип>, который может быть извлечен абстрактнм вчислителем для тех или иных действий.
ля встроеннх в язк типов единственное действие абстрактного вычислителя с атрибутом <Тип> — извлечение его значения, т. е. типа конструкции. Все остальное, что может потребоваться (к примеру, активизация приведения) стандартизовано языком и выполняется как атомарная команда вычислителя. е для вводимых типов атрибут <Тип> более сло ен: он имеет составляие, которые доступны для действий вчислителя. днако и здесь нет смысла определять оперирование специально, поскольку структура атрибута <Тип> зафиксирована языком и никогда не меняется. Так что средства работы абстрактного вычислителя с базовыми и выводимыми типами, в частности, задание значений составляих и использование значений составляих, мо но рассматривать как библиотечные функции, специфицированные язком.
Ситуация с конструкторами, порождающими структурные типы, несколько сложнее, чем для выводимых, поскольку в ходе обработки описания типа при вчислении конструктора долна бть достроена ветвь, которая определяется программистом. Более того, тип компонент мо ет быть представлен именем типа, описанного ранее (в некоторых языках, возмо но, что поз е), или е он описывается непосредственно в данном конструкторе. Во всех случаях должна быть обеспечена доступность селекторов компонент.
Как и ранее, мы не будем вдаваться в детали распознавания требуемой структуры по конкретному синтаксису. соответствии с определением набора компонентов в результате распознавания долно бть построено место присоединения дерева набора компонентов у атрибута <Тип> (см. рис. 9.2, где это место определяется для <Переменной>), к которому подсоединен один
514
9.
Тип =
Статический набор Динамический набор Гибкий набор
Рис. 9.2. Структурная переменная
из вариантов структуры набора (см. рис. 9.3). Схемы для компонент набора приведены на рис. 9.4.
Значением атрибута <Тип> может быть структурный или неструктурный тип, представленный своим деревом либо именем. Если язык допускает только статические типы, то в результате трансляции имена типов могут быть заменены соответствующими им деревьями, которые используются для контроля правильности задания оперирования с типизированнми данными и при необходимости для встраивания подпрограмм ну нх приведений. В статически типизированном язке после вполнения этих действий типовая информация нигде не используется, и надобность в атрибуте <Тип> исчезает.
ля языков, которые допуска т динамические вычисления с типами (хотя бы в самой рудиментарной форме) атрибут <Тип> не мо ет бть ликвидирован. н (бть мо ет, в трансформированной форме) используется в процессе вычислений. апример, в объектно-ориентированных язках это сслка на таблицу виртуальных методов объекта.
Новым по отношению к рассмотренным ранее абстрактно-синтаксическим структурам у конструктора набора компонент является то, что дерево строится как часть атрибутной информации верин . Эта ситуация аналогична процедурам: в данном случае атрибут фиксирует структуру, которая должна использоваться при вычислениях в качестве программы для абстрактного вычислителя.
Все теоретически возмо ное разнообразие вариантов набора компонент в ннених язках не используется. Конкретные формы конструкторов дан-
9.3. СТРУКТУРНЫЕ ТИПЫ
515
Рис. 9.3. Структура набора
ных выбираются из соображений согласованности с операционными единицами программ. Используемые на практике варианты — это то, что действительно необходимо для представления данных, адекватного стилям структурного програмирования и ООП.
9.3.2. Записи
Этот конструктор представляет в программах структуру, в которой реализуется математическое понятие декартового произведения мно еств значений компонентов. В программировании он называется конструктором записей (Pascal) или конструктором структур (С/С++, Алгол-68). Компонента записи называются полями. Каждое поле имеет собственное имя и явно
516
ГЛАВА 9. СТРУКТУРЫ ДАННЫХ
Компонент набора Компонент набора
Рис. 9.4. Схемы для компонент набора
указываемый тип значений, которые оно может принимать. Как следствие, число компонентов-полей всегда статически определено.
Существуют две точки зрения на понятие записи, касающиеся упорядоченности ее полей. Первая отражает абстрактный подход, согласно которому совокупность полей для их использования не требует знания порядка их следования в описании, вторая связывает порядок следования полей в описании с их порядком размещения в памяти, т. е. восходит к реализационному представлению. В С/С++ структуры — это упорядоченный набор, а стандарт языка Pascal разрешает при реализации размещать поля записи в любом порядке. о независимо от представления, порядковй номер поля не используется для селектирования. По причинам, описанным в § 9.3.1, никогда не предлагаются средства организации цикла по полям: запись объединяет, как правило, разнотипные и прагматически разнородные компоненты, их обработку не получается описвать единообразно.
Предыдущая << 1 .. 177 178 179 180 181 182 < 183 > 184 185 186 187 188 189 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100