Перейти до вмісту
ГОСТ 22558-89
/ 116

Понятие программы и единицы исполнения

Имеются два уровня компьютерных программ в Коболе: исход­ный уровень и объектный уровень.

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

В общем случае программа, содержащаяся в другой програм­ме, не может быть преобразована компилятором в объектную программу, так как по определениям этого документа в содержа­щейся программе явно разрешается ссылаться на данные, описан­ные в содержащей ее исходной программе.

Раздел процедур исходной программы организован как после­довательность процедур двух типов. Декларативные процедуры, обычно именуемые декларативами, — это процедуры, которые бу­дут выполняться только при появлении специальных условий во время выполнения программы. Недекларативные процедуры — процедуры, выполняемые соответственно нормальному ходу уп­равления в программе. Декларативні могут содержать недеклара­тивные процедуры, но последние будут выполняться только во вре­мя выполнения декларатив, в которых они содержатся. Недекла­ративные процедуры могут содержать другие недекларативные про­цедуры, но не должны содержать декларативы. Ни декларативы, ни недекларативные процедуры не могут содержать в себе прог­раммы. Другими словами, в Коболе термины «процедура» и «про­грамма» не являются синонимами.

На объектном уровне наиболее объемлющей единицей органи­зации компьютерных программ является единица исполнения. Единица исполнения — это полное решение проблемы, состоящее из объектной программы или из нескольких взаимосвязанных объектных программ. Единица исполнения — это независимая единица, которая может выполняться без связей или координиро­вания с другой единицей исполнения, за исключением того, что мо­жет обрабатывать файлы данных и сообщения и устанавливать :или проверять переключатели, которые записаны или будут счи­тываться другими единицами исполнения.

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

Единица исполнения может также содержать объектный код .и области памяти для данных, получаемые в результате компиля­ции программы, записанной на языке, отличном от Кобола; в этом случае требования к организации связей между Кобол-программой и программой, записанной не на Коболе, определяются реализа­цией.

Доступные данные и файлы

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

Имена

Имя-данного именует данное. Имя-файла именует определи­тель файла. Эти имена классифицируются как глобальные или локальные.

Глобальное имя используется для ссылки на объект, которому оно соотнесено, либо из программы, в которой глобальное имя объ­явлено, либо из любой другой программы, содержащейся в про­грамме, объявляющей это глобальное имя.

Локальное имя можно использовать для ссылки на объект, ко­торому оно соотнесено, только из программы, в которой локальное имя объявлено. Некоторые имена всегда глобальны, некоторые — всегда локальны, а некоторые являются либо локальными, либо глобальными в зависимости от спецификаций программы, в кото­рой имена объявлены.

Имя-записи глобально, если указана фраза GLOBAL (ГЛО­БАЛЬНОЕ) в статье описания записи, объявляющей это имя, или в случае статьи описания записи в секции файлов, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в описании файла для имени- файла, связанного с описанием записи. Имя-данного глобально, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана либо в статье опи­сания данного, объявляющей это имя-данного, либо в другой ста­тье, которой подчинена упомянутая статья описания данного. Имя- условия, объявленное в статье описания данного, глобально, если эта статья подчинена другой статье, в которой указана фраза GLOBAL (ГЛОБАЛЬНОЕ). Однако иногда особые правила зап­рещают указание фразы GLOBAL (ГЛОБАЛЬНОЕ) для опреде­ленных статей описания данных, описания файла или описания за­писи.

Имя-файла глобально, если фраза GLOBAL (ГЛОБАЛЬНОЕ) указана в соответствующей ему статье описания файла.

Если имя-данного, имя-файла или имя-условия, объявленное в описании данного, не глобально, имя является локальным.

Глобальные имена транзитивны в программах, содержащихся в других программах.

Объекты

Для обеспечения доступности данных обычно требуется сохра­нение в памяти определенных представлений данных. Определи­тели файлов также требуют сохранения в памяти определенной информации, относящейся к файлу. Память, соотнесенная данно­му или определителю файла, может быть внешней или внутренней по отношению к программе, в которой объект объявлен.

Типы объектов

Записи рабочей памяти.

Записи рабочей памяти — это участки памяти, удовлетворяю­щие статьям описания записей в секции рабочей памяти.

Каждая статья описания записи в программе объявляет от­дельный объект. Переименование и переопределение не объявля­ет новых объектов; они обеспечивают альтернативную группировку или описание объектов, ранее объявленных.

Определители файлов

