1. Индексирование

Номера вхождений указываются добавлением одного или не­скольких индексов к имени-данного.

Индексом может быть либо целое, либо имя-данного, относя­щееся к целому числовому элементарному данному, либо имя-ин- декса, связанное с таблицей. За именем-данного или именем-ин- декса может следовать знак операции + или — и целое, исполь­зуемое соответственно как приращение или уменьшение. Допус­тимо одновременное использование целых, имен-данных и имен-ин­дексов.

Индексы, заключенные в круглые скобки, записываются непос­редственно за уточнением имени элемента таблицы. Количество индексов в такой ссылке должно равняться размерности таблицы, в которую входит данный элемент. Таким образом, каждой фра­зе OCCURS (ПОВТОРЯЕТСЯ) в иерархии, содержащей имя-дан- ного, включая и само имя-данного, должен быть соотнесен индекс.

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

В ссылке на данное нельзя использовать индексирование, если данное не является табличным элементом или данным или име- нем-условия в табличном элементе.

Наименьший допустимый номер вхождения равняется единице. Наибольший допустимый номер вхождения в каждом отдельном случае равняется максимальному числу вхождений данного, опре­деляемому фразой OCCURS (ПОВТОРЯЕТСЯ).

  1. Индексирование с помощью целого или имен и-д энного

Если для представления индекса используется целое или имя- данного, они могут использоваться для ссылки на данные в разных таблицах. Элементы таблиц не обязательно должны быть одного и того же размера для всех таблиц. Одно и то же целое или имя- данного может появляться как единственный индекс одного данно­го и как один из двух и более индексов другого данного.

  1. Индексирование с помощью имени-ин­декса

Для облегчения операций поиска в таблице и манипулирования отдельными данными допускается индексирование с помощью имени-индекса. Чтобы использовать это средство, программист соотносит одно или несколько имен-индексов данному, в статье описания которого имеется фраза OCCURS (ПОВТОРЯЕТСЯ). Значение имени-индекса соответствует номеру вхождения для дан­ного, с которым связано имя-индекса.

Фраза INDEXED BY (ИНДЕКСИРУЕТСЯ), посредством кото­рой идентифицируется имя-индекса и соотносится определенной таблице, является необязательной частью фразы OCCURS (ПОВ­ТОРЯЕТСЯ). В Коболе нет отдельной статьи для описания имени- индекса, поскольку его определение полностью зависит от обору­дования. Во время выполнения значение имени-индекса будет со­ответствовать номеру вхождения для той конкретной размерности таблицы, с которой было связано имя-индекса; способ соответст­вия определяется реализацией. Начальное значение имени-индек­са во время выполнения не определено, то есть начальное значение нужно установить перед использованием.

Начальное значение имени-индекса присваивается оператором' PERFORM (ВЫПОЛНИТЬ) с фразой VARYING (МЕНЯЯ), опе­ратором SEARCH ALL (ИСКАТЬ ОСОБО) или оператором SET (УСТАНОВИТЬ).

Использование целого или имени-данного в качестве индекса для ссылки на табличный элемент или данное в табличном элемен­те не вызывает изменений значения имени-индекса, связанного с этой таблицей.

Имя-индекса может быть использовано для ссылки только на ту таблицу, которой оно соотнесено фразой INDEXED BY (ИН­ДЕКСИРУЕТСЯ).

Операции поиска данных, организованных в таблицы, обеспе­чиваются в Коболе оператором SEARCH (ИСКАТЬ), позволяю­щим осуществлять последовательный или непоследовательный (например, бинарный) поиск. Оператор используется для поиска в таблице элемента, удовлетворяющего определенному условию, и для установки значения соответствующего имени-индекса для указания этого табличного элемента

.Относительное индексирование является дополнительным вариантом для ссылок на табличные элементы или на данное в табличном элементе. Когда за именем табличного элемента сле­дует индекс в виде (имя-индекса + или — целое), номер вхожде­ния, требуемый для завершенной (полной) ссылки, такой же, как если бы перед ссылкой имя-индекса было увеличено или уменьше­но на целое посредством оператора SET (УСТАНОВИТЬ). Ис­пользование относительного индексирования не изменяет значе­ния имени-индекса.

Значение имени-индекса может быть сделано доступным объ­ектной программе путем его запоминания в индексном данном. Индексные данные описываются в программе статьей описания данного, содержащей фразу USAGE IS INDEX (ДЛЯ ИНДЕК­СА). Значение имени-индекса помещается в индексное данное вы­полнением оператора SET (УСТАНОВИТЬ).

  1. П р и м е р ы индексирования

Предполагая следующее описание данных:

02 ANK ...

02 Al OCCURS 20 TIMES INDEXED BY Al-INDEX ...

03 Bl ...

03 B2 OCCURS 5 TIMES . . .

04 Cl ...

88 MAX VALUE IS ...

04 C2 ...

05 DI OCCURS 10 TIMES...

06 El . . .

06 E2 ...

02 AHK ...

02 Al ПОВТОРЯЕТСЯ 20 РАЗ ИНДЕКСИРУЕТСЯ AI-ИНДЕКС...

03 Bl ...

03 B2 ПОВТОРЯЕТСЯ 5 РАЗ . ..

04 Cl ...

88 МАХ ЗНАЧЕНИЕ . . .

04 С2...

05 D1 ПОВТОРЯЕТСЯ 10 РАЗ ...

06 Е1 ...

06 Е2 ...

в ссылках на А1 и В1 требуется только один индекс, в ссылках на В2, Cl, МАХ и С2 требуются два индекса, и в ссылках на D1, Е1 и Е2 требуются три индекса.

Проиллюстрируем требования указания индексов в порядке от старшего к младшим:

Е1 (18, 2, 7) значит Е1 в седьмом D1, во втором В2 и в восем­надцатом А1.

Возможность одновременного использования целых, имен-дан- ных и имен-индексов проиллюстрирована на следующем примере:

EI (A1-INDEX, 4, ANK+5).

(ЕІ (АІ-ИНДЕКС, 4, АНК+5)).

  1. ОБЩАЯ ОБЛАСТЬ ПАМЯТИ

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

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

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

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

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

  1. ОРГАНИЗАЦИЯ ПРОГРАММ И ПРОГРАММНЫХ СВЯЗЕЙ

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

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

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

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

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

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

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

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

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

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

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

  1. Имена

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

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

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

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

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

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

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