Какая логика стоит за нумерацией абзацев COBOL? - PullRequest
0 голосов
/ 18 мая 2018

Я много раз видел следующую структуру именования абзацев:

nnnn-PARAGRAPH-NAME.

Где nnnn обозначает четырехзначное число.

Вот полный пример:

0000-MAINLINE. 
    PERFORM 1000-INITIALIZE-THE-PROGRAM. 
    PERFORM 2000-PROCESS-1-BILLING-RECORD 
        UNTIL 88-100-ALL-RECORDS-PROCESSED. 
    PERFORM 3000-TERMINATE-THE-PROGRAM. 
    GOBACK. 
1000-INITIALIZE-THE-PROGRAM. 
    PERFORM 1100-VALIDATE-CONTROL-CARD. 
    PERFORM 1200-OPEN-THE-FILES. 
    PERFORM 8000-GET-NEXT-BILLING-RECORD. 
1100-VALIDATE-CONTROL-CARD. 
    PERFORM 1110-READ-CONTROL-CARD. 
    PERFORM 1120-EDIT-CONTROL-CARD. 
1110-READ-CONTROL-CARD. 
    PERFORM 9000-ABEND-THE-PROGRAM.  *> IF A READ ERROR OCCURRED 
1120-EDIT-CONTROL-CARD. 
    PERFORM 9000-ABEND-THE-PROGRAM   *> IF AN EDIT ERROR OCCURRED 
1200-OPEN-THE-FILES. 
    PERFORM 9000-ABEND-THE-PROGRAM   *> IF AN OPEN ERROR OCCURRED 
2000-PROCESS-1-BILLING-RECORD. 
    PERFORM 2100-CALCULATE-BILLABLE-AMT. 
    PERFORM 2200-PRINT-BILLING-REPORT. 
    PERFORM 8000-GET-NEXT-BILLING-RECORD. 
2200-PRINT-BILLING-REPORT. 
    PERFORM 2210-PRINT-REPORT-HEADER.  *> WHEN IT'S NEEDED 
3000-TERMINATE-THE-PROGRAM. 
    PERFORM 3100-CLOSE-THE-FILES. 
    PERFORM 3200-DISPLAY-FINAL-MESSAGES. 
8000-GET-NEXT-BILLING-RECORD. 
    PERFORM 9000-ABEND-THE-PROGRAM.    *> IF A READ ERROR OCCURRED 
9000-ABEND-THE-PROGRAM. 

Поэтому у меня следующие вопросы:

  1. Является ли это устаревшим в наши дни?
  2. Почему (или было) это хорошая практика?
  3. Каким критериям соответствует нумерация абзацев?

Ответы [ 3 ]

0 голосов
/ 18 мая 2018

Объяснение

Числа показывают структуру программы.В этой программе:

  • 1 * - это все процедуры инициализации, а вызовы 1000 -... 1100 -... и 1200-.В то время как 1100 -... вызывает 1110 -... и 1120 -... и т. Д.
  • 2 *, это основные логические процедуры обработки
  • 3 * - это логика процедуры финализации обработки
  • 8000 , вызываемая из любого места
  • 9000 процедуры ошибки

Итакструктура вызова программы:

                                     0000-
           +---------------------------+------------------------------+                             
         1000-                       2000-                          3000-
  +--------+------+             +------+------+               +-------+-------+ 
1100-           1200-         2100-         2200-           3100-           3200-

 etc...

Конкретные вопросы

  1. Это не рекомендуется в настоящее время? Абсолютно нет , его следует использовать на других процедурных языках.Изучите систему нумерации
  2. Почему (или было) это хорошая практика?Это хорошая практика, потому что она говорит вам
    • Как процедуры связаны друг с другом - это может быть очень удобно.
    • Структура вызова для получения процедуры
    • Улучшает понимание
    • экономит много времени.Например, если вы найдете 2000- , вы перейдете к основной логике обработки
  3. Каким критериям соответствует нумерация абзаца?

Другие пункты

Как только вы привыкнете к системе нумерации, это значительно облегчит понимание программы.Разные сайты делают это по-разному, некоторые могут использовать буквы / вместо цифр, например,

      Perform A000-Initialise
      Perform B000-Main
      Perform C000-Finalise

 A000-Initialise.
     Perform A100-...
     etc

На любом сайте они будут использовать один и тот же стандарт нумерации во всех (или в большинстве программ).

Сайты могут резервировать первую цифру / букву для определенных целей.Это чаще встречается при использовании формата A000, B000.Вы можете использовать R ... для файла читает W ... для файла пишет S ... для SQL звонки и т. Д.