Определитель файла — это область памяти, содержащая ин­формацию о файле и используемая для связывания имени-файла с физическим файлом и имени-файла с соответствующей ему облас­тью записи.

Области записи для файлов

Считается, что никакая отдельная статья описания записи в секции файлов не объявляет область памяти для записи. Область памяти — это скорее максимально требуемая память для удовлет­ворения соответствующих статей описания записей. Статьи могут описывать записи фиксированной или переменной длины. В этом представлении статьи описания записи считаются соответствую­щими в двух случаях. Во-первых, когда описания записи подчине­ны одной и той же статье описания файла, они всегда соответству­ющие. Во-вторых, когда описания записи подчинены различным статьям описания файлов и на эти статьи описания файлов имеет­ся ссылка во фразе SAME RECORD (ОБЩАЯ ОБЛАСТЬ ЗАПИ­СИ), описания записей соответствующие.

Все соответствующие статьи описания записи являются пере­определениями одной и той же области памяти.

Другие объекты

Примерами других объектов, объявляемых в Кобол-програм- ме, являются: описания коммуникации, описания отчетов и уп­равляющая информация, связанная с секциями коммуникаций, от­четов и связей.

Свойства объектов

Данное или определитель файла является внешним, если па­мять, связанная с этим объектом, связана с единицей исполнения в целом, а не с отдельной программой единицы исполнения. На внешний объект может ссылаться любая программа, описывающая этот объект. Ссылки на внешний объект из различных программ, использующих разные описания объекта, являются ссылками на один и тот же объект.

Объект является внутренним, если память, связанная с этим объектом, связана только с программой, описывающей этот объ­ект.

Внешние и внутренние объекты могут иметь либо глобальные, либо локальные имена.

Записи рабочей памяти

Записи данных, описанной в секции рабочей памяти, присваи­вается свойство внешней посредством фразы EXTERNAL (ВНЕШНЕЕ) в статье описания записи. Каждое данное, описан­ное статьей описания данного, подчиненной статье, описывающей внешнюю запись, также получает свойство внешнего.

Если запись или данное не обладают свойством внешних, они являются частью внутренних данных программы, в которой они описаны.

Определители файла

Определителю файла придается свойство внешнего посредст­вом фразы EXTERNAL (ВНЕШНЕЕ) в соответствующей статье описания файла. Если определитель файла не обладает свойст­вом внешнего, он является внутренним для программы, в которой описано соответствующее имя-файла.

Области записи для файлов

Записи данных, описанные как подчиненные статье описания файла, не содержащей фразу EXTERNAL (ВНЕШНЕЕ), или ста­тье описания сортируемого-сливаемого файла, так же как и лю­бые данные, описанные как подчиненные статьям описания данных для таких записей, всегда внутренние для программы, описываю­щей имя-файла. Если фраза EXTERNAL (ВНЕШНЕЕ) включена в статью описания файла, записи данных и данные получают свой­ство внешних.

Другие объекты

Записи данных, подчиненные данные и разнообразная соответ­ствующая управляющая информация, описанная в секциях свя-

зи, коммуникаций и отчетов программы, всегда рассматриваются как внутренние для программы, описывающей эти данные. Спе­циальные соглашения применяются к данным, описанным в сек­ции связи, при установлении связи между описанными записями данных и другими данными, доступными другим программам (п. 6.4.2 настоящей части).

Разрешение имени

Если программы, содержащиеся в других программах, присва­ивают одни и те же имена данным, условиям и определителям фай­ла, применяются определенные соглашения. Рассмотрим ситуа­цию, когда программа А содержит программу В1, которая в свою очередь содержит программу С1; кроме того, программы А и В1 (но не С1) содержат статьи раздела данных для имени условия, имени данного или имени файла с одинаковым именем DUPLICA­TE-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 (ВЫЗВАТЬ) может быть использован для вызова программы , записанной на языке, отличном от Кобола, но механизм возврата и передачи данных между программами в нас­тоящем документе не определяется. Кобол-программа также мо­жет быть вызвана из программы, записанной на языке, отличном от Кобола, но механизм вызова и передачи данных между програм­мами в настоящем документе не определяется. В обоих вышеиз­ложенных случаях в настоящем документе определены только те части механизма передачи параметров, которые относятся к Ко- бол-программе.

Побачили розбіжність з офіційним текстом?

Повідомити про неточність

Напишіть, що саме розходиться з офіційною публікацією. Код документа вкажіть у повідомленні — так ми швидше знайдемо потрібне місце.

Перейти до форми зворотного зв'язку

Дивіться також

Весь розділ →