Ада-95. Компилятор GNAT



         

Пример программирования посредством расширения - часть 4


Например, предположим, что некоторые интерфейсы должны явно запускаться и останавливаться.

Тогда код может иметь следующий вид:

with Message; package Generic_Interface is

type Flag is tagged null record;

procedure Get (Which_Interface: Flag; Data: Message.Data_Type);

procedure Start (Which_Interface: Flag); -- ничего не выполняет procedure Stop (Which_Interface: Flag); -- ничего не выполняет . . .

- - - - - - with Message; package Disk_Interface is

type Flag is new Generic_Interface.Flag with null record;

procedure Get (Which_Interface: Flag; Data: Message.Data_Type);

-- нам нет нужды запускать или останавливать диск, таким образом, Start -- ничего не наследует от Generic_Interface . . .

- - - - - - with Message; package Serial_Interface is

type Flag is new Generic_Interface.Flag with null record;

procedure Get (Which_Interface: Flag; Data: Message.Data_Type);

-- запуск и остановка последовательного интерфейса procedure Start (Which_Interface: Flag); procedure Stop (Which_Interface: Flag); . . .

При этом код пользователя может иметь вид подобный следующему:

with Interfaces; with Extension_Approach; use Extension_Approach; procedure User is

Sum: Summary_Type; begin

Start (Interfaces.Current); Sum := Summarizer (Interfaces.Current); Stop (Interfaces.Current); . . .

Рассмотренный пример демонстрирует преимущества средств Ada95 для программирования посредством расширения.

Он представляет своеобразный вид "бесконечного варианта" для получения которого были использованы тэговые типы.

Очевидно, что этот пример несколько искуственный.

Следовательно этот пример может быть не полностью корректен для порождения реального кода.

Copyright (C) А.Гавва V-0.4w май 2004




Содержание  Назад  Вперед