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


         

что некоторые интерфейсы должны явно


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

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
Содержание  Назад  Вперед





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий