Справочное руководство по языку Ада-83

         

Тела пакетов


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

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

Примечание. Переменная, описанная в теле пакета, видима только внутри этого тела, и, следовательно, ее значение может быть изменено только внутри этого тела пакета. В отсутствие локальных задач значение такой переменной сохраняется неизменным между вызовами извне пакета подпрограмм, описанных в его видимом разделе. Свойства такой переменной аналогичны свойствам «собственной» переменной в языке Алгол-60.

Предвыполнение тела подпрограммы, описанной в видимом разделе пакета, осуществляется при предвыполнении тела пакета. Следовательно, при вызове такой подпрограммы извне программного модуля возбуждается исключение PROGRAM-ERROR, если вызов производится до предвыполнения тела пакета (см. 3.9).

Пример пакета:

package RATIONAL-NUMBERS is type RATIONAL is record NUMERATOR : INTEGER; DENOMINATOR : POSITIVE; end record; function EQUAL (X,Y RATIONAL) return BOOLEAN; function "/" (X,Y INTEGER) return RATIONAL; —- для образования рационального числа function "+" (X,Y RATIONAL) return RATIONAL; function "-" (X,Y RATIONAL) return RATIONAL; function "*" (X,Y RATIONAL) return RATIONAL; function "/" (X,Y RATIONAL) return RATIONAL;end;package body RATIONAL-NUMBERS is procedure SAME-DENOMINATOR (X,Y : in out RATIONAL) is begin -- приведение Х и Y к общему знаменателю; end; function EQUAL(X,Y : RATIONAL) return BOOLEAN is U,V : RATIONAL; begin U := X; V := Y; SAME-DENOMINATOR (U,V); return ENUMERATOR = V.NUMERATOR; end EQUAL; function "/" (X,Y : INTEGER) return RATIONAL is begin if Y > 0 then return (NUMERATOR => X, DENOMINATOR => Y); else return (NUMERATOR => -X, DENOMINATOR => -Y); end if; end"/"; function "+" (X,Y RATIONAL) return RATIONAL is ... end "+"; function "-" (X,Y RATIONAL) return RATIONAL is ... end "-"; function "*" (X,Y RATIONAL) return RATIONAL is ... end "*"; function "/" (X,Y RATIONAL) return RATIONAL is ... end "/";end RATIONAL_NUMBERS;

Ссылки: видимый раздел 7.2, имя 4.1, исключение 11, исключение PROGRAM-ERROR 11.1, ДЮЗ обработчик исключения 11.1, описание 3.1, переменная 1, подпрограмма б, последовательность операторов 5.1, Предвыполнение 3.1, 3.9, .программный модуль 6, раздел описаний 3.9, спецификация пакета



Содержание раздела








Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий