Cтраница 1
![]() |
Вектор с индексом типа день недели. [1] |
Множество значений типа И должно быть конечно: тип И должен быть либо равен да / нет, либо задан перечислением, либо получен как отрезок из дискретного типа. Например, на рис. 7.9 изображен вектор при И перечисление ( пн, вт, ср. [2]
В множество значений любого упорядоченного типа ( S, Z, Z, R) входят, кроме того, два идеальных значения - оо и i которые могут использоваться только в операторе присваивания и в операциях сравнения. [3]
При алгебраическом абстрагировании данных множество значений типа, подлежащего определению, и операции определяются неявно как объекты, удовлетворяющие заданной группе аксиом-равенств. В результате такого неявного определения получается описание, обладающее минимальностью, для которого определены только существенные особенности типа данных. Что же конкретно определяется таким описанием. [4]
Факультативная фраза assert задает логические ограничения на множество значений конструируемого типа. Эти ограничения должны проверяться каждый раз при исполнении операции mkid. Если ограничения нарушены, исполнение операции прерывается с возбуждением аварийной ситуации и передачей ей строки, указанной в else-fail, в качестве параметра. [5]
Новый взгляд на типы данных, согласно которому множество значений типа характеризуется множеством атрибутов ( операций), позволяет сделать операции над типами инструментом не только создателя языка ( для которого они по-прежнему важны при выработке классов стандартных типов), но и программиста, конструирующего свои собственные типы. [6]
Поскольку каждое значение конструируемого типа всегда отображается в некоторое значение типа представления, очевидно, что множество значений конструируемого типа всегда не больше множества значений типа представления. По этой причине каждое значение конструируемого типа может быть преобразовано в значение типа представления ( но не всегда наоборот. Таким образом, отношение представления дает возможность перехода от более абстрактного рассмотрения значений ( конструируемый тип) к более детальному их рассмотрению ( представляющий тип) и является основой для построения соответствующей функции приведения. [7]
Поскольку каждое значение конструируемого типа всегда отображается в некоторое значение типа представления, очевидно, что множество значений конструируемого типа всегда не больше множества значений типа представления. По этой причине каждое значение конструируемого типа может быть преобразовано в значение типа представления ( но не всегда наоборот. Таким образом, отношение представления дает возможность перехода от более абстрактного рассмотрения значений ( конструируемый тип) к более детальному их рассмотрению ( представляющий тип) и является основой для построения соответствующей функции приведения. [8]
Будем считать, что если в одном из типов Тг, Т2 определена функция приведения ц: Т2 - ТХ, где IT I, Т2 - множества значений типов Тх и Т2 соответственно, или она может быть построена посредством некоторых формальных правил, то тип Т2 аппроксимирует тип Тх. Наличие функции приведения целых значений к вещественным позволяет сказать, что целый тип аппроксимирует вещественный тип. Теперь предстоит выяснить, в каких случаях и каким образом могут определяться функции приведения в различных типах. Рассмотрим сначала отношения между конструируемым и представляющим типами. [9]
Однако когда типы данных сами являются объектами универсального типа тип или его подтипов, то, очевидно, могут быть составлены функции второго порядка, областями определения и значения которых являются множества значений типа тип или некоторых его подтипов, а аргументами - соответствующие типы данных. Такие функции называются типовыми, и они являются основой построения операций алгебр высших порядков - типовых алгебр. Не рассматривая типовые алгебры подробно - этот предмет заслуживает специального исследования - остановимся на одном важном случае типовых операций, получивших распространение в современных языках программирования. [10]
Другую возможность аппроксимации предоставляет механизм образования подтипов ( см. разд. Поскольку область значений функции out представляет собой подмножество множества значений образующего типа ( множество значений подтипа является подмножеством множества значений образующего типа), посредством ее любое значение подтипа может быть преобразовано в соответствующее значение образующего типа. [11]
Сущность, как и запись - это объект, состоящий из компонентов разных типов. Тип сущности, как и тип записи, определяет множество значений, являющееся декартовым произведением множеств значений типов компонентов. В декартовом произведении множеств каждый сомножитель, как известно, может сопровождаться именем проектировочной функции, осуществляющей нриекцию произведения на соответствующий сомножитель. [12]
Другую возможность аппроксимации предоставляет механизм образования подтипов ( см. разд. Поскольку область значений функции out представляет собой подмножество множества значений образующего типа ( множество значений подтипа является подмножеством множества значений образующего типа), посредством ее любое значение подтипа может быть преобразовано в соответствующее значение образующего типа. [13]
Поскольку с любым отношением связан рассмотренный выше набор операций, мы можем говорить о типе отношения, определяемом данным множеством операций. А так как типы отношений различаются только множествами своих атрибутов, то можно говорить и о родовом типе отношения, параметризованном списком атрибутов. Согласно определению каждое отношение представляет собой подмножество декартова произведения доменов, на которых определены его атрибуты. Поскольку домены - это множества значений, то в их качестве могут выступать множества значений типов данных. В языках программирования тип, соответствующий декартову произведению типов, принято называть типом записи. [14]