ГОСТ 22558-89 сторінка 12 з 116
Понятие программы и единицы исполнения
Имеются два уровня компьютерных программ в Коболе: исходный уровень и объектный уровень.
На исходном уровне наиболее объемлющей единицей компьютерной программы является исходная программа. Исходная программа может содержать другие исходные программы. Исходная программа — синтаксически правильный набор операторов Кобола, по определению настоящего документа состоящий из раздела идентификации, за которым необязательно следуют раздел оборудования и (или) раздел данных, и (или) раздел процедур. Исходная программа, не содержащаяся в другой исходной программе, может быть преобразована компилятором в объектную программу, которая может быть выполнена либо одна, либо вместе с другими объектными программами.
В общем случае программа, содержащаяся в другой программе, не может быть преобразована компилятором в объектную программу, так как по определениям этого документа в содержащейся программе явно разрешается ссылаться на данные, описанные в содержащей ее исходной программе.
Раздел процедур исходной программы организован как последовательность процедур двух типов. Декларативные процедуры, обычно именуемые декларативами, — это процедуры, которые будут выполняться только при появлении специальных условий во время выполнения программы. Недекларативные процедуры — процедуры, выполняемые соответственно нормальному ходу управления в программе. Декларативні могут содержать недекларативные процедуры, но последние будут выполняться только во время выполнения декларатив, в которых они содержатся. Недекларативные процедуры могут содержать другие недекларативные процедуры, но не должны содержать декларативы. Ни декларативы, ни недекларативные процедуры не могут содержать в себе программы. Другими словами, в Коболе термины «процедура» и «программа» не являются синонимами.
На объектном уровне наиболее объемлющей единицей организации компьютерных программ является единица исполнения. Единица исполнения — это полное решение проблемы, состоящее из объектной программы или из нескольких взаимосвязанных объектных программ. Единица исполнения — это независимая единица, которая может выполняться без связей или координирования с другой единицей исполнения, за исключением того, что может обрабатывать файлы данных и сообщения и устанавливать :или проверять переключатели, которые записаны или будут считываться другими единицами исполнения.
При вызове программы параметры, которыми она должна оперировать, могут быть переданы ей вызывающей ее программой. '.Поскольку любая компилируемая программа может быть первой программой, выполняемой в единице исполнения, первая выполняемая программа единицы исполнения может получать параметры.
Единица исполнения может также содержать объектный код .и области памяти для данных, получаемые в результате компиляции программы, записанной на языке, отличном от Кобола; в этом случае требования к организации связей между Кобол-программой и программой, записанной не на Коболе, определяются реализацией.
Доступные данные и файлы
Некоторые данные имеют связанную с ними концепцию памяти, ■определяющую, где представляются значения и другие свойства данных относительно программ единицы исполнения. Подобно этому, определители файла тоже имеют связанную с ними концепцию памяти, определяющую, где представляется информация о позиционировании и состоянии файла, а также о других свойствах обработки файла, относительно программ единицы исполнения.
Имена
Имя-данного именует данное. Имя-файла именует определитель файла. Эти имена классифицируются как глобальные или локальные.
Глобальное имя используется для ссылки на объект, которому оно соотнесено, либо из программы, в которой глобальное имя объявлено, либо из любой другой программы, содержащейся в программе, объявляющей это глобальное имя.
Локальное имя можно использовать для ссылки на объект, которому оно соотнесено, только из программы, в которой локальное имя объявлено. Некоторые имена всегда глобальны, некоторые — всегда локальны, а некоторые являются либо локальными, либо глобальными в зависимости от спецификаций программы, в которой имена объявлены.
Имя-записи глобально, если указана фраза GLOBAL (ГЛОБАЛЬНОЕ) в статье описания записи, объявляющей это имя, или в случае статьи описания записи в секции файлов, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в описании файла для имени- файла, связанного с описанием записи. Имя-данного глобально, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана либо в статье описания данного, объявляющей это имя-данного, либо в другой статье, которой подчинена упомянутая статья описания данного. Имя- условия, объявленное в статье описания данного, глобально, если эта статья подчинена другой статье, в которой указана фраза GLOBAL (ГЛОБАЛЬНОЕ). Однако иногда особые правила запрещают указание фразы GLOBAL (ГЛОБАЛЬНОЕ) для определенных статей описания данных, описания файла или описания записи.
Имя-файла глобально, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в соответствующей ему статье описания файла.
Если имя-данного, имя-файла или имя-условия, объявленное в описании данного, не глобально, имя является локальным.
Глобальные имена транзитивны в программах, содержащихся в других программах.
Объекты
Для обеспечения доступности данных обычно требуется сохранение в памяти определенных представлений данных. Определители файлов также требуют сохранения в памяти определенной информации, относящейся к файлу. Память, соотнесенная данному или определителю файла, может быть внешней или внутренней по отношению к программе, в которой объект объявлен.
Типы объектов
Записи рабочей памяти.
Записи рабочей памяти — это участки памяти, удовлетворяющие статьям описания записей в секции рабочей памяти.
Каждая статья описания записи в программе объявляет отдельный объект. Переименование и переопределение не объявляет новых объектов; они обеспечивают альтернативную группировку или описание объектов, ранее объявленных.
Определители файлов
Определитель файла — это область памяти, содержащая информацию о файле и используемая для связывания имени-файла с физическим файлом и имени-файла с соответствующей ему областью записи.
Области записи для файлов
Считается, что никакая отдельная статья описания записи в секции файлов не объявляет область памяти для записи. Область памяти — это скорее максимально требуемая память для удовлетворения соответствующих статей описания записей. Статьи могут описывать записи фиксированной или переменной длины. В этом представлении статьи описания записи считаются соответствующими в двух случаях. Во-первых, когда описания записи подчинены одной и той же статье описания файла, они всегда соответствующие. Во-вторых, когда описания записи подчинены различным статьям описания файлов и на эти статьи описания файлов имеется ссылка во фразе SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИСИ), описания записей соответствующие.
Все соответствующие статьи описания записи являются переопределениями одной и той же области памяти.
Другие объекты
Примерами других объектов, объявляемых в Кобол-програм- ме, являются: описания коммуникации, описания отчетов и управляющая информация, связанная с секциями коммуникаций, отчетов и связей.
Свойства объектов
Данное или определитель файла является внешним, если память, связанная с этим объектом, связана с единицей исполнения в целом, а не с отдельной программой единицы исполнения. На внешний объект может ссылаться любая программа, описывающая этот объект. Ссылки на внешний объект из различных программ, использующих разные описания объекта, являются ссылками на один и тот же объект.
Объект является внутренним, если память, связанная с этим объектом, связана только с программой, описывающей этот объект.
Внешние и внутренние объекты могут иметь либо глобальные, либо локальные имена.
Записи рабочей памяти
Записи данных, описанной в секции рабочей памяти, присваивается свойство внешней посредством фразы EXTERNAL (ВНЕШНЕЕ) в статье описания записи. Каждое данное, описанное статьей описания данного, подчиненной статье, описывающей внешнюю запись, также получает свойство внешнего.
Если запись или данное не обладают свойством внешних, они являются частью внутренних данных программы, в которой они описаны.
Определители файла
Определителю файла придается свойство внешнего посредством фразы EXTERNAL (ВНЕШНЕЕ) в соответствующей статье описания файла. Если определитель файла не обладает свойством внешнего, он является внутренним для программы, в которой описано соответствующее имя-файла.
Области записи для файлов
Записи данных, описанные как подчиненные статье описания файла, не содержащей фразу EXTERNAL (ВНЕШНЕЕ), или статье описания сортируемого-сливаемого файла, так же как и любые данные, описанные как подчиненные статьям описания данных для таких записей, всегда внутренние для программы, описывающей имя-файла. Если фраза EXTERNAL (ВНЕШНЕЕ) включена в статью описания файла, записи данных и данные получают свойство внешних.
Другие объекты
Записи данных, подчиненные данные и разнообразная соответствующая управляющая информация, описанная в секциях свя-
зи, коммуникаций и отчетов программы, всегда рассматриваются как внутренние для программы, описывающей эти данные. Специальные соглашения применяются к данным, описанным в секции связи, при установлении связи между описанными записями данных и другими данными, доступными другим программам (п. 6.4.2 настоящей части).
Разрешение имени
Если программы, содержащиеся в других программах, присваивают одни и те же имена данным, условиям и определителям файла, применяются определенные соглашения. Рассмотрим ситуацию, когда программа А содержит программу В1, которая в свою очередь содержит программу С1; кроме того, программы А и В1 (но не С1) содержат статьи раздела данных для имени условия, имени данного или имени файла с одинаковым именем DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ):
если каждое из имен DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) относится к внутреннему объекту, существуют два разных, хотя и с идентичными именами, объекта; если оба имени относятся к внешнему объекту, существует один объект;
ссылки программы А на DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) — всегда ссылки на объект, объявляемый ею. Ссылки программы В1 на DUPLICATE -NAME (ИМЯ-ДУБЛИКАТ) — всегда ссылки на объект, объявляемый программой В1;
если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) — локальное имя в обеих программах А и В1, программа С1 не может ссылаться на это имя;
если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) в программе В1 —• глобальное имя, объект, именованный им, доступен программе С1 посредством ссылки на имя в программе В1, независимо от того, является ли DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) глобальным именем в программе А;
если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) в программе А глобальное имя, а в программе В1 — локальное, ссылка программы С1 на DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) является ссылкой на объект с именем, объявленным в программе А.
Классы программ
Все программы, образующие часть единицы исполнения, могут не обладать никаким, обладать одним или обоими из свойств: общая и начальная.
Общие программы
Общая программа — это программа, которая, несмотря на то, что непосредственно содержится в другой объемлющей программе, может быть вызвана любой программой, прямо или косвенно содержащейся в этой объемлющей программе. Свойство «общая» присваивается указанием фразы COMMON (ОБЩАЯ) в разделе 82
идентификации программы. Фраза COMMON (ОБЩАЯ) облегчает написание подпрограмм, которые предназначены для использования всеми программами, содержащимися в программе.
Начальные программы
Начальная программа — это программа, состояние которой инициируется при вызове программы. Таким образом, когда бы начальная программа ни вызывалась, ее состояние всегда такое же, каким оно было, когда программа была вызвана первый раз в этой единице исполнения. Во время инициации начальной программы инициируются все внутренние данные этой программы; следовательно, каждому из внутренних данных программы, имеющему в своем описании фразу VALUE (ЗНАЧЕНИЕ), присваивается указанное для него значение, для данных, в статье описания которых нет фразы VALUE (ЗНАЧЕНИЕ), устанавливаются неопределенные значения. Файлы с внутренними определителями файла, связанные с программой, не находятся в режиме открытия. Механизмы управления для всех содержащихся в программе операторов PERFORM (ВЫПОЛНИТЬ) устанавливаются в начальные состояния. Свойство «начальная» устанавливается указанием фразы INITIAL (НАЧАЛЬНАЯ) в разделе идентификации программы.
Межпрограммные связи
Когда полное решение проблемы обработки данных разделено на несколько программ, составляющие программы должны иметь возможность взаимной связи. Эта взаимосвязь может быть четырех видов: передача управления, передача параметров, ссылка на общие данные и ссылка на общие файлы. Указанные четыре вида межпрограммных связей обеспечиваются и когда взаимосвязанные программы компилируются отдельно, и когда одна из взаимосвязанных программ содержится в другой программе.. Механизмы, обеспечиваемые в последних двух случаях, отличаются от механизмов в первых двух случаях; например, программа, содержащаяся в другой программе, может ссылаться на любое имя-данного или имя-файла, являющееся глобальным именем в содержащей программе (см. п. 6.2.1 настоящей части).
П е р е д а ч а управления
Оператор CALL (ВЫЗВАТЬ) обеспечивает возможность передачи управления от одной программы другой программе в единице исполнения. Вызываемая программа в свою очередь может содержать операторы CALL (ВЫЗВАТЬ). Когда управление передается вызываемой программе, выполнение продолжается от оператора к оператору, начиная с первого недекларативного оператора. Если управление достигает оператора STOP RUN (ОСТАНОВИТЬ РАБОТУ), это означает логический конец единицы исполнения. Если управление достигает оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), это означает логический конец только вызываемой программы, затем управление возвращается следующему в вызывающей программе после оператора CALL (ВЫЗВАТЬ) выполнимому оператору. Таким образом, оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) завершает выполнение только той программы, в которой он имеется, в то время как оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) завершает выполнение единицы исполнения.
Оператор CALL (ВЫЗВАТЬ) может быть использован для вызова программы , записанной на языке, отличном от Кобола, но механизм возврата и передачи данных между программами в настоящем документе не определяется. Кобол-программа также может быть вызвана из программы, записанной на языке, отличном от Кобола, но механизм вызова и передачи данных между программами в настоящем документе не определяется. В обоих вышеизложенных случаях в настоящем документе определены только те части механизма передачи параметров, которые относятся к Ко- бол-программе.
Побачили розбіжність з офіційним текстом?