UC02840

Programação COBOL

Sintaxe, file handling, mainframe legacy

Curso profissional · 25h · Linguagem business

Plano

  1. COBOL — contexto e mercado
  2. Setup (GnuCOBOL)
  3. Estrutura de um programa
  4. Tipos e PICTURE
  5. Estruturas de controlo
  6. Ficheiros sequenciais
  7. Subprograms e CALL
  8. Mainframe básico

Bloco 1 · Contexto

Porquê aprender COBOL em 2026?

  • 220 mil milhões de linhas ainda em produção (estimativa).
  • 80% das transações de cartões de crédito passam por COBOL.
  • 70% dos bancos mundiais correm em mainframe COBOL.
  • Programadores escassos — salários muito altos.
  • Segurança no emprego: legados que não vão a lado nenhum.

Linguagem dos anos 60 mas ainda essencial em finança, seguros, governo.

Onde se usa COBOL

  • Bancos: core banking, processamento batch.
  • Seguros: cálculo de apólices, sinistros.
  • Governo: segurança social, impostos.
  • Aviação: reservas, scheduling.
  • Retail: gestão de stocks, payroll.

IBM mainframes (z/OS), Unisys, NEC.

Setup — GnuCOBOL

# Ubuntu/Debian
sudo apt install gnucobol

# Mac
brew install gnucobol

# Verificar
cobc --version

GnuCOBOL compila para C, depois para binário. Permite aprender sem mainframe.

IDE: OpenCobolIDE (Linux/Mac/Win) ou VSCode + COBOL extension.

Hello World

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO-WORLD.
       
       PROCEDURE DIVISION.
           DISPLAY "Olá mundo!".
           STOP RUN.
cobc -x hello.cob -o hello
./hello

Atenção às colunas — COBOL tem formato fixo:

  • Colunas 1-6: numeração (opcional).
  • Coluna 7: indicador (*=comentário, -=continuação).
  • Colunas 8-11: Area A (DIVISIONS, SECTIONS, paragraphs).
  • Colunas 12-72: Area B (statements).

Bloco 2 · Estrutura

4 Divisions obrigatórias

       IDENTIFICATION DIVISION.
       PROGRAM-ID. EXEMPLO.
       AUTHOR. EU.
       
       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SOURCE-COMPUTER. PC.
       OBJECT-COMPUTER. PC.
       
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-NOME PIC X(50).
       01 WS-IDADE PIC 9(3).
       
       PROCEDURE DIVISION.
           DISPLAY "Nome: " WS-NOME.
           STOP RUN.

Divisions explicadas

  • IDENTIFICATION: nome do programa, autor.
  • ENVIRONMENT: configuração (computadores, ficheiros físicos).
  • DATA: variáveis e estruturas.
  • PROCEDURE: a lógica do programa.

Estrutura rígida — sempre nesta ordem.

Bloco 3 · Tipos e PICTURE

PIC clause

01 WS-NOME       PIC X(20).        * 20 chars
01 WS-IDADE      PIC 9(3).         * 3 dígitos (até 999)
01 WS-SALARIO    PIC 9(7)V99.      * 7 inteiros + 2 decimais
01 WS-INICIAL    PIC X.            * 1 char
01 WS-PONTOS     PIC ZZ9.          * 3 dígitos com zeros suprimidos
01 WS-NIF        PIC 9(9).         * 9 dígitos

X = alfanumérico, 9 = numérico, V = decimal implícito, Z = supressão de zero.

Grupos (records)

01 WS-CLIENTE.
   05 WS-NOME       PIC X(30).
   05 WS-MORADA.
      10 WS-RUA     PIC X(40).
      10 WS-CIDADE  PIC X(20).
      10 WS-CP      PIC 9(4)-9(3).
   05 WS-IDADE      PIC 9(3).

Níveis: 01 = record principal, 02-49 = subgrupos.

Literais e MOVE

       WORKING-STORAGE SECTION.
       01 WS-NOME    PIC X(20).
       01 WS-IDADE   PIC 9(3).
       
       PROCEDURE DIVISION.
           MOVE "Ana" TO WS-NOME.
           MOVE 25 TO WS-IDADE.
           
           DISPLAY "Nome: " WS-NOME.
           DISPLAY "Idade: " WS-IDADE.
           
           STOP RUN.

