Translate

Mostrar mensagens com a etiqueta division. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta division. Mostrar todas as mensagens

domingo, 8 de julho de 2018

☕💣 OPERADOR, ANTES DE EXISTIR O COBOL EXISTIA A LÓGICA! — O SEGREDO QUE TRANSFORMA APRENDIZES EM MESTRES DO MAINFRAME

 

Bellacosa Mainframe e a logica de programação estruturada para mainframe

☕💣 OPERADOR, ANTES DE EXISTIR O COBOL EXISTIA A LÓGICA! — O SEGREDO QUE TRANSFORMA APRENDIZES EM MESTRES DO MAINFRAME

Por que tantos profissionais aprendem COBOL, mas poucos se tornam realmente programadores?

Existe uma crença muito comum entre iniciantes no universo Mainframe:

"Se eu decorar comandos COBOL, vou aprender a programar."

Mas a realidade é outra.

Um programador COBOL experiente sabe que a linguagem é apenas uma ferramenta.

O verdadeiro diferencial está na lógica.

Quando observamos um sistema bancário executando milhões de transações por dia, um processamento batch consolidando contas correntes ou um programa CICS consultando dados em tempo real, o que realmente está funcionando por trás das telas verdes não é COBOL.

É a lógica.

O COBOL apenas traduz essa lógica para o computador.

Por isso, antes de estudar comandos avançados, VSAM, DB2, MQ ou CICS, é fundamental compreender os pilares da programação.

E curiosamente esses mesmos pilares já existiam muito antes dos computadores modernos.


O que é um algoritmo no mundo Mainframe?

A definição clássica diz que algoritmo é uma sequência finita de passos para resolver um problema.

No Mainframe podemos enxergar um algoritmo como um JOB.

Observe:

Exemplo cotidiano

Preparar café.

  1. Colocar água.

  2. Adicionar pó.

  3. Aquecer.

  4. Coar.

  5. Servir.

Existe uma sequência.

Se invertermos os passos, o resultado não será o esperado.


Exemplo Mainframe

Processar folha de pagamento.

  1. Ler arquivo de funcionários.

  2. Ler tabela salarial.

  3. Calcular salário.

  4. Calcular impostos.

  5. Gerar relatório.

  6. Atualizar arquivo mestre.

Perceba:

Um programa COBOL nada mais é que uma sequência organizada de passos.

Isso é um algoritmo.


O algoritmo invisível que existe em todo JOB

Quando um operador submete um JCL:

//JOB001 JOB ...
//STEP01 EXEC PGM=LEFUNC
//STEP02 EXEC PGM=CALCSAL
//STEP03 EXEC PGM=RELATOR

O JCL é um algoritmo.

Ele determina:

  • O que executar.

  • Em qual ordem.

  • Quais dados utilizar.

  • Qual resultado produzir.

Sem lógica não existe processamento.


O conceito mais importante de toda programação

Todo programa responde a três perguntas:

O que entra?

Input.

O que acontece?

Processamento.

O que sai?

Output.


Exemplo COBOL

Imagine um programa que calcula a média de um aluno.

Entrada:

01 WS-NOTA1 PIC 9(3)V99.
01 WS-NOTA2 PIC 9(3)V99.

Processamento:

COMPUTE WS-MEDIA =
        (WS-NOTA1 + WS-NOTA2) / 2.

Saída:

DISPLAY "MEDIA = " WS-MEDIA.

Observe:

Entrada → Processamento → Saída

Esse modelo está presente em praticamente todos os sistemas Mainframe.


Tipos de dados: os tijolos da programação COBOL

Todo programa trabalha com dados.

No COBOL eles são definidos na DATA DIVISION.


Dados numéricos

Exemplos:

01 WS-IDADE PIC 999.
01 WS-SALARIO PIC 9(7)V99.

Utilizados para:

  • cálculos;

  • somatórios;

  • médias;

  • juros;

  • impostos.


Dados alfanuméricos

Exemplos:

01 WS-NOME PIC X(40).
01 WS-CPF  PIC X(11).

Utilizados para:

  • nomes;

  • documentos;

  • códigos;

  • mensagens.


Dados lógicos no COBOL