Система нумерации облегчает жизнь для опытного программиста.Работая на других языках, следует использовать другие процедурные языки, кроме Cobol.

0 голосов
/ 18 мая 2018

Четырехзначное число на самом деле ни для чего не используется, НО, если программа правильно структурирована, это может помочь опытному программисту узнать, как обходится с программой.Давайте посмотрим на этот пример:

PROCEDURE DIVSION.
0000-MAINLINE.
   PERFORM OPEN-FILES
   PERFORM VALIDATE-CONTENTS
   PERFORM PROCESS-DATA
   PERFORM WRITE-REPORTS
   PERFORM CLOSE-FILES
.
CLOSE-FILE.
   PERFORM CLOSE-FILE1
   PERFORM CLOSE-FILE2
   PERFORM CLOSE-FILE3
.
PROCESS-DATA.
   PERFORM VARYING X 
              FROM 1 BY 1
             UNTIL X > NUMBER-OF-RECS
      PERFORM DO-THE-THINGS
   END-PERFORM
.
WRITE-REPORTS.
   DISPLAY 'THIS IS MY REPOR'.
.
VALIDATE-CONTENTS.
   IF REC NOT EQUAL SPACES
       SET GOOD-REC TO TRUE
   END-IF
.
OPEN-FILES.
   PERFORM OPEN-FILE1
   PERFORM OPEN-FILE2
   PERFORM OPEN-FILE3
.
DO-THE-THINGS.
   CONTINUE
.

Я знаю, что программа глупая и не имеет смысла, но это нормально для этого примера.Попробуйте следить за ходом этой программы.Если мы присваиваем номер каждому началу абзаца и единице и приращению (таким образом, CLOSE-FILE равен 1, PROCESS-DATA равен 2 ...), тогда основная линия прыгает примерно так:

5

4

2, 6

3

1

Это нормально для такой маленькой программы, потому что мы все еще можем найти наш путьвокруг.Теперь представьте, что ваша программа имеет тысячи строк и все вышло из строя.Да, вы можете понять это, но не было бы намного проще, если бы это выглядело так:

PROCEDURE DIVSION.
0000-MAINLINE.
   PERFORM A0000-OPEN-FILES
   PERFORM B0000-VALIDATE-CONTENTS
   PERFORM C0000-PROCESS-DATA
   PERFORM D0000-WRITE-REPORTS
   PERFORM E0000-CLOSE-FILES
.
A0000-OPEN-FILES.
   PERFORM OPEN-FILE1
   PERFORM OPEN-FILE2
   PERFORM OPEN-FILE3
.
B0000-VALIDATE-CONTENTS.
   IF REC NOT EQUAL SPACES
       SET GOOD-REC TO TRUE
   END-IF
.
C0000-PROCESS-DATA.
   PERFORM VARYING X 
              FROM 1 BY 1
             UNTIL X > C1000-NUMBER-OF-RECS
      PERFORM DO-THE-THINGS
   END-PERFORM
.
C1000-DO-THE-THINGS.
   CONTINUE
.
D0000-WRITE-REPORTS.
   DISPLAY 'THIS IS MY REPOR'.
.
E0000-CLOSE-FILE.
   PERFORM CLOSE-FILE1
   PERFORM CLOSE-FILE2
   PERFORM CLOSE-FILE3
.

В моем магазине, как мы это делаем, все в основном начинается с буквы (отсюда A0000).Если A0000 вызывает что-то, этот абзац будет называться A1000.Если A1000 что-то называет, это будет A1100.Поэтому мы используем символ для обозначения вложения.поэтому у меня может быть что-то похожее на это:

PROCEDURE DIVSION.
0000-MAINLINE.
   PERFORM A0000-DO-SOMETHING
   PERFORM B0000-SHUTDOWN
.
A0000-DO-SOMETHING.
   PERFORM A1000-DO-MORE
   PERFORM A2000-VALIDATE-STUFF
.
A1000-DO-MORE.
   PERFORM A1100-DO-THING1
   PERFORM A1200-DO-THING2
   PERFORM A1300-DO-THING3
.

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

0 голосов
/ 18 мая 2018

Названия абзацев являются только метками.Вы можете использовать любой формат, который вам нравится.Однако, чтобы быть полезным, вы должны использовать какой-то стандарт - вас могут заставить следовать стандартам вашего магазина.Нумерация может отражать порядок, в котором вы их записали, порядок их выполнения, глубину вызова (para1 выполняет para2, выполняет para3 и т. Д.) Или вы можете использовать альфа-представление.До вас (и вашего босса).

...