Введение в программирование - Учебное пособие (Корочкин А. В.)

2.2 простые типы

2.2.1 Ссылочный тип

Ссылочные типы  (    access type  ) обеспечивают  в языке непрямой доступ к обьекту или подпрограмме. '    Существуют два вида ссылочных типов :

•   ссылочные на обьекты ;

•   ссылочные на подпрограммы .

Ссылочный тип определяется следующим образом: Для обьектов : TYPE     Имя_Ссылочного_Типа    IS        ACCESS        [   ALL   |

CONSTANT ]   ( Указанш_Типа_Или_Подтипа [Ограничение] ) ;

ACCESS

type    Stack ( Size :     Stack_Size : =   99) is record

Для подпрограмм:

TYPE     Имя Ссылочного_Типа      IS

18

Ада 95. Введение в программирование

19

Глава 2. Типы

 

[   PROTECTED]         Описание_Подпрограммы ;

Здесь Ограничение - это дискриминант или ограничение индекса. П Пример:

is   access is   access

integer;

Word;

type Work type Byte

type Order   is   access   all   Store'Class; type Exed     is   access   constant    integer; Send   is   access   procedure   (Z : in   integer);

Для каждого ссылочного типа среди множества его значений обяза­тельно присутствует значение null. Значение null присваивается любо­му указателю после его объявления. Указатель со значением null не указывает ни на какой объект:

Для создания динамических объектов используется генератор new, который также формирует ссылку на созданный объект.

П Например:

Х1 :   Work : =   new   Integer; Х2 :   Work : =   new   lnteger'(10);

Помимо ссылки на объект возможно обращение к значениям объек­та. Для этого используется постфикс " all ":

XLall   : =   10;     XLAall   : =  XLAall + 4; Для объектов ссылочного типа используются операции присваива­ ния, проверки на равенство и неравенство. П Пример:

type     Matr          is    array  (1 .. 10, 1.. 15)   of   integer; type    AC_Matr     is     access    Matr;

- - объекты ссылочного типа

MA:    AC_Matr   new    Matr;

MB:    AC_Matr    new    Matr (1 .. 10 => (1 .. 15 => 0));

- - операции над объектами ссылочного типа MA.all: =   MB.all;

MB.all( 2 ,6 ): =   38;         МА( 2, 2 ): =   11;

Механизм   работы с ссылочными типами в Аде 95 значительно расширен, обеспечивая более гибкий доступ к объектам. Новые атри­буты   'Access   и 'Uncheked_Access используются для создания зна­чений ссылочных типов, определяющих обьект или подпрограмму:

X : = Object' Acess ;     Z : = Subprogram ' Access ;

Использование зарезервированных слов all и constant в описании ссылочных типов позволяет определять универсальный ссылочный тип , расширяющий возможности работы с объектами ссылочного типа:

type   Ira      is   access   all      integer; type   Ото   is   access   constant  real;

Использование универсальных ссылочных типов основано на приме­нении к ним генератора new, атрибутов Access   и 'Unchek-ed_Access и , а также конструкции aliased    (еще одно новое заре­зервированное слово языка ) :

Stone

Big_Stone

Wall

Ira;

aliased   integer;

Big_Stone' access ;

Переменной типа Ira может быть присвоено значение адреса любой переменной типа Integer , если она помечена как  all. Чтение и изме­нение переменной Big_Stone возможно с помощью ссылочной перемен­ной Stone и атрибута 'access.

Использование в описании универсального ссылочного типа слова Constant позволяет доступ только по чтению к переменным данного ссылочного типа ( в нашем примере это касается типа Ото ): Water     :   Ото; Green_Water   :   aliased     Water: = 486 ; Lake_____:    Green_Water' Access ;______________

2.2.2 Скалярные типы

Скалярные типы (дискретные и вещественные) не имеют компонент, то есть являются типами с простыми значениями. Дискретные скаляр-

20

21

Ада 95. Введение в программирование

T'FIRST; T'LAST;

ные типы - это перечисляемые и целые типы. Числовые типы - это це­лые и вещественные типы. Для любого скалярного типа Т имеются атрибуты:

наименьшее значение типа Т наибольшее значение типа Т

Перечисляемый тип

Множество значений перечисляемого типа задаётся явным перечне ле-нием этих значений:

TYPE        Имя_Типа        IS        (  а,,а:, ... ,а„ )   ;

Здесь литералы а; могут быть либо идентификаторами, либо символь­ными литералами. При этом а;.|< а{ <ai+1. П Примеры:

type      Work_Week      is         (MON,   TUE,    WED,   THU, FRI); type      Color        is        (Blue, Yellow);

type      Start         is        (On, Off);

type      TaskjState       is         (RUN, WAIT, READY);

Атрибуты перечисляемого типа (применимы также к целому типу):

T'Pos   ( X )            Номер позиции X в её описании

T'Succ ( X )           Следующий за X элемент в типе Т

T'Pred ( X )            Предшествующий элемент

T'Val    ( N )           Элемент типа Т, стоящий в позиции с номером N

Над объектами перечисляемых типов определены следующие опера­ции:

Отношения:         <              <              >              > Проверки принадлежности:            In                 Not In

СОВЕТЫ :

*   Используйте перечисляемые типы вместо числовых .

Глава 2. Типы

Числовые типы

Целый тип, а также плавающий и фиксированный типы образуют числовой тип. Над объектами числового типа выполняются арифмети­ческие операции.

Целый тип представляет множество значений целых чисел и опера­ции над ними. Фиксированный тип представляет вещественные числа в формате с фиксированной запятой с указанием абсолютной точности представления. Плавающий тип представляет вещественные числа в формате с плавающей запятой с указанием относительной точности представления.

Числовые типы могут быть как предопределёнными типами ( Integer, Float, Duration ), так и типами, определёнными пользовате­лем.

Более подробно числовые типы будут рассмотрены дальше в Главах 4 и 5.