COBOL não possui BOOLEAN clássico como linguagens modernas.

Normalmente utilizamos:

88 CLIENTE-ATIVO VALUE 'S'.
88 CLIENTE-INATIVO VALUE 'N'.

Ou:

01 WS-STATUS PIC X.

   88 APROVADO VALUE 'A'.
   88 REPROVADO VALUE 'R'.

Esse recurso é extremamente utilizado em sistemas bancários.


Variáveis: os registradores da aplicação

Uma variável representa uma área de memória.

Exemplo:

01 WS-SALDO PIC S9(9)V99 COMP-3.

Durante a execução:

MOVE 1000 TO WS-SALDO.

Depois:

ADD 500 TO WS-SALDO.

Valor atual:

1500

A variável mudou.

Por isso ela recebe esse nome.


Constantes em COBOL

Valores fixos normalmente são definidos com VALUE.

01 WS-TAXA-JUROS PIC 9V999
   VALUE 0.125.

Ou:

01 WS-PI PIC 9V99999
   VALUE 3.14159.

O conceito é simples:

Uma constante não deve mudar.


MOVE: o comando mais utilizado do COBOL

Na apostila existe o conceito de atribuição.

No COBOL isso ocorre principalmente através do comando MOVE.

Exemplo:

MOVE 100 TO WS-SALDO.

Significa:

"Coloque o valor 100 dentro da variável."

Outro exemplo:

MOVE WS-NOME TO WS-NOME-CLIENTE.

Equivale à atribuição de uma variável para outra.


Entrada e saída de dados no Mainframe

Em linguagens acadêmicas encontramos:

Leia
Escreva

No COBOL encontramos:

READ
WRITE
DISPLAY
ACCEPT


Entrada de dados

Terminal:

ACCEPT WS-NOME.

Arquivo:

READ ARQ-CLIENTES

Saída de dados

Tela:

DISPLAY WS-NOME.

Arquivo:

WRITE REG-SAIDA.

Relatório:

WRITE LINHA-RELATORIO.

Operadores matemáticos no COBOL

O COBOL utiliza verbos muito próximos da linguagem humana.


Soma

ADD A TO B.

Subtração

SUBTRACT A FROM B.

Multiplicação

MULTIPLY A BY B.

Divisão

DIVIDE A INTO B.

Fórmulas complexas

COMPUTE WS-MEDIA =
       (WS-NOTA1 + WS-NOTA2) / 2.

O COMPUTE é um dos comandos mais poderosos da linguagem.


Operadores relacionais

São utilizados para comparar valores.


Igual

IF WS-IDADE = 18

Maior

IF WS-SALDO > 1000

Menor

IF WS-SALDO < 0

Diferente

IF WS-STATUS NOT = 'A'

O poder do IF

Todo sistema bancário depende de decisões.

A decisão é implementada através do IF.


Exemplo

IF WS-SALDO > 0
    DISPLAY "CONTA POSITIVA"
END-IF.

Exemplo bancário

IF WS-LIMITE > WS-VALOR-SAQUE
    PERFORM EFETUA-SAQUE
ELSE
    PERFORM NEGA-SAQUE
END-IF.

Observe:

O programa está tomando decisões.

Isso é lógica.


EVALUATE: o SWITCH/CASE do COBOL

Em outras linguagens existe SWITCH.

No COBOL moderno utilizamos:

EVALUATE WS-STATUS
   WHEN 'A'
      DISPLAY 'ATIVO'
   WHEN 'I'
      DISPLAY 'INATIVO'
   WHEN OTHER
      DISPLAY 'INVALIDO'
END-EVALUATE.

Muito comum em sistemas corporativos.


Estruturas de repetição no COBOL

Um dos conceitos mais importantes da programação.

Imagine um arquivo com 50 milhões de registros.

Como processar tudo?

Com laços de repetição.


PERFORM UNTIL

PERFORM UNTIL EOF = 'S'

   READ ARQ-CLIENTES
      AT END
         MOVE 'S' TO EOF
   END-READ

END-PERFORM.

Esse é provavelmente um dos padrões mais encontrados no Mainframe.


O algoritmo clássico de processamento batch

Observe a lógica utilizada em milhares de programas COBOL:

