1. Объекты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если программы, содержащиеся в других программах, присва­ивают одни и те же имена данным, условиям и определителям фай­ла, применяются определенные соглашения. Рассмотрим ситуа­цию, когда программа А содержит программу В1, которая в свою очередь содержит программу С1; кроме того, программы А и В1 (но не С1) содержат статьи раздела данных для имени условия, имени данного или имени файла с одинаковым именем DUPLICA­TE-NAME (ИМЯ-ДУБЛИКАТ):

  1. если каждое из имен DUPLICATE-NAME (ИМЯ-ДУБЛИ­КАТ) относится к внутреннему объекту, существуют два разных, хотя и с идентичными именами, объекта; если оба имени относятся к внешнему объекту, существует один объект;

  2. ссылки программы А на DUPLICATE-NAME (ИМЯ-ДУБ­ЛИКАТ) — всегда ссылки на объект, объявляемый ею. Ссылки программы В1 на DUPLICATE -NAME (ИМЯ-ДУБЛИКАТ) — всегда ссылки на объект, объявляемый программой В1;

  3. если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) — локаль­ное имя в обеих программах А и В1, программа С1 не может ссы­латься на это имя;

  4. если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) в програм­ме В1 —• глобальное имя, объект, именованный им, доступен про­грамме С1 посредством ссылки на имя в программе В1, независи­мо от того, является ли DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) глобальным именем в программе А;

  5. если DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) в программе А глобальное имя, а в программе В1 — локальное, ссылка про­граммы С1 на DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) являет­ся ссылкой на объект с именем, объявленным в программе А.

  1. Классы программ

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

  1. Общие программы

Общая программа — это программа, которая, несмотря на то, что непосредственно содержится в другой объемлющей програм­ме, может быть вызвана любой программой, прямо или косвенно содержащейся в этой объемлющей программе. Свойство «общая» присваивается указанием фразы COMMON (ОБЩАЯ) в разделе 82идентификации программы. Фраза COMMON (ОБЩАЯ) облегча­ет написание подпрограмм, которые предназначены для исполь­зования всеми программами, содержащимися в программе.

  1. Начальные программы

Начальная программа — это программа, состояние которой ини­циируется при вызове программы. Таким образом, когда бы на­чальная программа ни вызывалась, ее состояние всегда такое же, каким оно было, когда программа была вызвана первый раз в этой единице исполнения. Во время инициации начальной программы инициируются все внутренние данные этой программы; следова­тельно, каждому из внутренних данных программы, имеющему в своем описании фразу VALUE (ЗНАЧЕНИЕ), присваивается ука­занное для него значение, для данных, в статье описания которых нет фразы VALUE (ЗНАЧЕНИЕ), устанавливаются неопреде­ленные значения. Файлы с внутренними определителями файла, связанные с программой, не находятся в режиме открытия. Меха­низмы управления для всех содержащихся в программе операто­ров PERFORM (ВЫПОЛНИТЬ) устанавливаются в начальные состояния. Свойство «начальная» устанавливается указанием фразы INITIAL (НАЧАЛЬНАЯ) в разделе идентификации про­граммы.

  1. Межпрограммные связи

Когда полное решение проблемы обработки данных разделено на несколько программ, составляющие программы должны иметь возможность взаимной связи. Эта взаимосвязь может быть четы­рех видов: передача управления, передача параметров, ссылка на общие данные и ссылка на общие файлы. Указанные четыре вида межпрограммных связей обеспечиваются и когда взаимосвязанные программы компилируются отдельно, и когда одна из взаимосвя­занных программ содержится в другой программе.. Механизмы, обеспечиваемые в последних двух случаях, отличаются от меха­низмов в первых двух случаях; например, программа, содержаща­яся в другой программе, может ссылаться на любое имя-данного или имя-файла, являющееся глобальным именем в содержащей программе (см. п. 6.2.1 настоящей части).

  1. П е р е д а ч а управления

