Основы Ada 95 - Основные программные модули |
Страница 6 из 11
Основные программные модули
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 ); Фактические параметры задают фактические значения, то есть значения, обрабатываемые при выполнении функции.
|