Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

3.2 Типы и подтипы

Статическая семантика

Тип характеризуется набором значений и набором примитивных операций, которые реализуют фундаментальные аспекты его семантики. Объект заданного типа — это сущность во время выполнения, которая содержит значение этого типа.
Типы группируются по категориям типов. Существуют несколько определяемых языком категорий типов (подробно в ПРИМЕЧАНИИ ниже), отражающих сходство их значений и примитивных операций. Большинство категорий типов образуют классы типов. Элементарные типы — это типы, значения которых логически неделимы; составные типы — это типы, значения которых составлены из компонентных значений.
Элементарные типы — это скалярные типы (дискретные и вещественные) и типы доступа (значения которых обеспечивают доступ к объектам или подпрограммам). Дискретные типы — это либо целочисленные типы, либо типы, определённые перечислением их значений (типы перечисления). Вещественные типы — это либо типы с плавающей точкой, либо типы с фиксированной точкой.
Составные типы — это типы записей, расширения записей, типы массивов, типы интерфейсов, типы задач и защищенные типы.
Может существовать несколько представлений типа с различными наборами операций. Неполный тип представляет неполное представление (см. 3.10.1) типа с очень ограниченным использованием, обеспечивая поддержку рекурсивных структур данных. Приватный тип или расширение приватного типа представляет частичное представление (см. 7.3) типа, обеспечивая поддержку абстракции данных. Полное представление (см. 3.2.1) типа представляет его полное определение. Неполное или частичное представление считается составным типом, даже если полное представление таковым не является.
Определённые составные типы (и их представления) имеют специальные компоненты, называемые дискриминантами, значения которых влияют на наличие, ограничения или инициализацию других компонентов. Дискриминанты можно рассматривать как параметры типа.
В этом Справочном руководстве термин подкомпонент используется вместо компонента, обозначая либо компонент, либо компонент другого подкомпонента. В случаях, когда другие подкомпоненты исключены, используется термин компонент. Аналогично, часть объекта или значения используется для обозначения всего объекта или значения или любого набора его подкомпонентов. Термины компонент, подкомпонент и часть также применяются к типу, обозначая компонент, подкомпонент или часть объектов и значений типа.
Множество возможных значений для объекта данного типа может быть ограничено условием, которое называется ограничением (включая случай нулевого ограничения, которое не накладывает никаких ограничений); правила, определяющие, какие значения удовлетворяют заданному виду ограничения, приведены в 3.5 для range_constraintов, в 3.6.1 для index_constraintов и в 3.7.1 для discriminant_constraintов. Множество возможных значений для объекта типа доступа также может быть ограничено, исключая нулевое значение (см. 3.10).
Подтип данного типа — это комбинация типа, ограничения значений типа и определённых атрибутов, специфичных для подтипа. Данный тип называется типом подтипа. Аналогично, соответствующее ограничение называется ограничением подтипа. Множество значений подтипа состоит из значений его типа, удовлетворяющих его ограничению и любому исключению нулевого значения. Такие значения принадлежат подтипу. Остальные значения типа находятся вне подтипа.
Подтип называется неограниченным, если его тип имеет неизвестные дискриминанты или если его тип допускает ограничения диапазона, индексов или дискриминантов, но подтип не накладывает такое ограничение; в противном случае подтип называется ограниченным подтипом (поскольку у него нет неограниченных характеристик).
ПРИМЕЧАНИЕ Любой набор типов может называться «категорией» типов, а любой набор типов, замкнутый относительно производности (см. 3.4), может называться «классом» типов. Однако только определённые категории и классы используются в описании правил языка — обычно те, которые имеют свой собственный набор примитивных операций (см. 3.2.3) или которые соответствуют набору типов, согласованному с заданным видом формального типа обобщения (см. 12.5). Ниже приведены примеры «интересных» определяемых языком классов: элементарный, скалярный, дискретный, перечисления, символ, булевый, целочисленный, знаковый целочисленный, модулярный, вещественный, с плавающей точкой, с фиксированной точкой, обычный с фиксированной точкой, десятичный с фиксированной точкой, числовой, доступ, доступ-к-объекту, доступ-к-подпрограмме, составной, массив, строка, (немеченый) запись, помеченный, задача, защищенный, неограниченный. Для определения типов в каждом из этих классов используется специальный синтаксис. Кроме этих классов, ниже приведены примеры «интересных» определяемых языком категорий: абстрактный, неполный, интерфейс, ограниченный, приватный, запись.
Эти определяемые языком категории организованы следующим образом:
все типы
элементарный
скалярный
дискретный
перечисление
символ
булевый
другие перечисления
целочисленный
знаковый целочисленный
модулярный целочисленный
вещественный
с плавающей точкой
с фиксированной точкой
обычный с фиксированной точкой
десятичный с фиксированной точкой
доступ
доступ-к-объекту
доступ-к-подпрограмме
составной
немеченый
массив
строка
другие массивы
запись
задача
защищенный
помеченный (включая интерфейсы)
неограниченная помеченная запись
ограниченная помеченная
ограниченная помеченная запись
синхронизированная помеченная
помеченная задача
помеченный защищенный
Существуют и другие категории, такие как «числовой» и «с дискриминантами», которые представляют другие измерения категоризации, но не соответствуют приведенной строго иерархической картине.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API