MOVE A TO B = atribuir A em B.

Bloco 4 · Aritmética

Operações

       01 WS-A PIC 9(5) VALUE 100.
       01 WS-B PIC 9(5) VALUE 30.
       01 WS-RES PIC 9(5).
       
       PROCEDURE DIVISION.
           ADD WS-A TO WS-B GIVING WS-RES.        * A + B
           SUBTRACT WS-B FROM WS-A GIVING WS-RES. * A - B
           MULTIPLY WS-A BY WS-B GIVING WS-RES.   * A * B
           DIVIDE WS-A BY WS-B GIVING WS-RES.     * A / B
           
           COMPUTE WS-RES = (WS-A + WS-B) * 2.    * fórmulas

COMPUTE permite expressões aritméticas normais.

ACCEPT — input

       01 WS-NOME PIC X(30).
       01 WS-IDADE PIC 9(3).
       
       PROCEDURE DIVISION.
           DISPLAY "Nome: ".
           ACCEPT WS-NOME.
           
           DISPLAY "Idade: ".
           ACCEPT WS-IDADE.
           
           DISPLAY "Olá " WS-NOME ", " WS-IDADE " anos".
           STOP RUN.

Bloco 5 · Controlo

IF / ELSE

       IF WS-IDADE > 18
           DISPLAY "Adulto"
       ELSE
           DISPLAY "Menor"
       END-IF.
       
       IF WS-NOTA >= 18
           DISPLAY "Excelente"
       ELSE IF WS-NOTA >= 14
           DISPLAY "Bom"
       ELSE IF WS-NOTA >= 10
           DISPLAY "Suficiente"
       ELSE
           DISPLAY "Reprovado"
       END-IF.

EVALUATE (switch)

       EVALUATE WS-DIA
           WHEN 1 THRU 5
               DISPLAY "Dia útil"
           WHEN 6 THRU 7
               DISPLAY "Fim-de-semana"
           WHEN OTHER
               DISPLAY "Inválido"
       END-EVALUATE.

PERFORM (loops + chamada de paragraph)

       * Chamar paragraph como função
       PERFORM SAUDAR.
       
       * Loop N vezes
       PERFORM 10 TIMES
           DISPLAY "Olá"
       END-PERFORM.
       
       * Loop condicional
       PERFORM UNTIL WS-CONTADOR > 10
           DISPLAY WS-CONTADOR
           ADD 1 TO WS-CONTADOR
       END-PERFORM.
       
       * For loop
       PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 10
           DISPLAY WS-I
       END-PERFORM.

Bloco 6 · Paragraphs

Modularização

       PROCEDURE DIVISION.
       MAIN-PARAGRAPH.
           PERFORM INICIALIZAR.
           PERFORM PROCESSAR.
           PERFORM FINALIZAR.
           STOP RUN.
       
       INICIALIZAR.
           DISPLAY "Início".
           MOVE 0 TO WS-CONTADOR.
       
       PROCESSAR.
           PERFORM 5 TIMES
               ADD 1 TO WS-CONTADOR
               DISPLAY WS-CONTADOR
           END-PERFORM.
       
       FINALIZAR.
           DISPLAY "Fim. Total: " WS-CONTADOR.

PERFORM chama paragraph (como função sem args).

Bloco 7 · Ficheiros sequenciais

Definir ficheiro

       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
           SELECT CLIENTES-FILE 
               ASSIGN TO "clientes.dat"
               ORGANIZATION IS LINE SEQUENTIAL.
       
       DATA DIVISION.
       FILE SECTION.
       FD CLIENTES-FILE.
       01 CLIENTE-REC.
          05 NOME PIC X(30).
          05 IDADE PIC 9(3).
          05 SALARIO PIC 9(7)V99.

Ler ficheiro

       WORKING-STORAGE SECTION.
       01 WS-EOF PIC X VALUE "N".
       
       PROCEDURE DIVISION.
           OPEN INPUT CLIENTES-FILE.
           
           PERFORM UNTIL WS-EOF = "Y"
               READ CLIENTES-FILE
                   AT END MOVE "Y" TO WS-EOF
                   NOT AT END
                       DISPLAY NOME ", " IDADE " anos"
               END-READ
           END-PERFORM.
           
           CLOSE CLIENTES-FILE.
           STOP RUN.

