Ниже приведен пример описания_формального_объекта:
Maximum_Size : Integer;
Ниже приведен синтаксис описания значения или переменной, как формального объекта в BNF форме:
описание_формального_объекта ::= список_идентификаторов ":" ["in"| "in out" ]
имя_типа [ ":=" выражение_по_умолчанию ] ";"
Мы уже видели пример описания формального типа. Формальные типы специфицируют имя типа и допустимые ``виды типов''. Описание формального типа указывает "минимальный" или "крайний" требуемый тип. Самый "минимальный" тип в Аda называется "limited private". Это "крайний" тип, так как ключевое слово "private" означает, что нельзя узнать ничего о том, как он реализован, а "limited" означает, что к нему неприменимы операции присваивания или равенства.
Описание формального типа имеет следующий синтаксис (он, в общем-то, сильно упрощен; на самом деле имеются гораздо большие возможности):
описание_формального_типа ::= "type" определяющий_идентификатор "is"
определение_формального_типа ";"
определение_формального_типа ::=["tagged"] ["limited"] "private" | "(<>)"
Давайте рассмотрим несколько примеров с комментариями:
type Item is limited private; -- Item может быть любым типом.
type Item is private; -- Item может быть любым типом, для которого
-- определены операции присваивания(:=) и равенства (=).
type Item is tagged limited private; -- Item может быть любым тэговым
-- типом.
type Item is tagged private; -- Item может быть любым тэговым типом
-- с определенной операцией :=.
type Item is (<>); -- Item может быть любым дискретным типом,
-- включая Integer и Boolean.
В следующем уроке будет рассмотрен пример, который сделает это более понятным.
Если необходимо создать настраиваемый модуль с формальным типом Unit, который может быть любым типом, как он должен быть описан?
|
|
|
|
|---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s11s2.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк