Раздел 11.2 - Формальные параметры настройки

Бегло рассмотрим настраиваемые модули, затем, чтобы разобраться, как их можно использовать. Впрочем, трудно воспринимать и использовать настраиваемые модули, не понимая, какие формальные параметры настройки (т.е. то, что находится за ключевым словом "generic") можно использовать. Ниже приведен список того, что может быть включено в список формальных параметров настройки:

Ниже приведен пример описания_формального_объекта:

   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, который может быть любым типом, как он должен быть описан?

  1. type Unit is limited private;
  2. type Unit is private;
  3. type Unit is (<>);

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

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

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

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

David A. Wheeler (dwheeler@ida.org)

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

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

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