Escrever ficheiro

       OPEN OUTPUT CLIENTES-FILE.
       
       MOVE "Ana Silva" TO NOME.
       MOVE 25 TO IDADE.
       MOVE 1500.00 TO SALARIO.
       WRITE CLIENTE-REC.
       
       MOVE "Bruno Costa" TO NOME.
       MOVE 32 TO IDADE.
       MOVE 2200.00 TO SALARIO.
       WRITE CLIENTE-REC.
       
       CLOSE CLIENTES-FILE.

Modos: INPUT (ler), OUTPUT (escrever), I-O (ambos), EXTEND (append).

Bloco 8 · CALL

Subprograms

SUBPROG.cob:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. SUBPROG.
       
       DATA DIVISION.
       LINKAGE SECTION.
       01 LK-A PIC 9(5).
       01 LK-B PIC 9(5).
       01 LK-RES PIC 9(5).
       
       PROCEDURE DIVISION USING LK-A LK-B LK-RES.
           COMPUTE LK-RES = LK-A + LK-B.
           GOBACK.

CALL

       WORKING-STORAGE SECTION.
       01 WS-A PIC 9(5) VALUE 10.
       01 WS-B PIC 9(5) VALUE 20.
       01 WS-RES PIC 9(5).
       
       PROCEDURE DIVISION.
           CALL "SUBPROG" USING WS-A WS-B WS-RES.
           DISPLAY "Resultado: " WS-RES.
           STOP RUN.

Compilar separadamente e linkar:

cobc -m subprog.cob
cobc -x main.cob -o main
./main

Bloco 9 · Boas práticas

Convenções

  • Prefix WS- em working-storage.
  • Prefix WS-EOF ou WS-FIM para flags.
  • Paragraph names descritivos: LER-CLIENTE, PROCESSAR-DADOS.
  • MAIÚSCULAS sempre (convenção forte).
  • VALUE para inicializar.
       01 WS-CONTADOR PIC 9(5) VALUE ZERO.
       01 WS-EOF      PIC X    VALUE "N".
       01 WS-MAX      PIC 9(3) VALUE 100.

Mainframe na prática

  • z/OS é o SO dos mainframes IBM.
  • JCL (Job Control Language) lança jobs batch.
  • CICS = transaction processing.
  • DB2 = base de dados.
  • VSAM = ficheiros indexados.

COBOL hoje é frequentemente parte de stack:

  • COBOL (lógica) + DB2 (dados) + CICS (transações) + JCL (jobs).

UC02840 · resumo

  • COBOL é antigo mas omnipresente em bancos, seguros, governo.
  • Sintaxe rígida com 4 DIVISIONS, formato em colunas.
  • PICTURE clause define tipo e tamanho.
  • MOVE, ADD, COMPUTE para manipulação.
  • PERFORM para loops e chamada de paragraphs.
  • FD + SELECT + OPEN/READ/WRITE/CLOSE para ficheiros.
  • CALL para subprograms.
  • Empregabilidade altíssima — escassez de programadores COBOL.

NOTAS DO PROFESSOR 📖 Porquê aprender uma linguagem dos anos 60 O instinto do formando será perguntar para que serve aprender COBOL em 2026. Estes números respondem: o COBOL não desapareceu, está embebido na infraestrutura crítica do mundo financeiro e move biliões de transações por dia. O argumento mais forte é o económico — a geração que escreveu este código está a reformar-se e há uma escassez aguda de quem o saiba manter, o que se traduz em segurança de emprego e salários acima da média. 🗣️ Pontos a desenvolver oralmente • Enquadrar o COBOL como oportunidade de nicho, não como tecnologia de ponta • Explicar o fenómeno da reforma da geração original e a escassez de talento • Dar exemplos do quotidiano que correm sobre COBOL (Multibanco, ATM, salários)

NOTAS DO PROFESSOR 📖 Os setores onde o COBOL vive Este slide concretiza onde o COBOL está, e o padrão é claro: setores de alta criticidade, grande volume e baixa tolerância a erro. Bancos, seguros e governo não reescrevem sistemas que funcionam há décadas só porque a tecnologia é antiga — o risco e o custo seriam enormes. Convém transmitir que trabalhar com COBOL é trabalhar com a espinha dorsal de instituições, o que exige rigor e responsabilidade. 🗣️ Pontos a desenvolver oralmente • Explicar porque setores críticos preferem estabilidade a modernidade • Relacionar processamento "batch" com folhas de pagamento e fecho de contas • Mencionar o ambiente mainframe (z/OS) como o lar natural do COBOL

