Раздел 12.1 - Описание ссылочных типов

Часто полезно иметь переменную, которая, вместо того, чтобы содержать некоторое значение, является ссылкой на какой-либо другой объект. В языке Аda такие переменные называют ссылочными и, вообще говоря, они эквиваленты указателям или ссылкам в других языках. Одним из наиболее часто встречающихся применений ссылочных переменных является реализация объектов переменного размера.

Для создания такой переменной сначала необходимо описать тип для нее; такой тип называется ссылочным. Ниже приведен пример описания ссылочного типа, позволяющего переменным типа Node_Access получить доступ к объектам типа Node (ссылаться на них):

  type Node_Access is access Node;

Далее приведена BNF создания ссылочного типа для объекта:

  описание_ссылочного_типа_для_объекта ::= "type" новое_имя_типа "is"
                                           "access" ["all"] имя_типа ";"

Переменные ссылочного типа могут ссылаться на объект либо иметь значение null. Можно создать ссылочную переменную со значением null, используя ключевое слово "null" в качестве присваиваемого значения, а также с помощью операций "=" или "/=" можно проверить, имеет ли переменная значение "null". Вообще говоря, "null" можно считать значением, которое может принимать переменная любого ссылочного типа.

Возможность "указывать" на другие значения может быть полезной и эффективной, но также и опасной. С указателями легко сделать что-то не так и получить неожиданные результаты. В Аda сделана попытка уменьшить ущерб, который можно причинить, стремясь к эффективности. В Аda это делается с помощью следующих правил:

При оптимизации Ada-компилятор отбросит все эти проверки и инициализации, если будет определено, что в них нет необходимости. Также можно отключить их в конкретной подпрограмме, если известно, что она полностью корректна.

Теперь, когда мы знаем, как описывать ссылочные типы, можно перейти к рассмотрению их использования.


Упражнение:

Что из нижеследующего является объявлением ссылочного типа с именем Thing_Access?

  1. type Thing_Access is access Thing;
  2. type access is Thing_Access;
  3. Thing_Access is access type;

Вы можете также:

PREVIOUS Перейти к предыдущему разделу

NEXT     Перейти к следующему разделу

OUTLINE  Вернуться к содержанию Урока 12

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s12s1.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org