Оператор CALL (ВЫЗВАТЬ) обеспечивает возможность пе­редачи управления от одной программы другой программе в еди­нице исполнения. Вызываемая программа в свою очередь может содержать операторы CALL (ВЫЗВАТЬ). Когда управление пе­редается вызываемой программе, выполнение продолжается от оператора к оператору, начиная с первого недекларативного опе­ратора. Если управление достигает оператора STOP RUN (ОСТА­НОВИТЬ РАБОТУ), это означает логический конец единицы ис­полнения. Если управление достигает оператора EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), это означает логический конец только вызываемой программы, затем управление возвращается следующему в вызывающей программе после оператора CALL (ВЫЗВАТЬ) выполнимому оператору. Таким образом, оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) завершает выпол­нение только той программы, в которой он имеется, в то время как оператор STOP RUN (ОСТАНОВИТЬ РАБОТУ) завершает вы­полнение единицы исполнения.

Оператор CALL (ВЫЗВАТЬ) может быть использован для вызова программы , записанной на языке, отличном от Кобола, но механизм возврата и передачи данных между программами в нас­тоящем документе не определяется. Кобол-программа также мо­жет быть вызвана из программы, записанной на языке, отличном от Кобола, но механизм вызова и передачи данных между програм­мами в настоящем документе не определяется. В обоих вышеиз­ложенных случаях в настоящем документе определены только те части механизма передачи параметров, которые относятся к Ко- бол-программе.

  1. Имена программ

Чтобы вызвать программу, оператор CALL (ВЫЗВАТЬ) идентифицирует имя программы. Имена, присваиваемые про­граммам, непосредственно или косвенно содержащимся в других программах, должны быть однозначными (уникальными).

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

  1. Область действия оператора CALL (ВЫЗВАТЬ)

Вызывающая программа может обладать или не обладать лю­бым свойством программы; она может компилироваться отдельно или нет; она может или содержаться в другой программе, или со­держать другую программу:

  1. любая вызывающая программа может вызвать любую от­дельно компилируемую программу в единице исполнения;

  2. вызывающая программа может вызвать любую програм­му, непосредственно содержащуюся в вызывающей программе;

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

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

  1. Область действия имен программ

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

Рассмотрим случай, когда программа А содержит программу В1 и программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), про­грамма В1 содержит программу ВВ и программа DUPLICATE­NAME (ИМЯ-ДУБЛИКАТ) содержит программу DD.

Имя DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) также указано для отдельно компилируемой программы.

  1. Если программа А, но ни одна из программ, содержащихся в ней, вызывает программу DUPLICATE-NAME (ИМЯ-ДУБЛИ­КАТ), активируется программа, содержащаяся в программе А.

  2. Если программу DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ) вызывает программа В1 или ВВ, то:

  1. если программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, обладает свойством «общая», то вы­зывается она;

  2. если программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, не обладает свойством «общая», вызывается отдельно компилируемая программа.

  1. Если программа DD или программа DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), содержащаяся в программе А, вызывает про­грамму DUPLICATE-NAME (ИМЯ-ДУБЛИКАТ), вызываемой программой является отдельно компилируемая программа.

  2. Если любая отдельно компилируемая программа в единице исполнения или любая другая программа, содержащаяся в такой программе, вызывает программу DUPLICATE-NAME (ИМЯ- ДУБЛИКАТ), вызываемой программой является отдельно компи­лируемая программа, именуемая DUPLICATE-NAME (ИМЯ- ДУБЛИКАТ).

  1. П е р е д а ч а параметров программам

Программа вызывает другую программу, чтобы вызванная программа выполнила от имени вызывающей программы некото­рую часть решения проблемы обработки данных. В большинстве случаев необходимо, чтобы вызывающая программа определила вызываемой программе точную часть решения проблемы, задавая определенные значения данных, требующихся вызываемой про­грамме и доступных ей. Одним из методов обеспечения доступнос­ти значений данных является передача параметров программе, описываемая в данном пункте. Другой метод — использование общих данных (п. 6.4.3 настоящей части). Значения данных, пере­даваемых в качестве параметров, также идентифицируют некото­рые данные для совместного использования; следовательно, два метода не являются взаимно независимыми.