Spec-Zone.ru › Ada 2005
Справочник Ada 2005

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).
Подтип данного типа — это комбинация типа, ограничения на значения типа и определённых атрибутов, специфичных для подтипа. Заданный тип называется типом подтипа. Аналогично, связанное ограничение называется ограничением подтипа. Множество значений подтипа состоит из значений его типа, удовлетворяющих его ограничению и любым исключениям нулевого значения. Такие значения принадлежат подтипу.
Подтип называется неограниченным, если его тип имеет неизвестные дискриминанты или если его тип допускает ограничения диапазона, индекса или дискриминанта, но подтип не накладывает такого ограничения; в противном случае подтип называется ограниченным подтипом (поскольку у него нет неограниченных характеристик).
ПРИМЕЧАНИЯ
2 Любой набор типов может называться «категорией» типов, а любой набор типов, замкнутый относительно вывода (см. 3.4), может называться «классом» типов. Однако используются только определенные категории и классы в описании правил языка — в основном те, у которых есть собственный набор примитивных операций (см. 3.2.3) или те, которые соответствуют набору типов, сопоставленным с определённым видом формального типа обобщения (см. 12.5). Примеры «интересных» классов, определённых языком: элементарные, скалярные, дискретные, перечисляемые, символьные, логические, целочисленные, знакомые целые, модулярные, вещественные, с плавающей точкой, с фиксированной точкой, обычные с фиксированной точкой, десятичные с фиксированной точкой, числовые, ссылочные, ссылочные на объекты, ссылочные на подпрограммы, составные, массивы, строки, (неразмеченные) записи, размеченные, задачи, защищённые, нелимитированные. Для определения типов в каждом из этих классов используется специальная синтаксическая конструкция. Помимо этих классов, примеры «интересных» категорий, определённых языком: абстрактные, неполные, интерфейсы, ограниченные, частные, записи.
Эти категории, определенные языком, организованы следующим образом:
все типы
элементарные
скалярные
дискретные
перечисляемые
символьные
логические
другие перечисляемые
целочисленные
знакомые целые
модулярные целые
вещественные
с плавающей точкой
с фиксированной точкой
обычные с фиксированной точкой
десятичные с фиксированной точкой
ссылочные
ссылочные на объекты
ссылочные на подпрограммы
составные
неразмеченные
массивы
строки
другие массивы
записи
задачи
защищённые
размеченные (включая интерфейсы)
нелимитированные размеченные записи
ограниченные размеченные
ограниченные размеченные записи
синхронизированные размеченные
размеченные задачи
размеченные защищённые
Существуют и другие категории, такие как «числовые» и «дискриминационные», которые представляют другие измерения категоризации, но не укладываются в вышеупомянутую строго иерархическую картину.


Spec-Zone.ru

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