Article image
Vagner Bellacosa
Vagner Bellacosa02/07/2025 03:20
Compartilhe

🧠 COBOL Mainframe: Diferença entre SECTION e PARAGRAPH – Conceitos, Uso e Boas Práticas

    Salve jovem padawan no artigo de hoje, irei comentar sobre: Logica Procedural Estruturada, um tema espinhento, que confunde novatos e alguns veteranos também, pois seu uso não é normatizado, uns usam, outros não. As Boas Práticas recomendam, porém, nem todos cumprem.

    Mesmo quando solicitamos explicações a Jedi, muitos se confundem e não conseguem explicar de forma clara, inclusive, sinto este problema com minhas turmas nos cursos que ministro, surgem inúmeras dúvidas no decorrer das classes.

    Em linhas gerais, a Section surgiu como ferramenta auxiliar para minimizar os danos da Primeira Crise de Softwares, nos idos anos 70 do século passado. Epoca em que os pioneiros da codificação lidavam com código gerados nos anos 60, que no decorrer dos anos seguintes incentivaram o DOWNSIZE e o RIGHTSIZE, tema para outro artigo.

    Naquela época o desenvolvimento de programas COBOL, utilizava-se da Lógica Imperativa, gerando grandes monólitos complexos, abusando de saltos GO TO e gerando códigos complexos, monstruosos e apelidados de Spaghetti Code, devido à complexidade na manutenção e de difícil entendimento, seja na leitura, seja no Teste de Mesa e gerando grandes dores de cabeça ao desenvolvedor. Muitas vezes até o próprio criador se via as aranhas para corrigir BUGs e ABENDS.

    Em COBOL, a clareza da estrutura do código é uma das características mais marcantes da linguagem. Mas para quem está começando, é comum surgir a dúvida: qual é a real diferença entre uma SECTION e um PARAGRAPH? Vamos descomplicar isso agora mesmo! Siga o fio.

    🔍 O que são SECTIONS e PARAGRAPHS?

    📌 SECTION

    Uma SECTION é uma subdivisão lógica de uma DIVISION, neste artigo me deterei na PROCEDURE DIVISION, divisão onde toda a lógica esta desenvolvida. Ela organiza grupos de parágrafos relacionados em blocos coesos. Cada SECTION pode conter vários PARAGRAPHs.

    • Possibilita agrupar funcionalidades ou tarefas relacionadas.
    • Em instalações bancarias incluem Restart, Tratamento de Erros, LOGs, Calculo de Data, Acesso Ă  Database, arquivos QSAM e VSAM, Arquitetura, Segurança auxiliada pelo RACF,
    • Torna a leitura fácil e ajuda na inclusĂŁo de novas funcionalidades no ponto certo
    • Usada principalmente em DIVISIONS como ENVIRONMON DIVISION, DATA DIVISION e PROCEDURE DIVISION.

    📌 PARAGRAPH

    Um PARAGRAPH é uma unidade menor em uma SECTION. Ele representa um conjunto de instruções COBOL que executam uma tarefa específica.

    • Pode ser chamado com a instrução PERFORM.
    • Utilizadas em chamadas Outline
    • Auxiliando em laços de repetição UNTIL, VARYING e TIMES
    • Criando blocos com vários parágrafos aninhados utilizando THRU
    • Com Entrada, Processamento e SaĂ­da
    • Modularizando processos
    • Ideal para modularização, clareza e reutilização.
    • Como boa prática recomendam-se nome claros, entendiveis e sequencias. Exemplo: R001-OPEN-FILE001, R002-OPEN-FILE002, R003-READ-FILE001

    🔊 Aviso aos navegantes

    Usar o GO TO não é proibido, mas bagunça o entendido e quando mãos menos hábeis utilizam tornam o código de difícil entendimento.

    Identar o cĂłdigo auxilia visualmente o entendimento do programa, lembre-se o COBOL foi desenvolvido para auxiliar a Leitura Natural.

    Use Bugs Traps para capturar situações não previstas

    A partir do COBOL II, surgiram os terminadores de escopo, sua função não é apenas mais batuque de teclado, permitem auxiliar na leitura de código para Humanos, use e abuse. O que é Terminador de Escopo? São os comandos END-IF, END-READ, END-PERFORM, END-EVALUATE, sempre um END-comando.

    Importante nada de usar nomes herméticos, que nada agregam, seja obvio e claro. Nada de termos cabalístico, que somente o criador entenda, às vezes nem ele.

    🛠 Como funciona na prática?

    Qual o segredo dos seus uso? Lembre-se um programa COBOL é escrito TOP-DOWN, onde o ponteiro vai executando sequencialmente cada instrução, efetuando saltos com retorno via PERFORM e saltos descontrolados/sem retorno via GO TO.

    Mais fácil mostrar um pequeno programa exemplo com ponto de entrada, saltos, retornos e saída.

    âś… Estrutura de exemplo com SECTION e PARAGRAPH

    IDENTIFICATION DIVISION.
    PROGRAM-ID. EXEMPLO-SECTION.
    AUTHOR. VAGNER BELLACOSA.                                                
    DATE-WRITTEN. 01/07/25 @ 22:20:00.                                       
    DATE-COMPILED. 2025-07-01.                                               
    INSTALLATION. INEFE.                                                     
    SECURITY. Programa exemplo de Section e Paragraph    
    
    ENVIRONMENT DIVISION.
    
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 WS-NOME         PIC A(30).
    01 WS-MENSAGEM     PIC A(50).
    
    PROCEDURE DIVISION.
    INICIO-SECTION.
      INICIO-PARAGRAPH.
          DISPLAY "Digite seu nome:".
          ACCEPT WS-NOME.
          PERFORM MONTAR-MENSAGEM.
          PERFORM MOSTRAR-MENSAGEM.
          STOP RUN.
    
    MONTAGEM-SECTION.
      MONTAR-MENSAGEM.
          MOVE "Olá, " TO WS-MENSAGEM.
          STRING WS-MENSAGEM DELIMITED BY SPACE,
                 WS-NOME DELIMITED BY SPACE
                 INTO WS-MENSAGEM.
    
    MOSTRAR-SECTION.
      MOSTRAR-MENSAGEM.
          DISPLAY WS-MENSAGEM.
    

    📊 O que acontece aqui?

    • INICIO-SECTION Ă© uma SECTION que contĂ©m o parágrafo INICIO-PARAGRAPH e Ă© o piloto do programa, onde todos os paragrafos sĂŁo chamados e contĂ©m a saĂ­da normal atravĂ©s do comando STOP RUN.
    • MONTAGEM-SECTION e MOSTRAR-SECTION organizam logicamente o que seria um "mĂłdulo" da lĂłgica: montagem e exibição da mensagem, sendo chamados e executados na ordem informada na INICIO-SECTION.
    • Dentro das SECTIONS, os PARAGRAPHs realizam tarefas especĂ­ficas (modularizadas com PERFORM).

    💡 Boas práticas

    âś… Quando usar SECTION?

    • Em programas grandes ou complexos, onde faz sentido agrupar parágrafos por responsabilidade.
    • Quando precisa de maior legibilidade e separação por contexto lĂłgico.
    • Adotar a arquitetura da instalação onde o programa esta sendo desenvolvido.
    • Facilitar a inclusĂŁo de novas funcionalidades sem afetar o programa inteiro.

    âś… Quando usar sĂł PARAGRAPHs?

    • Em programas simples ou curtos, a SECTION pode ser omitida (embora nĂŁo recomendável em ambientes de produção complexos).
    • Em chamadas Outlines, ou seja, quando desviamos o ponteiro da execução para outras partes do codigo e necessitando retornar para a instrução a seguir da chamada PERFORM.
    • Deixa o Monolito mais claro e com divisĂŁo de tarefas
    • Exemplo válido:
    PROCEDURE DIVISION.
    INICIO.
      DISPLAY "Olá, mundo".
      STOP RUN.
    

    đź§­ Dicas para usar melhor

    image

    | Situação | Recomendação |

    |-----------------------------------------------------|-----------------------------------------------------------|

    | Modularização de lógica | Crie PARAGRAPHs com nomes claros |

    | Agrupamento funcional (mĂłdulos) | Use SECTIONS com nomes descritivos |

    | Melhor navegação no código | Padronize a estrutura: SECTION > PARAGRAPH |

    | Para testes e manutenção futuros | PREFIRA sempre dividir logicamente com SECTIONs |

    | Acesso sub-programas CALL | Inicialize as variaveis e valide o retorno |

    | Database | Queries e validação do SQLCODE |

    | Arquivos QSAM e VSAM | Validando o File-Status |

    âś… ConclusĂŁo

    Em COBOL, a organização é essencial para legibilidade e manutenção. SECTIONs agrupam lógica de alto nível, enquanto PARAGRAPHs são os blocos executáveis. Saber a diferença e usar bem ambos é o primeiro passo para escrever códigos COBOL mais limpos, modulares e sustentáveis.

    O códgo desenvolvido tem previsão de Longa vida, por isso, muitas pessoas irão codificar, seja em manutenção evolutiva ou corretiva, por isso clareza é essencial, pense na situação de ser acionado na madrugada para corrigir um programada abendado, que esta prendendo todo o processamento Batch. Mais estruturado, mais rapido é a correção.

    Espero ter ajudado e deixe num comentário uma situação de abend em programa legado, como era o código, as dificuldades em entender e solucionar esse bug. Garanto com SECTION e PARAGRAPHs bem estruturados foi muito mais suave.

    Compartilhe
    Comentários (1)
    DIO Community
    DIO Community - 02/07/2025 15:29

    Vagner, sua análise sobre a diferença entre SECTION e PARAGRAPH em COBOL foi excelente! Você conseguiu esclarecer de forma prática e didática a importância dessas duas estruturas na organização do código, destacando como elas ajudam na modularização e na clareza do desenvolvimento.

    A explicação sobre o histórico do COBOL e o impacto do uso de SECTION e PARAGRAPH no código foi muito enriquecedora. Além disso, seu exemplo prático ajudou a visualizar como essas estruturas são aplicadas na prática, especialmente em cenários de grande complexidade, como os que encontramos em ambientes mainframe.

    Na sua opinião, qual a maior vantagem de se adotar SECTION e PARAGRAPH estruturados em projetos de COBOL em empresas de grande porte, como bancos e grandes corporações?