Библиотека и компилируемые модули
В общем случае, программа на языке Ада представляет собой один или несколько программных модулей, которые могут компилироваться как совместно, так и раздельно.
Кроме того, программные модули являются основой построения библиотек Ады, поэтому их также называют библиотечными модулями.
Программные модули бывают четырех видов:
Подпрограммы - Являются основным средством описания алгоритмов. Различают два вида подпрограмм: процедуры и функции. Процедура - это логический аналог некоторой именованной последовательности действий. Функция - логический аналог математической функции - используется для вычисления какого-либо значения.
Пакет - Основное средство для определения набора логически взаимосвязанных понятий.
В простейшем случае в пакете специфицируются описания типов и общих объектов.
В более общем случае в нем могут специфицироваться группы взаимосвязанных понятий, включающих подпрограммы, причем, некоторые описываемые в пакете сущности могут быть "скрыты" от пользователя, что дает возможность предоставления доступа только к тем ресурсам пакета, которые необходимы пользователю и, следовательно, должны быть для него доступны.
Задача или задачный модуль -
Средство для описания последовательности действий, причем, при наличии нескольких таких последовательностей они могут выполняться параллельно.
Задачи могут быть реализованы на многомашинной или многопроцессорной вычислительной конфигурации, либо на единственном процессоре в режиме разделения времени.
Синхронизация достигается путем обращения ко входам, которые подобно подпрограммам могут иметь параметры, с помощью которых осуществляется передача данных между задачами.
Настраиваемые модули - Средство для параметризации подпрограмм или пакетов.
В ряде случаев возникает необходимость обрабатывать объекты, которые отличаются друг от друга количеством данных, типами или какими-либо другими количественными или качественными характеристиками.
Если все эти изменяемые характеристики вынести из подпрограммы или пакета, то получится некоторая заготовка (или шаблон), которую можно настроить на конкретное выполнение.
Непосредственно выполнить настраиваемый модуль нельзя.
Но из него можно получить экземпляр настроенного модуля (подпрограмму или пакет), который пригоден для выполнения.
Каждый программный модуль обычно состоит из двух частей: спецификации и тела. Спецификация описывает интерфейс к модулю, а тело - его реализацию.
Примечательно, что спецификация и тело программного модуля являются самостоятельными компилируемыми модулями, то есть, они могут компилироваться раздельно.
Разбиение модуля на спецификацию и тело, а также возможность раздельной компиляции позволяют разрабатывать, кодировать и тестировать любую программу или систему как набор достаточно независимых компонентов.
Такой подход полезен при разработке больших программных систем.