ABRIR ARQUIVOS

LER PRIMEIRO REGISTRO

ENQUANTO NÃO FOR FIM DO ARQUIVO

   PROCESSAR

   LER PRÓXIMO REGISTRO

FIM-ENQUANTO

FECHAR ARQUIVOS

Transformado para COBOL:

OPEN INPUT ARQ-CLIENTES

PERFORM UNTIL EOF = 'S'

   READ ARQ-CLIENTES
      AT END
         MOVE 'S' TO EOF
      NOT AT END
         PERFORM PROCESSA-REGISTRO
   END-READ

END-PERFORM

CLOSE ARQ-CLIENTES.

Esse padrão existe há décadas.

E continua executando boa parte da economia mundial.


A lógica por trás de CICS

Muitos acreditam que CICS é algo completamente diferente.

Mas a lógica é a mesma.

Entrada:

EXEC CICS RECEIVE

Processamento:

IF
EVALUATE
COMPUTE

Saída:

EXEC CICS SEND

Novamente:

Entrada → Processamento → Saída.


O segredo dos grandes programadores COBOL

Os melhores profissionais não decoram comandos.

Eles aprendem a pensar.

Quando recebem uma demanda, primeiro desenham a lógica.

Depois escrevem o código.

Por isso um profissional experiente consegue aprender:

  • COBOL

  • PL/I

  • Natural

  • Java

  • Python

  • C#

Porque a lógica permanece.

A linguagem muda.

O raciocínio não.


Conclusão

Todo sistema Mainframe que processa cartões, PIX, contas correntes, seguros, previdência, telecomunicações ou governo possui a mesma fundação:

Algoritmos.

Variáveis.

Decisões.

Repetições.

Processamento de dados.

O COBOL não é apenas uma linguagem.

Ele é a materialização de uma lógica extremamente bem estruturada, criada para representar regras de negócio de forma clara e confiável.

Quem domina apenas comandos escreve programas.

Quem domina lógica constrói sistemas que sobrevivem décadas.

E talvez esse seja o maior segredo do Mainframe:

Os computadores mudaram.

As telas mudaram.

As linguagens mudaram.

Mas a lógica continua exatamente a mesma desde os primeiros dias da computação.



segunda-feira, 4 de fevereiro de 2013

COBOL no Mainframe Programa → O Esqueleto: Divisões → Seções → Parágrafos → Frases → Declarações

 


🟦 COBOL no Mainframe e seu esqueleto

Programa → Divisões → Seções → Parágrafos → Frases → Declarações

(ou: como o código mais longevo do planeta ainda governa o mundo)

“COBOL não é velho. Velho é o problema que ele resolve.”
— Bellacosa, olhando um extrato bancário



🧬 Origem: antes do Java, antes do C, antes do hype

COBOL nasceu em 1959, patrocinado pelo Departamento de Defesa dos EUA, com uma ideia revolucionária para a época:

👉 programas legíveis por humanos de negócios, não apenas por matemáticos.

Enquanto outras linguagens focavam em ciência e engenharia, o COBOL foi criado para:

  • Folha de pagamento

  • Contabilidade

  • Bancos

  • Seguros

  • Governo

  • Tudo que não pode parar

E aqui vai o primeiro easter-egg:

🥚 Mais de 70% das transações financeiras globais ainda passam por COBOL.
Se ele cair, o mundo sente.


🧱 O mantra sagrado do COBOL

Todo programa COBOL clássico segue esta hierarquia:

Programa └── Divisões └── Seções └── Parágrafos └── Frases └── Declarações

Isso não é só estilo.
É contrato social, organização mental e engenharia de sobrevivência.

Vamos por partes, Padawan.


🧠 1️⃣ Programa: o universo

O programa COBOL é a unidade máxima:

  • Compilável

  • Executável

  • Chamável por outro programa

  • Controlado por JCL

  • Versionado (ou não… dependendo do museu 😅)

Exemplo:

IDENTIFICATION DIVISION. PROGRAM-ID. ELJEFE01.

Se não tem PROGRAM-ID, não é programa.
É só tristeza.


🧩 2️⃣ Divisões: os grandes blocos da mente COBOL

O COBOL clássico tem 4 divisões principais:

