Тип характеризуется набором значений и набором операций (точнее: операций типа или операций над типом).
Существует несколько классов типов. Скалярные типы - это целые и вещественные типы и типы, определенные перечислением своих значений; значения этих типов не имеют компонентов. Индексируемый и именуемый типы являются составными. Значение составного типа состоит из значений компонентов. Ссылочный тип - это тип, значения которого обеспечивают доступ к объектам. Личные типы - это типы, для которых полностью определяется набор возможных значений, но непосредственный доступ к ним пользователей невозможен. Наконец, существуют задачные типы. (Личные типы описаны в гл.7, задачные - в гл.9, остальные - в гл.3).
Именуемые и личные типы могут иметь специальные компоненты, называемые дискриминантами, значения которых различают альтернативные формы значений каждого из этих типов. Если личный тип имеет дискриминанты, они известны пользователям типа. Следовательно, личный тип известен только своим именем, своими дискриминантами, если они есть, и соответствующим набором операций.
Набор возможных значений данного типа может зависеть от условия, которое называется ограничением (сюда же относятся случаи без ограничения); значение удовлетворяет ограничению, если оно удовлетворяет соответствующему условию. Подтип - это тип вместе с ограничением; говорят, что значение принадлежит подтипу, если оно принадлежит типу и удовлетворяет ограничению; данный тип называется базовым типом подтипа. Тип является подтипом самого себя; такой подтип называется неограниченным; он соответствует условию, которое не налагает никаких ограничений. Базовым типом типа является он сам.
Набор операций, определенных над конкретным типом, определен и для любого его подтипа; однако переменной данного подтипа можно присвоить значение только этого подтипа. Дополнительные операции, например, квалификация (в квалифицированном выражении), неявно определяются описанием подтипа.
Для объектов некоторых типов определено начальное значение по умолчанию; некоторые другие типы имеют выражения по умолчанию, определенные для части или всех своих компонентов. Некоторые операции над типами и подтипами называются атрибутами; эти операции обозначаются формой имени, описанной в разд.4.1.4.
Термин подкомпонент используется в описании языка вместо термина компонент, чтобы указать компонент другого компонента или подкомпонента. Если нет других подкомпонентов, используется термин компонент.
Данный тип не должен иметь подкомпонентов, типом которых является он сам.
Имя класса типов используется в описании языка для квалификации объектов и значений, принадлежащих к типу рассматриваемого класса. Например, термин "индексируемый объект" используется для объекта индексируемого типа; аналогично термин "ссылочное значение" используется для значения ссылочного типа.
Примечание. Набор значений подтипа - это подмножество значений базового типа. Это подмножество не обязано быть собственным подмножеством; оно может быть пустым.
3.3.1. Описания типов
Описание типа объявляет тип.
описание_типа : : = полное_описание_типа | |||||
неполное_описание_типа описание_личного_типа | |||||
полное_описание_типа : : = | |||||
type идентификатор [раздел_дискриминантов] | |||||
is определение_типа; | |||||
определение_типа : : = определение_перечислимого__типа | |||||
определение_целого_типа |
Предвыполнение полного описания типа состоит из предвыполнения раздела дискриминантов, если он есть (исключая случай, когда дается полное описание типа для уже встречавшегося неполного описания типа или для описания личного типа), и предвыполнения определения типа.
Типы, созданные в результате предвыполнения различных определений, являются различными. Более того, предвыполнение определения типа для числовых или производных типов создает как базовый тип, так и подтип базового типа; то же самое следует сказать об определении ограниченного индексируемого типа (одной из двух форм определения индексируемого типа).
Простое имя в полном описании типа обозначает описанный тип, если только описание типа не объявляет одновременно базовый тип и подтип базового типа; в этом случае простое имя обозначает подтип, а базовый тип является анонимным. Тип называется анонимным, если он не имеет простого имени. Для наглядности в этом стандарте время от времени используется псевдоимя анонимного типа, выделенное курсивом там, где обычно по синтаксису требуется идентификатор.
Примеры определений типов:
(БЕЛЫЙ, КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ, ГОЛУБОЙ, КОРИЧНЕВЫЙ, ЧЕРНЫЙ) Примеры описаний типов: | ||||
ГОЛУБОЙ, КОРИЧНЕВЫЙ, ЧЕРНЫЙ); | ||||
type СТОЛБЕЦ is range 1 .. 72; |
Примечание. Два определения типа всегда определяют два различных типа, даже если они текстуально идентичны. Таким образом, данные ниже описания А и В задают различные индексируемые типы:
A: array (1 .. 10) of BOOLEAN;
В: array (1 .. 10) of BOOLEAN;
Если А и В описаны в групповом описании объектов
А,В: array (1 .. 10) of BOOLEAN;
то их типы (анонимные) тем не менее различны, так как это групповое описание объектов эквивалентно двум приведенным выше единичным описаниям.