Дочерние настраиваемые модули
Дочерние настраиваемые модули
Настраиваемые пакеты, подобно обычным пакетам Ады, могут иметь дочерние модули.При этом, следует заметить, что такие дочерние модули также должны быть настраиваемыми модулями.
В качестве примера, предположим, что нам необходимо расширить настраиваемый пакет Stacks, который был показан в примере выше (см. ).Допустим, что нам необходимо добавить функцию Top, которая возвращает объект находящийся в вершине стека, но при этом не удаляет его из стека.Чтобы решить эту задачу, мы можем, для настраиваемого пакета Stacks, описать дочерний настраиваемый пакет Stacks.Additions.Спецификация Stacks.Additions может выглядеть следующим образом:
generic package Stacks.Additions is function Top return Element; end Stacks.Additions; |
Примечательно, что дочерний настраиваемый модуль "видит" все компоненты своего родителя, включая все параметры настройки.
Тело дочернего настраиваемого модуля Stacks.Additions может иметь следующий вид:
package body Stacks.Additions is function Top return Element is . . .end Stacks.Additions; |
Ниже демонстрируется пример конкретизации настраиваемых модулей Stacks и Stacks.Additions.
Конкретизация модуля Stacks формирует пакет Our_Stacks, что имеет вид:
with Stacks;package Our_Stack is new Stack(Integer); |
Конкретизация модуля Stacks.Additions формирует пакет Our_Stack_Additions, что имеет вид:
with Our_Stack, Stacks.Additions;package Our_Stack_Additions is new Stacks.Additions; |
Примечательно, что настраиваемый дочерний модуль рассматривается как описанный внутри настраиваемого родителя.