Объекты
Для обеспечения доступности данных обычно требуется сохранение в памяти определенных представлений данных. Определители файлов также требуют сохранения в памяти определенной информации, относящейся к файлу. Память, соотнесенная данному или определителю файла, может быть внешней или внутренней по отношению к программе, в которой объект объявлен.
Типы объектов
Записи рабочей памяти.
Записи рабочей памяти — это участки памяти, удовлетворяющие статьям описания записей в секции рабочей памяти.
Каждая статья описания записи в программе объявляет отдельный объект. Переименование и переопределение не объявляет новых объектов; они обеспечивают альтернативную группировку или описание объектов, ранее объявленных.
Определители файлов
Определитель файла — это область памяти, содержащая информацию о файле и используемая для связывания имени-файла с физическим файлом и имени-файла с соответствующей ему областью записи.
Области записи для файлов
Считается, что никакая отдельная статья описания записи в секции файлов не объявляет область памяти для записи. Область памяти — это скорее максимально требуемая память для удовлетворения соответствующих статей описания записей. Статьи могут описывать записи фиксированной или переменной длины. В этом представлении статьи описания записи считаются соответствующими в двух случаях. Во-первых, когда описания записи подчинены одной и той же статье описания файла, они всегда соответствующие. Во-вторых, когда описания записи подчинены различным статьям описания файлов и на эти статьи описания файлов имеется ссылка во фразе 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 (ВЫЗВАТЬ) может быть использован для вызова программы , записанной на языке, отличном от Кобола, но механизм возврата и передачи данных между программами в настоящем документе не определяется. Кобол-программа также может быть вызвана из программы, записанной на языке, отличном от Кобола, но механизм вызова и передачи данных между программами в настоящем документе не определяется. В обоих вышеизложенных случаях в настоящем документе определены только те части механизма передачи параметров, которые относятся к Ко- бол-программе.
Имена программ
Чтобы вызвать программу, оператор CALL (ВЫЗВАТЬ) идентифицирует имя программы. Имена, присваиваемые программам, непосредственно или косвенно содержащимся в других программах, должны быть однозначными (уникальными).
Имена, присваиваемые каждой из отдельно компилируемых программ, образующих единицу исполнения, должны быть также однозначны (уникальны).
Область действия оператора CALL (ВЫЗВАТЬ)
Вызывающая программа может обладать или не обладать любым свойством программы; она может компилироваться отдельно или нет; она может или содержаться в другой программе, или содержать другую программу:
любая вызывающая программа может вызвать любую отдельно компилируемую программу в единице исполнения;
вызывающая программа может вызвать любую программу, непосредственно содержащуюся в вызывающей программе;
любая вызывающая программа может вызвать любую программу, обладающую свойством «общая» и содержащуюся непосредственно в программе, которая косвенно или непосредственно содержит вызывающую программу, если только вызывающая программа сама не содержится в программе, обладающей свойством «общая»;
вызывающая программа может вызвать программу, не обладающую свойством «общая» и не компилируемую отдельно, тогда и только тогда, когда эта программа непосредственно содержится в вызывающей программе.
Область действия имен программ
Определенные соглашения применяются, если в единице исполнения имя содержащейся программы в отдельно компилируемой программе идентично имени другой отдельно компилируемой программы.
Рассмотрим случай, когда программа А содержит программу В1 и программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), программа В1 содержит программу ВВ и программа DUPLICATENAME (ИМЯ-ДУБЛИКАТ) содержит программу DD.
Имя DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) также указано для отдельно компилируемой программы.
Если программа А, но ни одна из программ, содержащихся в ней, вызывает программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), активируется программа, содержащаяся в программе А.
Если программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) вызывает программа В1 или ВВ, то:
если программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, обладает свойством «общая», то вызывается она;
если программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, не обладает свойством «общая», вызывается отдельно компилируемая программа.
Если программа DD или программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, вызывает программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), вызываемой программой является отдельно компилируемая программа.
Если любая отдельно компилируемая программа в единице исполнения или любая другая программа, содержащаяся в такой программе, вызывает программу DUPLICATE-NAME (ИМЯ- ДУБЛИКАТ), вызываемой программой является отдельно компилируемая программа, именуемая DUPLICATE-NAME (ИМЯ- ДУБЛИКАТ).
П е р е д а ч а параметров программам
Программа вызывает другую программу, чтобы вызванная программа выполнила от имени вызывающей программы некоторую часть решения проблемы обработки данных. В большинстве случаев необходимо, чтобы вызывающая программа определила вызываемой программе точную часть решения проблемы, задавая определенные значения данных, требующихся вызываемой программе и доступных ей. Одним из методов обеспечения доступности значений данных является передача параметров программе, описываемая в данном пункте. Другой метод — использование общих данных (п. 6.4.3 настоящей части). Значения данных, передаваемых в качестве параметров, также идентифицируют некоторые данные для совместного использования; следовательно, два метода не являются взаимно независимыми.