NOTAS DO PROFESSOR 📖 GnuCOBOL: aprender sem mainframe A grande barreira histórica de aprender COBOL era o acesso a um mainframe. O GnuCOBOL elimina esse obstáculo: corre num portátil normal, compilando o COBOL para C e depois para binário. Isto permite ao formando praticar toda a sintaxe e a lógica sem custos. Convém deixar claro que, embora o ambiente seja diferente do mainframe real, a linguagem que se aprende é a mesma que corre em produção. 🗣️ Pontos a desenvolver oralmente • Garantir que todos têm o cobc instalado e funcional antes de avançar • Explicar que GnuCOBOL compila para C como passo intermédio • Recomendar uma IDE/extensão para facilitar a edição com formato em colunas

NOTAS DO PROFESSOR 📖 Hello World e o formato em colunas O primeiro programa parece trivial, mas esconde a particularidade mais desconcertante do COBOL para quem vem de linguagens modernas: o formato de colunas fixas, herança dos cartões perfurados. O formando tem de perceber que a posição do texto na linha tem significado — Area A para divisões e parágrafos, Area B para instruções. Este é o erro número um dos principiantes e merece atenção desde o primeiro minuto. 🗣️ Pontos a desenvolver oralmente • Explicar a origem histórica do formato em colunas (cartões perfurados) • Distinguir Area A (colunas 8-11) de Area B (colunas 12-72) com exemplos • Mostrar o ponto final a terminar instruções como detalhe sintático essencial

NOTAS DO PROFESSOR 📖 As quatro DIVISIONS obrigatórias A estrutura do COBOL é rígida e sempre igual: quatro divisões, sempre pela mesma ordem. Esta rigidez, que a princípio parece burocrática, é na verdade uma vantagem pedagógica — qualquer programa COBOL tem o mesmo esqueleto, pelo que ler código alheio é mais fácil. Vale a pena fazer o formando memorizar a sequência IDENTIFICATION, ENVIRONMENT, DATA, PROCEDURE como o mapa de qualquer programa. 🗣️ Pontos a desenvolver oralmente • Memorizar a ordem fixa das quatro divisões com uma mnemónica • Explicar o papel de cada uma com uma frase curta (quem, onde, o quê, como) • Mostrar que a separação dados/lógica é mais marcada que em linguagens modernas

NOTAS DO PROFESSOR 📖 O papel de cada DIVISION Aprofundando o slide anterior, é útil que o formando perceba a lógica por trás da separação. O COBOL força a declarar tudo antes de o usar: a ENVIRONMENT descreve o mundo exterior (computadores, ficheiros físicos), a DATA descreve todos os dados, e só a PROCEDURE contém ação. Esta disciplina, embora verbosa, torna os programas muito explícitos sobre o que manipulam, algo valorizado em sistemas que têm de durar décadas. 🗣️ Pontos a desenvolver oralmente • Contrastar a separação estrita dados/lógica do COBOL com linguagens flexíveis • Explicar para que serve a ENVIRONMENT DIVISION na prática (ligar ficheiros) • Realçar que esta verbosidade serve a legibilidade e a manutenção a longo prazo

NOTAS DO PROFESSOR 📖 A PICTURE clause: o coração do COBOL A cláusula PIC é o conceito mais distintivo do COBOL e merece tempo. Em vez de tipos abstratos, o COBOL define o formato exato de cada campo: quantos dígitos, onde fica a vírgula decimal, como se apresentam os zeros. O ponto crucial é o V (vírgula decimal implícita), que explica porque o COBOL é insuperável em cálculos financeiros exatos, sem os erros de arredondamento da vírgula flutuante de outras linguagens. 🗣️ Pontos a desenvolver oralmente • Explicar a diferença entre X (alfanumérico) e 9 (numérico) com exemplos • Detalhar o V como vírgula implícita e a sua importância na precisão monetária • Mostrar o Z (supressão de zeros) como formatação para apresentação

