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

 

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

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

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

В противоположность неструктурным структурные типы предусматривают доступ к компонентам, из которых они состоят. В этом смысле такие типы всегда зада тся конструкторами структур даннх со стандартнми (для конструктора) селекторами компонент.
бстрактная точка зрения на структурне типы требует рекурсивного определения их конструкторов: компоненты — это объекты произвольных типов, в том числе и такие, которые построены с использованием данного конструктора. о здесь не появляется "дурная" бесконечность: цепочка вло енности применения конструкторов всегда статическая и всегда заверается базовыми (неструктурнми) типами (сравнить с бекусо-науровой формой). ное дело, когда рекурсивно определяется тип в программе. Это тот случай, когда нельзя удовлетворительно трактовать возможность компонента объекта иметь тот е самый тип, что и определяемый. бычное соглаение для дан-
9.3. СТРУКТУРНЫЕ ТИПЫ
509
ной ситуации — трактовка рекурсивности как указателя на объект определяемого типа. Поэтому, как правило, в языках для такой вложенности используются явные обозначения указателя.
Несколько слов о соотношении понятий типа и структуры данных. Структура — это определение того, из чего и как строятся данные некоторого типа. Таким образом, типом даннх логично назвать мно ество значений, которые задаются одним и тем же конструктором структуры данных. Следуя принципам абстракции, нужно различать употребление значения как структурного объекта, т. е. состояего из более простх элементов, и как единого объекта оперирования, когда сведений о структуре значения не требу тся. В первом случае мы говорим о структурах даннх, а во втором — о типах. В точном соответствии с таким разграничением можно говорить о структуре и типе переменной, способной принимать значения. Но по отношению к переменной чае употребляется термин тип, поскольку основные действия с переменной — принимать и извлекать значение в целом — относится к абстрактному, а не структурному рассмотрени значения.
С абстрактной точки зрения и значения, и переменные одного типа характеризуются тем, в вычислениях каких операций они могут участвовать как аргумента и/или результаты (здесь понятие операции трактуется рас-ирительно: оно охватывает как сами операции, так процедуры и функции, определяеме для данного типа). В этом смсле, имея в виду традицион-не способ спецификации параметров, мо но ото дествить тип значения с областью значений соответствующего аргумента операции. То же про тип результата.
анная характеристика внене очень похо а на математическое определение областей определения и значения функции. днако стоит указать на суественное отличие. ля математической функции эти области точно указывают на то, из чего может быть вычислена функция, и что можно получить в итоге таких вчислений. рограммистские области аргументов и результата — это чисто синтаксические понятия, никакого отноения к функциональному отобра ени не имеие. ля согласования спецификаций параметров с математическими областями в языке долны быть средства описания таких областей, т. е. гибкие возможности оперирования с типами. В частности, требуются динамические вычисления над типами как объектами оперирования (например, для выра ения соотноений). днако традицион-не системы типов язков программирования исходят из концепции статического контроля типов: вынесение проверки типовой правильности употребления переменных и значений на уровень трансляции. Эта чисто синтакси-
510
9.
ческая позиция просто не оставляет места для задания динамических вычислений типов.
9.3.1. Наборы компонент
Определение 9.3.1. Конструктор общего вида, назначение которого есть определение набора или кортежа именованных значений-компонент, называется набором компонент. Если T1, ..., Tn — типы компонент, а Ki : Ti — обозначение того, что компонента с именем Ki имеет тип Ti, то кортеж (упорядоченных) компонент обозначается как:
(K1 : T1; ...; Kn : Tn)
а набор (неупорядоченых):
(K1 : T1, . . . , Kn : Tn)
Конец определения 9.3.1.
Это определение не полно с точки зрения программирования, потому что в нем ничего не сказано ни о том, мо ет ли меняться количество компонент и как оно задается, ни о том, что такое селектор.
Чтобы провести требуемые уточнения, необходимо разграничить случаи:
• статический набор, когда число компонент фиксируется при определении;
• динамический набор, когда число компонент фиксируется как значение некоторого объекта и не мо ет бть изменено после применения конструктора для определения структур данных;
• гибкий набор, когда число компонент при определении не фиксируется, а объект с конструируемой структурой данных могут в динамике выполнения программы состоять из разного числа компонент.
Для определения селекторов следует выделить атрибуты, идентифицирующие компоненты набора, возможно, через посредство некоторых функций, зависяих от этих атрибутов:
a) порядковый номер компонент в наборе, если набор упорядочен;
b) статическое имя компонент в наборе, если компонентам приписаны фик-сированне имена;
Предыдущая << 1 .. 175 176 177 178 179 180 < 181 > 182 183 184 185 186 187 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100