11.5 примерыD Пример 1: Настраиваемый пакет, ресурсами которого являются константы и типы. Такой пакет не требует тела. generic N : integer; М: integer; К: positive ; package RUIN is Cord : constant: = N * M ; type type X Y Z end; Baltic is ( 1 .. Cord ) of Character; Belle is record array (1 .. N ) of Data ; array (1 .. N , 1 .. M ) of float; string (1 .. К ); end RUIN; Конкретизация пакета RUIN : package WAR is new RUIN (8, 10,14); package WORD is new RUIN ( К => Size, M => 10, N = > 99 ); П Пример 2: Настраиваемый пакет VEC для работы с векторами имеет два формальных параметра настройки - размерность вектора и тип элементов вектора. Generic N: positive; type Elem is digits <>; package VEC is type Vector is array (1. . N) of Elem; procedure Sum_Vec (VA, VB: in Vector; С : out Elem ); - - тело пакета VEC VC : out Vector ); procedure Mulm_Vec (VA, VB : in Vector; end VEC; in Vector; VC: out Vector) is package body VEC is procedure Sum_Vec (VA, VB begin 130 Ада 95. Введение в программирование Глава 11. Настраиваемые модули 131
for i in 1 .. N loop VC( i): = VA( i) + VB( i); end loop; end Sum_Vec; procedure Mulm_Vec (VA, VB: in Vector; С: out Elem) is Temp : Elem : = 0.0 ; begin for j in 1 .. N loop Temp : = Temp + VA( j) * VB( j); end loop; C: = Temp; end Mulm_Vec; end VEC; Настраиваемый пакет VEC при конкретизации может настраиваться на любую размерность векторов, задаваемую целым положительным числом и на любой тип (подтип), описывающий тип с плавающей точкой. Пример использования и настройки пакета VEC в процедуре: with VEC; procedure Vec_Work is type Floats is digits 8; package DATA is new VEC (80, Floats); use DATA; A ,B, С : Vector; Rez : Floats; begin Sum_Vec( A, B, C); • • • Mult_Vec (A, B, Rez); end Vec_Work; П Пример 3. [12 ] generic - - формальная часть настраиваемого пакета Size : Positive ; type Item is private ; - - любой тип при конкретизации package STACK is procedure Push ( E : in Item ); - - спецификация пакета procedure Pop ( E : out Item ); Overflow, Underflow: exception ; end STACK; package body STACK is - - тело пакета type Table is array ( Positive range<>) of Item ; Space : Table (1 .. Size); Index : Natural: = 0 ; procedure Push ( E : in Item ) is - - тело процедуры begin if Index > = Size then raise Overflow; end if; Index : = Index + 1 ; Space (Index): = E ; end Push; procedure Pop ( E : out Item ) is - - тело процедуры begin if Index = 0 then raise Underflow; end if; E : = Space( Index); Index : = Index -1 ; end Pop; 133 132 Ада 95. Введение в программирование end STACK; Конкретизации пакета Stack : package Stack200 is new STACK (Size = > 200, Item = > integer); package Vector_Stack is new STACK ( 55 , Vector) ; Использование ресурсов из настроенных пакетов Vector_Stack и Stack200 : Vector_Stack . Рор( X ); Stack200 . Push (16 ); Другая версия пакета для работы со стеком использует приватный тип Stack с дискриминантом : generic type Item is private; package ON_STACK is type Stack (Size : Positive ) is limited private ; - - используется дискриминант procedure Push ( S : in out Stack ; E : in Item ); procedure Pop (S : in out Stack ; E : out Item ); Overflow, Underflow: exception ; private type Table is array (Positive range <>) of Item; type Stack (Size : Positive ) is record Space : Table (1 .. Size ); Index : Natural: = 0 ; end record; end On_Stack; Настройка пакета package Best_Stack is new On_Stacke (float); Глава 11. Настраиваемые модули Pool : Stack (50); Использование ресурсов : Best_Stack. Push ( Pool, 3.1426 ); D Пример 4. package LA is - - ненастраиваемый пакет type Gent is private procedure FA (...) I procedure FB (... ) ; end LA; with LA; use LA; - - настраиваемый пакет ТОХ generic type Tender is new Gent; package TOX is procedure ЁА (X : in out Tender); function ES (Z, Y : Tender ) return Tender; end TOX; Настраиваемый пакет ТОХ с формальным производным типом Tender, который может быть только типа Gent или производным о него. Для реализации в теле пакета ТОХ подпрограмм ЕА и ES можно использовать все операции, допустимые для типа Gent , определенные в пакете LA ( процедуры FA и FB). 18 — Корочкин А. В. 135 Глава 12. Защищенные модули 134 Ада 95. Введение в программирование
|
| Оглавление| |