Абстрактные типы должны быть тэговыми, так как только тэговые типы могут быть расширены. Для описания абстрактоного типа необходимо просто поместить ключевое слово abstract перед ключевым словом tagged в описании типа.
Подпрограммы тоже могут быть абстрактными; вызов таких подпрограмм будет диспетчеризирован к переопределенной версии подпрограммы. Чтобы описать абстрактную подпрограмму, необходимо поместить словосочетание "is abstract" перед последней точкой с запятой в описании подпрограммы. Если для данного типа имеется абстрактная подпрограмма, то он тоже должен быть абстрактным.
В дальнейшем, при создании другого типа, наследуемого от абстрактного, необходимо доопределить все его абстрактные подпрограммы.
Ниже приведен пример абстрактного типа (взятый непосредственно из Ada RM section 3.9.3), который представляет собой множество натуральных чисел:
Имея данный абстрактный тип, можно наследовать от него другие (неабстрактные) расширения типа, которые будут реализовывать различные варианты даного множества. Вы, например, сможете реализовать битовый вектор, наложив ограничение на его максимальное значение, в то время как кто-то другой - хэш-таблицу, которая, проигрывая в объеме занимаемой памяти, будет обладать большей гибкостью.
Объявление абстрактной подпрограммы в Аде эквивалентно объявлению функции, заканчивающейся выражением `` = 0'', в C++.
К этому разделу упражнение отсутствует.
Вы можете перейти к следующему разделу.
Вернуться к предыдущему разделу | Вернуться к содержанию Урока 7 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s7s6.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк