Введение в программирование - Учебное пособие (Корочкин А. В.)

6.2 реализация абстракций

Язык Ада с самого начала его создания был ориентирован на ис­пользование абстракций различного вида с реализацией как через спе­цификацию, так и через параметризацию.

С этой целью в Аде определён общий (унифицированный) вид абст­рактного модуля:

НАСТРОЙКА

СПЕЦИФИКАЦИЯ

ТЕЛО

Абстракция через спецификацию реализуется наличием в модуле двух частей: спецификации модуля и тела модуля. Абстракция через параметризацию реализуется с помощью описания настройки модуля.

Унифицированное представление каждого вида абстракции в Аде, а также возможность разделения спецификации и тела предоставляют дополнительные возможности для эффективной реализации преиму­ществ абстракций при проектировании программ с помощью Ады.

Абстракция процедур в Аде реализуется через развитый механизм процедур и функций и поддерживается механизмом раздельной компи­ляции подпрограмм, в основе которого - отделение спецификации от тела и их раздельная компиляция. Это обеспечивает эффективную под­держку (реализацию) важного свойства абстракции модифицируемости, так как компиляция и перекомпиляция тела под­программы выполняется без перекомпиляции программы, содержащей спецификацию подпрограммы. Кроме того, процедурная абстракция в Аде (как и все остальные виды абстракций) поддерживается таким мощным средством, как механизм исключений, направленным на вы­явление и обработку ошибочных (исключительных) ситуаций во время выполнения программы.

Абстракция данных в Аде реализуется через развитые средства ин­капсуляции с помощью модулей типа пакет и приватных типов. Пакет позволяет связать любой набор спецификаций для работы со структу­рой данных (классом структур данных) с некоторыми подробностями реализации. Пакеты используются для выполнения следующих функ­ций:

•  указание набора разрешённых операций над типом данных;

• реализаций тела, состоящих из операций, определённых ранее в спецификации;

• сокрытие всех объектов, спецификаций и подробностей реализации.

Реализация абстракций через параметризацию для абстрактных про­цедур и данных выполнена с помощью так называемых настраиваемых (generic) модулей. Параметризация в таких модулях позволяет исполь­зовать в качестве параметров не только традиционные виды парамет­ров, но также типы, подпрограммы и пакеты, что значительно расши­ряет возможности организации различного вида вычислений.

Абстракция процесса в Аде реализована с помощью модулей типа задача (task ). Такие модули обеспечивают параллельное выполнение частей программы, взаимодействие этих частей через механизм рандеву

• средство высокого уровня, основанное на передаче сообщений. До­полнительные возможности для описания множества процессов и их взаимодействия обеспечиваются в языке задачным типом (task type ) и защищенным типом (protected type).

Таким образом, программа на языке Ада составляется из одного или нескольких видов программных модулей (программных сегментов) следующего вида:

•   подпрограммы;

•   пакеты;

Глава 6. Модули

57

56

Ада 95. Введение в программирование

 

 

•   задачи;

•   настраиваемые (родовые) модули;

•   защищённые модули (Ада-95).

Все виды модулей имеют единую структуру, состоящую из специфи­кации модуля и тела модуля. Каждый программный модуль определя­ет интерфейс между модулем ("сервером") и его пользователем ("клиентом").

Спецификация модуля и тело модуля - различные составляющие мо­дуля. Синтаксически они являются законченными программными объ­ектами и при желании могут компилироваться раздельно.

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

Каждый вид модуля определяет свои требования к спецификации и телу модуля. Эти особенности будут рассмотрены при обсуждении ка­ждого из перечисленных видов программных модулей.