Изменения

Базисные типы данных в традиционных языках программирования
== Базисные типы данных в традиционных языках программирования ==
Среди ада-объектов можно выделить ОБЪЕКТЫ ДАННЫХ ''объекты данных'' (то есть объекты, которым разрешено играть роль данных по отношению к каким-либо операциям). Каждый объект данных в Аде характеризуется определенным ТИПОМ''типом''. Своеобразие этого языка в значительной степени связано именно с системой типов. Для тех, кто работал только с Фортраном, Алголом и Бейсиком, многое в этой системе окажется совершенно незнакомым. В частности, возможность определять новые типы, отражающие особенности решаемой задачи. Для освоивших Паскаль адовские типы привычнее. По сравнению с Паскалем система адовских типов полнее и строже, лучше отвечает своему назначению.
Тип — важнейшая компонента аппарата прогнозирования-контроля. Приписывая объекту данных определенный тип, ограничивают его возможное поведение. С другой стороны, зная тип, получают возможность это поведение контролировать. Наконец, зная ограничения на возможное поведение, можно рационально выделять память и другие ресурсы. С типом в Аде связывают три основных ограничения:
Во-первых, тип ограничивает ОБЛАСТЬ ЗНАЧЕНИЙ ''область значений'' объекта; во-вторых, НАБОР ОПЕРАЦИЙ''набор операций'', в которых объекту разрешено фигурировать; в-третьих, набор допустимых для него ролей в этих операциях (скажем, в качестве второго операнда, результата и т. п.).
Имеется четыре категории типов: СКАЛЯРНЫЕ ''скалярные'' типы (в том числе ПЕРЕЧИСЛЯЕМЫЕ ''перечисляемые'' и ЧИСЛОВЫЕ''числовые''), СОСТАВНЫЕ ''составные'' (в том числе РЕГУЛЯРНЫЕ ''регулярные'' типы (массивы) и КОМБИНИРОВАННЫЕ ''комбинированные'' (записи, структуры)), ССЫЛОЧНЫЕ ''ссылочные'' типы (указатели) и ПРИВАТНЫЕ ''приватные'' типы (представление которых невидимо пользователю).
Дадим краткое введение в каждую из категорий типов.
=== Скалярные типы ===
Когда определяют перечисляемый тип, явно указывают перечень лексем, которые и составляют область возможных значений объектов вводимого типа. Такой перечень может быть списком дней недели (понедельник, вторник, среда, четверг, пятница, суббота, воскресенье), списком символов некоторого алфавита (`A',`B',…,`Z') и т. п. Перечисляемые типы избавляют программиста от необходимости кодировать содержательные объекты целыми числами. Перечисляемые типы BOOLEAN (логический) и CHARACTER (символьный) считаются ПРЕДОПРЕДЕЛЕННЫМИ''предопределенными'', то есть встроенными в язык и действующими без предварительного явного объявления в программе. Набор символов типа CHARACTER соответствует алфавиту ASCII — американскому стандарту на коды символов.
Числовые типы обеспечивают точные и приближенные вычисления. В точных вычислениях пользуются ЦЕЛЫМИ ''целыми'' типами. Область возможных значений для таких типов — конечный диапазон целых чисел. В приближенных вычислениях пользуются либо АБСОЛЮТНЫМИ ''абсолютными'' типами (для них задается абсолютная допустимая погрешность), либо ОТНОСИТЕЛЬНЫМИ ''относительными'' типами (задается относительная погрешность). Абсолютная погрешность задается явно и называется ДЕЛЬТОЙ''дельтой'', относительная погрешность вычисляется по заданному допустимому количеству значащих цифр в представлении числа. Подразумевается, что абсолютные типы будут представлены машинной арифметикой с фиксированной точкой (запятой), а относительные — с плавающей. Типы INTEGER (целый), FLOAT (плавающий), и DURATION (временные задержки для управления задачами) считаются предопределенными.
=== Составные типы ===
Скалярные типы (и перечисляемые, и числовые) выделяются тем, что объекты этих типов считаются атомарными (не имеющими составляющих). Составные типы, в отличие от скалярных, позволяют определять структурированные объекты (массивы и записи). Массивы служат значениями регулярных типов — компоненты массивов доступны по индексам. «Регулярность» массивов проявляется в том, что все компоненты должны быть одного типа. Записи (структуры) служат значениями комбинированных типов — их компоненты могут быть различных типов; компоненты записей доступны по именам-селекторам. Имена компонент одной и той же записи должны быть различны; компоненты называются также ПОЛЯМИ ''полями'' записи.
Строение записей одного типа может зависеть от значений выделенных полей, называемых ДИСКРИМИНАНТАМИ''дискриминантами''. Дискриминанты играют роль параметров комбинированного типа — задавая набор дискриминантов, выбирают определенный вариант структуры объектов этого типа. Поэтому типы с дискриминантами называют также ВАРИАНТНЫМИ ''вариантными'' типами.
=== Ссылочные типы ===
Если структура объектов составных типов (в случае вариантных типов — все варианты такой структуры) фиксируется статически (то есть до начала выполнения программы), то ссылочные типы позволяют создавать и связывать объекты динамически (при исполнении программы, точнее, при исполнении ГЕНЕРАТОРОВ''генераторов''). Тем самым появляется возможность динамически создавать сколь угодно сложные конгломераты объектов. Генератор создает объект указанного (статически известного) типа и обеспечивает доступ к вновь созданному объекту через переменную соответствующего ссылочного типа. Передавая (присваивая) ссылки, можно организовать произвольные структуры. Важно, что и элементы, и связи в таких динамических структурах можно менять при исполнении программы.
=== Приватные типы ===
Доступ к ПРИВАТНЫМ ''приватным'' объектам (их называют также абстрактными объектами, а соответствуюшие типы — абстрактными типами данных или АТД''атд'') находится под полным контролем автора приватного типа. Такой тип всегда определяется в некотором пакете (который называется ОПРЕДЕЛЯЮЩИМ ''определяющим'' пакетом для этого типа). Спецификация определяющего пакета фиксирует полный набор операций и тех ролей в этих операциях, в которых могут фигурировать объекты нового типа (в модулях, использующих определяющий пакет). В определяющем пакете фиксируется и реализация приватного типа, однако в использующих модулях она непосредственно недоступна — только через явно перечисленные автором допустимые операции. Поэтому реализацию можно изменять, не заставляя переделывать использующие модули.
Концепция типа в Аде дополнена аппаратом ПОДТИПОВ''подтипов'', (они ограничивают область значений, не затрагивая допустимых операций), а также аппаратом ПРОИЗВОДНЫХ ''производных'' типов (они образуются из уже известных типов, наследуя связанные с ними значения и операции).
== Экспертные системы: архитектура, типы решаемых задач, области применения ==