NOTAS DO PROFESSOR 📖 Grupos e a hierarquia por números de nível Os números de nível (01, 05, 10...) são a forma de o COBOL estruturar dados, equivalente aos campos de um registo ou às propriedades de um objeto noutras linguagens. O conceito-chave é a hierarquia: um campo de nível superior (01) agrupa os subcampos com números maiores. Isto reflete diretamente a estrutura de um registo de ficheiro ou de base de dados, que é precisamente o que estes programas processam. 🗣️ Pontos a desenvolver oralmente • Explicar a convenção de saltar números de nível (01, 05, 10) e porquê • Relacionar a estrutura de grupo com uma linha de uma tabela/ficheiro • Mostrar que se pode referir o grupo inteiro ou cada subcampo isoladamente

NOTAS DO PROFESSOR 📖 MOVE: a atribuição em COBOL O COBOL não usa o sinal de igual para atribuir; usa o verbo MOVE, fiel à sua filosofia de ler como inglês. A ordem é importante e contraintuitiva para quem vem de outras linguagens: MOVE origem TO destino. Convém alertar que o MOVE faz mais do que copiar — adapta o dado ao formato PIC do destino, truncando ou preenchendo conforme necessário, o que pode surpreender se os tamanhos não coincidirem. 🗣️ Pontos a desenvolver oralmente • Insistir na ordem MOVE origem TO destino (ao contrário do = de outras linguagens) • Explicar que o MOVE ajusta ao PIC do destino (trunca ou preenche) • Notar a verbosidade tipo-inglês como marca de identidade do COBOL

NOTAS DO PROFESSOR 📖 Aritmética: verbos ou COMPUTE O COBOL oferece duas formas de calcular: os verbos verbosos (ADD, SUBTRACT, MULTIPLY, DIVIDE...GIVING) e o COMPUTE, que aceita expressões matemáticas normais. Na prática, o COMPUTE é quase sempre mais legível para fórmulas com vários termos, enquanto os verbos individuais aparecem muito em código legado antigo. O formando deve saber ler ambos, porque vai encontrá-los misturados em sistemas reais. 🗣️ Pontos a desenvolver oralmente • Comparar a verbosidade de ADD...GIVING com a concisão de COMPUTE • Explicar a cláusula GIVING (guarda o resultado sem alterar os operandos) • Recomendar COMPUTE para fórmulas, mas saber ler os verbos no código antigo

NOTAS DO PROFESSOR 📖 ACCEPT e DISPLAY: entrada e saída O par ACCEPT/DISPLAY é a forma mais simples de interação em COBOL: DISPLAY escreve no ecrã, ACCEPT lê o que o utilizador introduz. Convém contextualizar que, no mundo real do mainframe, a maioria do COBOL é processamento batch (sem interação humana direta) ou usa ecrãs CICS, mas ACCEPT/DISPLAY é perfeito para aprender e testar. O dado lido é ajustado ao PIC da variável de destino. 🗣️ Pontos a desenvolver oralmente • Posicionar ACCEPT/DISPLAY como ferramenta de aprendizagem, não o uso real típico • Avisar que o ACCEPT respeita o tamanho e tipo definidos no PIC • Antecipar que o trabalho real em mainframe é mais batch e ficheiros do que ecrã

NOTAS DO PROFESSOR 📖 IF/ELSE e a importância do END-IF A lógica condicional do COBOL é familiar, mas há um detalhe técnico que evita muitos bugs: o terminador de escopo END-IF. Em código moderno, fechar sempre os IF com END-IF (em vez de depender do ponto final) torna o código mais robusto e legível, especialmente em condições aninhadas. Vale a pena mostrar o aninhamento ELSE IF como forma de tratar vários escalões, padrão comuníssimo em regras de negócio (notas, escalões fiscais). 🗣️ Pontos a desenvolver oralmente • Defender o uso sistemático de END-IF em vez de terminar por ponto final • Mostrar o aninhamento de escalões como padrão típico de regras de negócio • Relembrar a diferença entre o ponto final que termina e o END-IF que delimita

