Раздел 7.6 - Абстрактные типы и подпрограммы

Часто необходимо описать тэговый тип, который не будет использоваться для создания объектов, а вместо этого будет каким-либо способом расширен другими типами. Такие типы называют ``абстрактными''.

Абстрактные типы должны быть тэговыми, так как только тэговые типы могут быть расширены. Для описания абстрактоного типа необходимо просто поместить ключевое слово abstract перед ключевым словом tagged в описании типа.

Подпрограммы тоже могут быть абстрактными; вызов таких подпрограмм будет диспетчеризирован к переопределенной версии подпрограммы. Чтобы описать абстрактную подпрограмму, необходимо поместить словосочетание "is abstract" перед последней точкой с запятой в описании подпрограммы. Если для данного типа имеется абстрактная подпрограмма, то он тоже должен быть абстрактным.

В дальнейшем, при создании другого типа, наследуемого от абстрактного, необходимо доопределить все его абстрактные подпрограммы.

Ниже приведен пример абстрактного типа (взятый непосредственно из Ada RM section 3.9.3), который представляет собой множество натуральных чисел:


Verbose Configure

Имея данный абстрактный тип, можно наследовать от него другие (неабстрактные) расширения типа, которые будут реализовывать различные варианты даного множества. Вы, например, сможете реализовать битовый вектор, наложив ограничение на его максимальное значение, в то время как кто-то другой - хэш-таблицу, которая, проигрывая в объеме занимаемой памяти, будет обладать большей гибкостью.

Объявление абстрактной подпрограммы в Аде эквивалентно объявлению функции, заканчивающейся выражением `` = 0'', в C++.


К этому разделу упражнение отсутствует.

Вы можете перейти к следующему разделу.


Вы можете также:

PREVIOUS Вернуться к предыдущему разделу

OUTLINE  Вернуться к содержанию Урока 7

David A. Wheeler (dwheeler@ida.org)

Перевод: Юрий Королев   Общая редакция перевода: Г.Ю. Сисюк

Исходная копия этого документа находится по адресу "http://www.adahome.com/Tutorials/Lovelace/s7s6.htm".

Исходная копия перевода размещена на сайте http://www.ada-ru.org