🔹 IDENTIFICATION DIVISION

Quem você é:

  • Nome do programa

  • Autor

  • Data

  • Comentários históricos (às vezes fósseis)

IDENTIFICATION DIVISION. PROGRAM-ID. ELJEFE01. AUTHOR. BELLACOSA.

🥚 Easter-egg: muitos programas em produção ainda têm DATE-WRITTEN. 1987.


🔹 ENVIRONMENT DIVISION

Onde você vive:

  • Arquivos

  • Dispositivos

  • Ambiente de execução

Hoje em dia:

  • Muitas vezes vazia

  • Mas ainda respeitada por tradição


🔹 DATA DIVISION

O coração do COBOL.

Aqui você define:

  • Arquivos

  • Registros

  • Variáveis

  • Estruturas

  • Formatos

  • Tamanhos

  • Regras de negócio implícitas

DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-SALDO PIC 9(9)V99.

👉 Se você erra aqui, o programa compila… e falha em produção.


🔹 PROCEDURE DIVISION

Onde a mágica acontece.

É o fluxo lógico, a história do programa, o passo a passo do negócio.

PROCEDURE DIVISION. PERFORM CALCULA-SALDO DISPLAY WS-SALDO STOP RUN.

🧩 3️⃣ Seções: organização lógica (nem sempre usada)

As seções são agrupadores de parágrafos.

Exemplo clássico:

PROCEDURE DIVISION. MAIN-SECTION.

Hoje:

  • Alguns usam

  • Outros ignoram

  • Todos respeitam quando encontram

🥚 Easter-egg: programas antigos têm seções enormes com 5 mil linhas.


🧩 4️⃣ Parágrafos: unidades de execução

O parágrafo é:

  • Um ponto de entrada

  • Um bloco executável

  • Algo que você pode PERFORM

CALCULA-SALDO. ADD WS-CREDITO TO WS-SALDO SUBTRACT WS-DEBITO FROM WS-SALDO.

👉 Parágrafo bom:

  • Nome claro

  • Uma responsabilidade

  • Fácil de testar (na teoria 😄)


🧩 5️⃣ Frases: uma ou mais declarações terminadas por ponto

No COBOL clássico:

  • O ponto (.) encerra uma frase

  • E também pode quebrar fluxo

Exemplo:

ADD A TO B SUBTRACT C FROM B.

⚠️ Dica Bellacosa:

Ponto em excesso mata legibilidade e cria bugs invisíveis.


🧩 6️⃣ Declarações: as instruções de verdade

Aqui estão os verbos COBOL:

  • MOVE

  • ADD

  • SUBTRACT

  • MULTIPLY

  • DIVIDE

  • IF

  • EVALUATE

  • PERFORM

  • READ

  • WRITE

Exemplo:

IF WS-SALDO < 0 MOVE 'NEGATIVO' TO WS-STATUS END-IF

👉 Leia em voz alta.
Se fizer sentido, é COBOL bem escrito.


🛠️ Boas práticas Bellacosa Approved™

✔ Um parágrafo = uma responsabilidade
✔ Nomeie tudo como se fosse explicar para auditor
✔ Evite GO TO (sim, ele existe…)
✔ Centralize regras no DATA DIVISION
✔ Comente o porquê, não o como
✔ Código COBOL é lido mais do que escrito


🧠 Curiosidades que ninguém te conta

🥚 COBOL foi feito para ser lento para mudar, rápido para confiar
🥚 Programas com 40 anos rodam sem recompilar
🥚 O maior risco não é o COBOL — é ninguém entender o que ele faz
🥚 Modernizar não é reescrever, é encapsular e expor


🧘 Visão final para o Padawan

COBOL não é uma linguagem.
É uma forma de pensar sistemas críticos.

A hierarquia:

Programa → Divisões → Seções → Parágrafos → Frases → Declarações

existe para:

  • Clareza

  • Controle

  • Manutenção

  • Sobrevivência a décadas

Se você entende isso, você:

  • Lê qualquer programa

  • Não tem medo de legado

  • Está pronto para integrar com cloud, APIs, microsserviços

E lembre-se:

“Todo hype passa.
O extrato bancário continua.”