Основы программирования

Основы Ada 95 - Основные программные модули
Индекс материала
Основы Ada 95
Текстовый и числовой ввод-вывод
Процедуры ввода
Основные операторы
Операторы цикла
Основные программные модули
Процедуры
Пакеты
Производные типы
Подтипы
Расширяемые типы
Все страницы
Основные программные модули

 

Ada-программа состоит из одного или нескольких программных модулей. Программным модулем Ada 95 является:

q       подпрограмма — определяет действия — подпроцесс (различают две разновидности: процедуру и функцию);

q       пакет — определяет набор логически связанных описаний объектов и действий, предназначенных для совместного использования;

q       задача — определяет параллельный, асинхронный процесс;

q       защищенный модуль — определяет защищенные данные, разделяемые между несколькими задачами;

q       родовой модуль — настраиваемая заготовка пакета или подпрограммы.

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

Как правило, модули можно компилировать отдельно. Обычно в модуле две части:

q       спецификация (содержит сведения, видимые из других модулей);

q       тело (содержит детали реализации, невидимые из других модулей).

Спецификация и тело также могут компилироваться отдельно. Все это дает возможность проектировать, кодировать и тестировать программу как набор слабо зависимых модулей.

Функции

 

Функция — разновидность подпрограммы, которая возвращает значение результата.

Спецификация функции имеет вид

function <ИмяФункции> (<СписокФормальныхПараметров>)

return <ТипРезультата>;

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

<ИмяПеременной>:<ТипДанных> := <ЗначениеПоУмолчанию>

Значение по умолчанию может не задаваться.

Пример спецификации:

function Box_Area (Depth : Float; Width : Float) return Float;

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

function <ИмяФункции> (<СписокФормальныхПараметров>)

return <ТипРезультата> is

<объявления локальных переменных и констант>

begin

<операторы>

return <результат>; -- оператор возврата результата

end <ИмяФункции>;

Пример тела функции:

function Box_Area (Depth : Float; Width ; Float) return Float is

Result : Float;

begin

Result := Depth * Width;

return Result: -- возврат вычисленного значения

end Box_Area;

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

<ИмяПеременной> := <ИмяФункции> (<СписокФактическихПараметров>);

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

Пример вызова:

Му_Вох := Вох_Агеа ( 2.0. 4.15 );

Фактические параметры задают фактические значения, то есть значения, обрабатываемые при выполнении функции.