NOTAS DO PROFESSOR 📖 EVALUATE: o switch poderoso do COBOL O EVALUATE é o equivalente ao switch/case, mas mais expressivo: suporta intervalos (THRU) e o caso por omissão (WHEN OTHER). Para regras de negócio com muitos casos discretos — dias da semana, códigos de estado, escalões — é mais limpo e legível do que uma cascata de IF/ELSE. O formando deve aprender a escolher entre IF e EVALUATE conforme a clareza que cada um traz ao problema concreto. 🗣️ Pontos a desenvolver oralmente • Mostrar o THRU para definir intervalos de valores num só WHEN • Sublinhar a importância do WHEN OTHER para apanhar casos não previstos • Dar critério para escolher entre vários IF aninhados e um EVALUATE

NOTAS DO PROFESSOR 📖 PERFORM: o canivete suíço do COBOL O verbo PERFORM é provavelmente o mais versátil do COBOL e merece atenção redobrada. Faz duas coisas distintas: chama um parágrafo (como uma função) e cria ciclos (TIMES, UNTIL, VARYING). É essencial que o formando não confunda os dois usos. Note-se que o PERFORM...UNTIL testa a condição no início, ao contrário do "until" de outras linguagens — uma subtileza que gera erros se não for compreendida. 🗣️ Pontos a desenvolver oralmente • Separar claramente os dois papéis do PERFORM: chamar parágrafo e fazer ciclo • Avisar que PERFORM UNTIL testa a condição antes de cada iteração • Mapear PERFORM VARYING ao "for" clássico de outras linguagens

NOTAS DO PROFESSOR 📖 Parágrafos e a modularização clássica Os parágrafos são a unidade de organização da PROCEDURE DIVISION e o padrão típico, ilustrado aqui, é um parágrafo principal que orquestra chamadas a outros (inicializar, processar, finalizar). Esta estrutura torna programas longos legíveis e é a marca de código COBOL bem escrito. O ponto a clarificar é que os parágrafos não recebem argumentos — partilham os dados globais da WORKING-STORAGE, ao contrário das funções modernas. 🗣️ Pontos a desenvolver oralmente • Mostrar o padrão main que orquestra inicializar/processar/finalizar • Explicar que os parágrafos operam sobre dados globais, sem parâmetros • Defender a divisão em parágrafos pequenos e bem nomeados pela legibilidade

NOTAS DO PROFESSOR 📖 Definir um ficheiro: SELECT e FD O processamento de ficheiros é a razão de ser do COBOL, e configurá-lo exige dois passos em divisões diferentes: o SELECT (na ENVIRONMENT) liga o nome lógico ao ficheiro físico no disco, e o FD (na DATA) descreve a estrutura de cada registo. É aqui que a estrutura rígida das divisões ganha sentido prático. ORGANIZATION IS LINE SEQUENTIAL indica um ficheiro de texto simples, o mais fácil para aprender. 🗣️ Pontos a desenvolver oralmente • Explicar a ponte SELECT (nome lógico) para o ficheiro físico no disco • Mostrar como o FD descreve o layout exato de cada registo do ficheiro • Distinguir LINE SEQUENTIAL (texto) de outras organizações (indexada, VSAM)

NOTAS DO PROFESSOR 📖 Ler um ficheiro até ao fim Este é o padrão de leitura mais importante de toda a UC, porque é o que o COBOL faz milhões de vezes por dia no mundo real. A estrutura é sempre a mesma: OPEN, ciclo de READ até ao fim, CLOSE. O elemento central é a flag de fim de ficheiro (WS-EOF) controlada pela cláusula AT END do READ. Convém treinar bem este idioma, pois é a espinha dorsal de qualquer processamento batch. 🗣️ Pontos a desenvolver oralmente • Percorrer o padrão OPEN / loop READ / CLOSE como receita reutilizável • Explicar a flag WS-EOF e o papel de AT END / NOT AT END • Frisar a obrigação de CLOSE no fim para garantir a integridade dos dados

NOTAS DO PROFESSOR 📖 Escrever ficheiros e os modos de abertura A escrita segue um padrão complementar à leitura: preencher os campos do registo com MOVE e depois WRITE. O ponto crítico a alertar é o modo de abertura: OUTPUT apaga e reescreve o ficheiro do zero, enquanto EXTEND acrescenta ao existente. Confundir os dois pode destruir dados — uma lição de responsabilidade que vale ouro em sistemas reais de bancos e seguros. 🗣️ Pontos a desenvolver oralmente • Avisar com ênfase que OUTPUT apaga o conteúdo anterior do ficheiro • Distinguir os quatro modos (INPUT, OUTPUT, I-O, EXTEND) e quando usar cada um • Mostrar a sequência MOVE para os campos seguida de WRITE do registo

NOTAS DO PROFESSOR 📖 Subprogramas e a LINKAGE SECTION Os subprogramas permitem dividir sistemas grandes em peças reutilizáveis e compiláveis em separado. A novidade-chave deste slide é a LINKAGE SECTION: é onde se declaram os dados que vêm de fora, do programa que chama. Note-se também o GOBACK em vez de STOP RUN — o subprograma devolve o controlo a quem o chamou, em vez de terminar a aplicação inteira. Esta distinção é fundamental e fonte de erros comuns. 🗣️ Pontos a desenvolver oralmente • Explicar a LINKAGE SECTION como a interface de dados com o programa chamador • Contrastar GOBACK (devolve controlo) com STOP RUN (termina tudo) • Justificar a compilação separada como base da modularidade em sistemas grandes

NOTAS DO PROFESSOR 📖 CALL: invocar subprogramas com USING O verbo CALL é o que liga os programas: invoca o subprograma e passa-lhe dados através da cláusula USING. O conceito a fixar é a correspondência posicional — os argumentos do USING no chamador alinham-se, por ordem, com os itens da LINKAGE SECTION do subprograma. Em COBOL, esta passagem é tipicamente por referência, pelo que alterações no subprograma refletem-se no chamador, como acontece com o resultado neste exemplo. 🗣️ Pontos a desenvolver oralmente • Explicar a correspondência posicional entre USING e LINKAGE SECTION • Esclarecer que a passagem é por referência (o subprograma altera o original) • Mostrar o processo de compilar o subprograma (-m) e o principal (-x) e linkar

NOTAS DO PROFESSOR 📖 Convenções: porque importam tanto no COBOL Em código que vive décadas e passa por muitas mãos, as convenções não são cosmética — são sobrevivência. Prefixar variáveis (WS-), nomear parágrafos descritivamente e inicializar com VALUE são hábitos que tornam o código legível para quem o herdar daqui a anos. As maiúsculas, herança histórica, mantêm-se por consistência. O formando deve interiorizar que escrever COBOL claro é um ato de respeito por quem vem a seguir. 🗣️ Pontos a desenvolver oralmente • Explicar a convenção de prefixos (WS-) e o que comunica ao leitor • Defender nomes de parágrafo descritivos como documentação viva • Enquadrar as convenções no contexto de código mantido por décadas

NOTAS DO PROFESSOR 📖 O COBOL não vive sozinho: o ecossistema mainframe Este slide dá a perspetiva profissional realista: na prática, ninguém usa COBOL isolado. Ele é uma peça de um stack mainframe onde o z/OS é o sistema operativo, o JCL lança os jobs, o CICS gere transações e o DB2 guarda os dados. O formando deve sair daqui a perceber que aprender COBOL é o primeiro passo de um percurso que inclui estas tecnologias vizinhas, todas elas também com escassez de profissionais. 🗣️ Pontos a desenvolver oralmente • Explicar o papel do JCL como o "lançador" dos programas batch • Distinguir processamento batch (JCL) de transacional online (CICS) • Posicionar COBOL como porta de entrada para todo o ecossistema mainframe

NOTAS DO PROFESSOR 📖 Síntese: uma competência de nicho com futuro Este resumo consolida a sintaxe aprendida e regressa ao argumento de abertura: a empregabilidade. A mensagem final a deixar é que o COBOL é uma aposta estratégica de carreira precisamente por ser antigo e impopular — há montanhas de código a manter e cada vez menos gente capaz de o fazer. Vale a pena encorajar os formandos a praticar com o GnuCOBOL e a encarar este conhecimento como um diferenciador raro no mercado. 🗣️ Pontos a desenvolver oralmente • Recapitular o esqueleto: divisões, PICTURE, MOVE/COMPUTE, PERFORM, ficheiros, CALL • Reforçar a lógica de mercado: pouca oferta de talento iguala maior procura e salário • Desafiar a continuar a praticar e a explorar o ecossistema mainframe associado