Translate

Mostrar mensagens com a etiqueta programação batch. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta programação batch. Mostrar todas as mensagens

quinta-feira, 2 de julho de 2026

Dos Cartões Perfurados ao Enterprise COBOL: A Evolução do STOP RUN e do GOBACK

 

Bellacosa Mainframe e as diferencas entre o goback e o stop run


Dos Cartões Perfurados ao Enterprise COBOL: A Evolução do STOP RUN e do GOBACK

Essa é uma excelente pergunta, e a resposta curta é:

Hoje, em projetos modernos de Enterprise COBOL para z/OS, a IBM e a maioria das empresas recomendam usar GOBACK em vez de STOP RUN. Não é apenas modismo; existem razões técnicas, arquiteturais e de reutilização do ambiente de execução (Language Environment). (IBM)

Vamos analisar como um arquiteto de Mainframe faria.


A origem do STOP RUN

Quando COBOL surgiu na década de 1960, praticamente todos os programas eram executados diretamente pelo sistema operacional.

O fluxo era simples:

JCL
 │
 ▼
Programa COBOL
 │
STOP RUN
 │
 ▼
MVS

Naquela época:

  • não existiam APIs REST;

  • não existiam aplicações reutilizáveis;

  • praticamente não existiam subprogramas complexos;

  • o programa começava e terminava.

O STOP RUN fazia exatamente isso:

"Acabei. Pode encerrar tudo."


O surgimento do GOBACK

Com o crescimento dos sistemas apareceram:

  • subprogramas

  • bibliotecas

  • módulos reutilizáveis

  • CICS

  • IMS

  • DB2

  • Language Environment (LE)

Agora um programa não era mais necessariamente o "programa principal".

Exemplo:

JCL

  MAIN01

     │

 CALL CLIENTE

     │

 CALL CALCJURO

     │

 CALL VALIDA

Imagine se CALCJURO executasse:

STOP RUN

O que aconteceria?

Toda a aplicação terminaria imediatamente.

Não apenas o módulo.

Todo o Run Unit.

É exatamente isso que a IBM documenta. STOP RUN termina toda a Run Unit; já GOBACK retorna ao chamador quando usado em um programa chamado. (IBM)


A grande diferença

STOP RUN

Programa

↓

encerra TODA a Run Unit

↓

retorna ao sistema operacional

GOBACK

Programa

↓

retorna para quem chamou

↓

continua a execução

Se o programa for o principal:

GOBACK

↓

faz praticamente o mesmo trabalho do STOP RUN

A IBM afirma isso explicitamente:

Em um programa principal, GOBACK funciona como STOP RUN. Em um subprograma, GOBACK funciona como EXIT PROGRAM. (IBM)


Exemplo prático

Programa principal

MAIN
CALL "A"

DISPLAY "FIM"

STOP RUN

Programa A

DISPLAY "A"

STOP RUN

Resultado

A

O DISPLAY "FIM"

nunca acontece.


Agora usando GOBACK

Programa A

DISPLAY "A"

GOBACK

Resultado

A

FIM

Porque voltou para o MAIN.


Então por que muitas empresas proíbem STOP RUN?

Não porque ele esteja errado.

Mas porque ele cria risco.

Imagine um programa hoje.

Batch

↓

Framework

↓

Biblioteca

↓

Serviço

↓

Seu Programa

Você nem sempre sabe quem chamou seu módulo.

Se usar

STOP RUN

você encerra toda a aplicação.

Se usar

GOBACK

o programa simplesmente devolve o controle.

Muito mais seguro.


O princípio da reutilização

Hoje escrevemos programas para serem reutilizados.

Um módulo pode ser chamado por:

  • Batch

  • CICS

  • IMS

  • API REST

  • MQ

  • Java

  • z/OS Connect

  • outro COBOL

O módulo não deve assumir que é o "dono" da aplicação.

Ele apenas faz seu trabalho.

Depois devolve o controle.

Isso é exatamente o comportamento do GOBACK.


O impacto no Language Environment (LE)

Aqui está uma das razões mais importantes.

O Enterprise COBOL roda sobre o Language Environment (LE).

O LE controla:

  • memória

  • pilha

  • heap

  • tratamento de exceções

  • inicialização

  • reutilização do runtime

Quando ocorre

STOP RUN

o LE encerra o Run Unit.

Quando ocorre

GOBACK

ele apenas retorna ao chamador.

Isso permite reutilizar o ambiente de execução em muitos cenários. (IBM)


O caso do RTEREUS

Pouca gente conhece essa opção.

Existe um parâmetro do LE chamado

RTEREUS

(Runtime Reuse)

Ele permite reutilizar o ambiente de execução COBOL.

A IBM afirma claramente:

Para obter os benefícios do RTEREUS, substitua STOP RUN por GOBACK. STOP RUN encerra o ambiente reutilizável. (IBM)

Ou seja:

STOP RUN

↓

destrói o ambiente

↓

novo ambiente precisa ser criado

Enquanto

GOBACK

↓

reutiliza o ambiente

↓

menos overhead

Performance

O ganho normalmente não é enorme em um programa isolado.

Mas imagine milhares de execuções por minuto.

1000 programas

↓

cada um recria o Runtime

↓

mais CPU

Com reutilização:

Runtime permanece ativo

↓

menos inicialização

↓

menos CPU

É exatamente por isso que grandes bancos adotam GOBACK como padrão.


E no CICS?

No CICS normalmente termina-se com

EXEC CICS RETURN

e não com

STOP RUN

porque quem controla a aplicação é o CICS.

O mesmo raciocínio vale para IMS.

O programa devolve o controle ao ambiente.

Não encerra a Run Unit.


Um exemplo interessante: DFSORT

A IBM é ainda mais direta na documentação de user exits do DFSORT:

User exits escritos em COBOL não devem usar STOP RUN. Para retornar ao DFSORT, use GOBACK. (IBM)

Ou seja,

STOP RUN

↓

encerra tudo

↓

ERRADO
GOBACK

↓

retorna ao DFSORT

↓

CORRETO

Existe recomendação oficial da IBM?

Sim.

A documentação oficial afirma que:

  • em programas principais, GOBACK tem o mesmo efeito de STOP RUN;

  • em subprogramas, GOBACK retorna ao chamador, enquanto STOP RUN termina toda a Run Unit. (IBM)

Além disso, para ambientes reutilizáveis (RTEREUS), a IBM recomenda trocar STOP RUN por GOBACK. (IBM)

Documentação oficial da IBM:

Minha recomendação para um COBOL Padawan

Se você está desenvolvendo em Enterprise COBOL moderno, adote esta regra simples:

SituaçãoRecomendação
Programa Batch principalGOBACK
Subprograma (CALL)GOBACK
Biblioteca reutilizávelGOBACK
Módulo chamado por Java, CICS, IMS ou APIsGOBACK
Novo desenvolvimentoGOBACK como padrão

Na prática, GOBACK é um superconjunto de STOP RUN: ele faz o papel de STOP RUN quando está no programa principal e o de EXIT PROGRAM quando está em um programa chamado. Isso reduz riscos, melhora a reutilização do runtime e torna o código mais flexível para arquiteturas modernas. Por esse conjunto de vantagens, a preferência atual por GOBACK é muito mais uma decisão de engenharia do que um simples modismo.

Design Patterns no COBOL Mainframe Os Padrões que os Grandes Programadores Sempre Usaram (Mesmo Antes de Eles Receberem um Nome)

 

Bellacosa Mainframe e os design pattern em cobol mainframe

☕ Um Café no Bellacosa Mainframe

Design Patterns no COBOL Mainframe

Os Padrões que os Grandes Programadores Sempre Usaram (Mesmo Antes de Eles Receberem um Nome)

"Todo programador COBOL iniciante acredita que um bom sistema nasce de um bom código. O programador experiente sabe que um bom sistema nasce de boas decisões de arquitetura."

Existe uma curiosidade fascinante na história da computação.

Quando ouvimos falar em Design Patterns, quase todo mundo lembra imediatamente do famoso livro Design Patterns: Elements of Reusable Object-Oriented Software, publicado em 1994 pelo famoso Gang of Four (GoF).

Muitos acreditam que os padrões nasceram ali.

Mas isso não é verdade.

Na realidade, os profissionais de Mainframe utilizavam padrões muito antes de eles receberem nomes elegantes.

Os sistemas bancários dos anos 70, 80 e 90 já possuíam separação de responsabilidades, reutilização de código, módulos especializados, camadas de acesso a banco, mecanismos de validação, tratamento centralizado de erros, componentes compartilhados e arquiteturas extremamente organizadas.

Eles simplesmente não chamavam isso de Pattern.

Chamavam de:

"Boa programação."

E existe um motivo simples.

Quando um sistema precisa sobreviver por 40 anos, processar bilhões de transações e nunca parar, improvisação não funciona.

É por isso que aprender Patterns em COBOL significa aprender como os grandes sistemas do mundo realmente funcionam.

Hoje vamos explorar essa jornada.

Pegue seu café.

Vamos entrar na mente dos arquitetos que construíram os sistemas que movimentam praticamente todo o dinheiro do planeta.


O que é um Pattern?

Pattern significa literalmente:

Padrão de solução.

Não é código.

Não é framework.

Não é biblioteca.

É uma maneira comprovada de resolver um problema recorrente.

Sempre que um problema aparece repetidamente, alguém encontra uma solução elegante.

Depois de milhares de aplicações, essa solução vira um padrão.


A origem dos Patterns

Antes mesmo da computação, um arquiteto chamado Christopher Alexander estudava cidades e construções.

Ele percebeu algo interessante.

As melhores cidades do mundo utilizavam soluções semelhantes para problemas semelhantes.

Uma praça.

Uma rua.

Uma entrada.

Uma janela.

Tudo seguia padrões.

Em 1977 ele publicou:

A Pattern Language.

Décadas depois, programadores perceberam:

"Software também possui problemas repetitivos."

Assim nasceram os Design Patterns modernos.


Mas... e o Mainframe?

Enquanto isso...

Em grandes bancos...

Seguradoras...

Governos...

Empresas aéreas...

Os analistas já utilizavam exatamente a mesma filosofia.

Um exemplo clássico.

Em vez de cada programa acessar DB2 diretamente...

Criava-se um módulo responsável apenas por isso.

Hoje chamaríamos isso de:

DAO Pattern.

Na época era apenas:

"O módulo que conversa com o banco."


Por que Patterns são importantes?

Imagine um hospital.

Você não quer que cada médico invente sua própria forma de operar.

Existe um procedimento.

Uma sequência.

Uma organização.

Software crítico funciona da mesma forma.

Patterns tornam sistemas:

  • previsíveis

  • fáceis de manter

  • fáceis de evoluir

  • seguros

  • reutilizáveis


Pattern 1 — Modularização

O primeiro pattern da história do Mainframe.

Um programa enorme faz tudo.

Depois de alguns anos...

Ninguém entende mais nada.

A solução?

Separar responsabilidades.

Exemplo:

Programa Principal

Validação

Regras de Negócio

DB2

Relatórios

Logs

Cada módulo possui apenas uma função.

Hoje isso parece óbvio.

Na década de 70 era revolucionário.


Como aplicar

Nunca escreva um programa de 5.000 linhas.

Pergunte:

Esta rotina pode virar um subprograma?

Se a resposta for sim...

Faça isso.


Pattern 2 — COPYBOOK Pattern

Uma das maiores invenções do COBOL.

Em vez de repetir estruturas...

Criamos COPYBOOKS.

Exemplo:

Cliente

Conta

Saldo

Endereço

CPF

Esses campos aparecem em centenas de programas.

Sem COPYBOOK...

Bastaria alterar um campo para criar centenas de inconsistências.

Com COPYBOOK...

Uma alteração.

Todos utilizam.


Boas práticas

Nunca copie estruturas manualmente.

Sempre centralize.


Pattern 3 — Validation Layer

Nunca misture validação com regra de negócio.

Errado:

Recebe CPF

Consulta DB2

Calcula juros

Valida CPF

Atualiza saldo

Tudo misturado.

Certo:

Entrada

Validação

Negócio

Persistência


Benefícios

Código mais limpo.

Testes mais simples.

Menos bugs.


Pattern 4 — Error Handler Centralizado

Um clássico absoluto.

Em vez de cada programa escrever mensagens diferentes...

Existe um módulo especializado.

Exemplo:

DISPLAY

ABEND

LOG

RETURN-CODE

Tudo passa por um componente comum.


Vantagens

Padronização.

Auditoria.

Facilidade de suporte.


Pattern 5 — File Access Layer

Em vez de cada programa abrir arquivos VSAM...

Criamos uma camada.

Programa

Arquivo Layer

VSAM

Se amanhã o arquivo virar DB2...

O programa quase não muda.


Isso é desacoplamento

A lógica de negócio não conhece detalhes físicos.

Esse conceito ficou famoso décadas depois.

No Mainframe já era realidade.


Pattern 6 — Database Access Layer

Muito comum em DB2.

Programa

Subprograma SQL

DB2

O programa não conhece SQL.

Conhece apenas serviços.

Exemplo:

Consultar Cliente

Atualizar Saldo

Inserir Conta

Excluir Registro

Muito semelhante aos Repository Patterns modernos.


Pattern 7 — Service Programs

Grandes empresas possuem centenas de programas.

Algumas regras aparecem em todos.

Cálculo de CPF.

Validação de agência.

Máscara.

Data.

Moeda.

Essas regras viram serviços.


Exemplo

CALL "CALCJURO"

CALL "VALIDCPF"

CALL "FORMATA"

CALL "DATAUTIL"

Isso reduz milhares de linhas duplicadas.


Pattern 8 — Dispatcher

Muito usado em CICS.

Um programa recebe uma operação.

Dependendo da função...

Chama outro programa.

Entrada

Dispatcher

Consulta

Inclusão

Alteração

Exclusão

Hoje chamamos isso de Command Dispatcher.


Pattern 9 — Table Driven Programming

Em vez de dezenas de IF...

Utilize tabelas.

Errado:

IF UF = SP

IF UF = RJ

IF UF = MG

...

Melhor:

Tabela de estados.

Pesquisa.

Resultado.

Menos código.

Mais manutenção.


Pattern 10 — Configuration Pattern

Nunca coloque constantes espalhadas.

Crie parâmetros.

Copybooks.

Arquivos.

Tabelas.

Isso evita recompilar programas para pequenas mudanças.


Pattern 11 — Batch Pipeline

Muito usado em processamento noturno.

Leitura

Validação

Transformação

Classificação

Carga

Cada etapa faz apenas uma coisa.

Se uma falhar...

A anterior permanece íntegra.


Pattern 12 — Restart Pattern

Um dos mais importantes.

Imagine um Batch de 8 horas.

Na hora 7 ocorre falha.

Sem Restart...

Tudo começa novamente.

Com Restart...

Continua do último checkpoint.

Essa ideia economiza milhões de dólares todos os anos.


Pattern 13 — Checkpoint Pattern

Muito usado com IMS.

A cada quantidade de registros...

Grava-se um ponto seguro.

Em caso de falha...

Retorna dali.


Pattern 14 — Logging Pattern

Nunca dependa apenas do DISPLAY.

Registre:

Programa

Data

Hora

Usuário

Arquivo

SQLCODE

Chave

Operação

Isso salva equipes inteiras durante incidentes.


Pattern 15 — Retry Pattern

DB2 indisponível?

Arquivo bloqueado?

MQ ocupado?

Em vez de falhar imediatamente...

Tente novamente algumas vezes.

Mas cuidado.

Retry infinito vira desastre.


Pattern 16 — Circuit Breaker (Modernização)

Muito usado via APIs.

Se um serviço externo está indisponível...

Pare de chamá-lo temporariamente.

Evita sobrecarga.


Pattern 17 — Adapter

Muito utilizado na modernização.

Sistema antigo

Adapter

API REST

O COBOL permanece praticamente igual.


Pattern 18 — Facade

Imagine vinte programas acessando vinte módulos.

Complicado.

Criamos uma fachada.

Programa

Facade

Serviços internos

Tudo fica mais simples.


Pattern 19 — Strategy

O cálculo muda conforme o produto.

Em vez de centenas de IF...

Criamos estratégias.

Produto A

Regra A

Produto B

Regra B

Produto C

Regra C


Pattern 20 — Template Process

Muito comum em Batch.

Todos os programas fazem:

Inicialização

Leitura

Processamento

Gravação

Fechamento

Apenas a lógica muda.

A estrutura permanece.


Como identificar quando usar um Pattern

Faça cinco perguntas:

  1. Estou repetindo código?

  2. Esse módulo possui mais de uma responsabilidade?

  3. Se mudar amanhã, quantos programas serão alterados?

  4. Consigo testar isoladamente?

  5. Outra equipe entenderia isso facilmente?

Se várias respostas forem "não"...

Provavelmente existe um Pattern melhor.


Os erros mais comuns dos iniciantes

O famoso "programa monolítico".

Tudo dentro da PROCEDURE DIVISION.

Milhares de linhas.

GO TO para todos os lados.

Variáveis globais.

DISPLAY espalhados.

SQL misturado.

Validação misturada.

Regras misturadas.

Esse tipo de programa funciona...

Até o primeiro incidente em produção.


Como evoluir como Programador COBOL

Existe uma evolução natural.

Nível 1

Aprende sintaxe.

MOVE.

IF.

PERFORM.

READ.

WRITE.


Nível 2

Aprende organização.

Seções.

Parágrafos.

COPYBOOKS.

Subprogramas.


Nível 3

Aprende Patterns.

Reutilização.

Arquitetura.

Modularização.


Nível 4

Aprende integração.

DB2.

CICS.

IMS.

MQ.

REST.

JSON.


Nível 5

Pensa como arquiteto.

Nesse ponto, você não escreve apenas programas.

Você desenha soluções.


Curiosidades

  • Muitos sistemas bancários escritos há mais de 35 anos continuam ativos porque seguiram padrões consistentes.

  • Diversos conceitos popularizados em Java, C# e outras linguagens já eram praticados em ambientes COBOL, ainda que com nomes diferentes.

  • O uso disciplinado de COPYBOOKS foi um dos fatores que permitiu manter aplicações enormes sincronizadas por décadas.

  • Grandes equipes de Mainframe costumam definir padrões internos de nomenclatura, tratamento de erros, chamadas de subprogramas e acesso a dados para reduzir riscos operacionais.


Melhores práticas para o dia a dia

  • Dê a cada programa uma responsabilidade clara.

  • Evite duplicação de lógica.

  • Centralize estruturas em COPYBOOKS.

  • Padronize mensagens de erro.

  • Isole acesso a arquivos e bancos de dados.

  • Documente interfaces de subprogramas.

  • Use nomes consistentes para programas, parágrafos e variáveis.

  • Escreva código pensando em quem fará a manutenção daqui a dez anos.

  • Prefira simplicidade à esperteza.

  • Revise continuamente seu código procurando oportunidades de extrair novos módulos reutilizáveis.


O futuro dos Patterns no Mainframe

O Mainframe moderno conversa com APIs REST, mensageria, microsserviços, Kubernetes, aplicações Java, Python e serviços em nuvem. Nesse cenário, os Patterns clássicos continuam mais relevantes do que nunca. Adapter, Facade, Retry, Circuit Breaker, Service Layer e Repository ajudam a integrar aplicações COBOL com tecnologias modernas sem sacrificar estabilidade.

O profissional que domina esses conceitos deixa de ser apenas um desenvolvedor de programas e passa a ser um engenheiro de soluções. Ele entende quando reutilizar, quando desacoplar, quando encapsular e quando simplificar. Esse conhecimento vale muito mais do que decorar comandos da linguagem.


Conclusão

Existe uma frase muito conhecida entre arquitetos de software:

"Código ruim pode funcionar. Arquitetura ruim cobra juros."

No universo IBM Z, essa cobrança aparece em horas extras, incidentes de produção, dificuldades de manutenção e projetos de modernização cada vez mais caros.

Os Patterns existem justamente para evitar esse cenário. Eles representam décadas de experiência acumulada por milhares de profissionais que enfrentaram os mesmos problemas e encontraram soluções elegantes, reutilizáveis e seguras.

Se você é um Programador COBOL Padawan, não tente memorizar todos os Patterns de uma vez. Comece pelos mais importantes: modularização, COPYBOOKS, validação, tratamento centralizado de erros, acesso a dados desacoplado e reutilização de serviços. À medida que sua experiência crescer, você perceberá que esses padrões aparecem naturalmente em praticamente todos os grandes sistemas corporativos.

Lembre-se: escrever código é uma habilidade. Escrever código que continuará funcionando e sendo compreendido daqui a vinte anos é uma arte. E essa arte é construída com disciplina, boas práticas e padrões sólidos.

No Bellacosa Mainframe, costumamos dizer que o verdadeiro poder de um Programador COBOL não está na quantidade de comandos que ele conhece, mas na qualidade das decisões que toma antes mesmo de começar a digitar a primeira linha de código.

Esse é o caminho que transforma um Padawan em um verdadeiro Mestre do Mainframe.

Se desejar, posso criar a Parte 2 com mais de 3.000 palavras, abordando 40+ Design Patterns específicos para COBOL, CICS, DB2, IMS, Batch, APIs REST, MQ e modernização no IBM Z, com exemplos completos de código COBOL para cada padrão.


domingo, 15 de março de 2020

☕💥 Fluxogramas no Mundo Mainframe

 

Bellacosa Mainframe e o fluxograma no mundo mainframe

☕💥 Fluxogramas no Mundo Mainframe

Ou como um Padawan COBOL descobre que antes do IF WS-SALDO > ZERO, existia um desenhinho que salvava projetos milionários

"Um programa COBOL sem fluxograma é como um JCL sem JOB CARD. Talvez execute. Talvez funcione. Mas ninguém vai entender daqui seis meses."

— Mestre Bellacosa Mainframe


Introdução

Uma das maiores diferenças entre um desenvolvedor COBOL júnior de hoje e um analista de sistemas da década de 1970, 1980 ou 1990 não está na linguagem.

Não está no z/OS.

Não está no DB2.

Não está no CICS.

Está na forma de pensar software.

Hoje aprendemos:

  • Fazer código

  • Testar

  • Commitar

  • Fazer Pull Request

Antigamente aprendíamos:

  • Analisar

  • Modelar

  • Desenhar

  • Revisar

  • Aprovar

  • Codificar

E neste mundo existia um personagem muito poderoso.

O Fluxograma.


O nascimento dos fluxogramas

A ideia é muito antiga.

Vem dos trabalhos de engenharia industrial.

Frank Gilbreth

Henry Gantt

Por volta de 1921 começaram a desenhar processos industriais.

Exemplo:

Receber matéria-prima

Produzir

Inspecionar

Embalar

Enviar

Décadas depois os computadores apareceram.

E alguém percebeu:

"Programas são processos."

Logo...

Processos industriais

viraram

Processos computacionais.


O modelo Waterfall

Se você trabalha em Mainframe bancário provavelmente ainda verá isso.

Waterfall.

As fases clássicas:

Requisitos

Análise

Fluxogramas

Especificação Técnica

Codificação

Teste

Implantação


Documentos clássicos do Waterfall

Documento Funcional

O que o sistema faz.

Exemplo:

Pagamento de boleto

Regra:

Se vencido

cobrar multa

Se pago em dia

valor normal


Documento Técnico

Como será implementado.

Exemplo:

Programa:

PAGBOL01

Tabela:

TB_BOLETO

Transação:

PB01

Copybooks

CPBOLETO


Fluxograma

É a ponte entre os dois.

Negócio

Fluxograma

COBOL


Bellacosa Mainframe e os simbolos de fluxograma

O que é um Fluxograma?

É uma representação gráfica de um algoritmo.

Ao invés de escrever:

IF SALDO > ZERO
   DISPLAY "OK"
ELSE
   DISPLAY "NEGADO"
END-IF

Desenhamos.

        ◇
SALDO > 0 ?
   /    \
 SIM    NÃO
 ↓       ↓
OK    NEGADO

Nosso cérebro entende imagens mais rapidamente.

Por isso funcionam.


Símbolos principais

Oval

Significado:

Início

Fim

Exemplo

 _______
(START )
 -------

ou

 _______
( END  )
 -------

Retângulo

Processamento.

Fazer algo.

Exemplo:

Calcular juros

Atualizar cadastro

Mover campos


Exemplo COBOL

COMPUTE JUROS =
SALDO * 0.05

Fluxograma

□ Calcular juros


Losango

Decisão.

Pergunta.

Tem duas saídas.

SIM

NÃO

Exemplo

Cliente VIP?


COBOL

IF CLIENTE-VIP='S'

Paralelogramo

Entrada e saída.

DISPLAY

ACCEPT

RECEIVE

SEND


Batch

Ler arquivo

Online

Receber PFKEY


Seta

Fluxo.

Indica sequência.

Sem seta.

Existe caos.

Com seta.

Existe entendimento.


Círculo

Conector.

Liga páginas.

Muito usado em especificações gigantes.

Página 1

○A

Página 10

○A

continuação


Bellacosa Mainframe e um fluxograma cobol batch

Fluxograma de Batch COBOL

Imagine:

Pagar folha salarial.


Desenho

START

Abrir arquivo

Ler funcionário

Fim Arquivo?

Sim

Gerar relatório

END

Não

Calcular salário

Gravar saída

Ler próximo


COBOL

OPEN INPUT FUNCIONARIO

PERFORM UNTIL EOF='S'

 READ FUNCIONARIO

   AT END
      MOVE 'S' TO EOF

   NOT AT END

      PERFORM CALCULA

      WRITE REG-SAIDA

 END-READ

END-PERFORM

Bellacosa Mainframe exemplo de fluxograma cobol vsam


Fluxograma para VSAM

Abrir KSDS

READ

FOUND?

SIM

UPDATE

REWRITE

NÃO

WRITE

END


Bellacosa Mainframe exemplo de fluxograma online cics

Fluxograma Online CICS

Exemplo.

Consulta saldo.


START

Receber tela

ENTER?

SIM

Validar conta

Conta existe?

SIM

Ler DB2

Enviar tela

NÃO

Mensagem erro

END


COBOL

EXEC CICS RECEIVE MAP


EXEC SQL

SELECT SALDO

INTO :WS-SALDO

FROM CONTA


END-EXEC


EXEC CICS SEND MAP


END-EXEC

Bellacosa Mainframe exemplo de fluxograma db2

Fluxograma com DB2

Exemplo.

Transferência bancária.


START

Receber origem

Receber destino

Valor válido?

SIM

BEGIN UNIT OF WORK

SELECT

UPDATE

UPDATE

COMMIT

NÃO

ROLLBACK

END


Fluxograma das tabelas DB2

Tabela

CLIENTE

Tabela

CONTA

Tabela

MOVIMENTO

Fluxo

CLIENTE

CONTA

MOVIMENTO


Exemplo SQL

SELECT
C.NOME,
M.VALOR

FROM CLIENTE C

JOIN CONTA CT

ON...

JOIN MOVIMENTO M

Fluxograma ajuda a enxergar joins.


Workflow

Muitos confundem.

Fluxograma

não é

Workflow

Mas workflow pode usar fluxograma.


Exemplo

Solicitação crédito

Cliente

Análise

Aprovação gerente

Compliance

Liberação


Hoje isso está em:

IBM BPM

Camunda

ServiceNow

Power Automate


Fluxos de diálogo

Muito usado em CICS.

Tela login

Senha válida?

Sim

Menu

Não

Mensagem erro


Chatbots fazem isso.

ChatGPT faz isso.

URA faz isso.

PIX faz isso.


Boas práticas

1 Não cruzar linhas

Errado

Linhas embaralhadas.

Causa dor psicológica.


2 Usar nomes claros

Errado

Processo 1

Correto

Calcular IOF


3 Uma decisão por vez

Evita confusão.


4 Modularizar

Subfluxos.

Exemplo

Pagamento

Calcular imposto

Fluxograma separado


Curiosidades

Easter Egg 1

COBOL nasceu em 1959.

Fluxogramas já eram padrão.


Easter Egg 2

Muitos programadores COBOL dos anos 80 codificavam olhando apenas para fluxogramas.

Nem tinham acesso ao usuário.


Easter Egg 3

Ferramentas CASE prometiam gerar COBOL automaticamente.

Excelerator

ADW

CoolGen

IEF

Pacbase

A ideia era:

Desenhar

Gerar programa

Compilar


Easter Egg 4

IBM usou fluxogramas extensivamente na documentação do OS/360.

Centenas de páginas.


Easter Egg 5

DFSORT pode ser representado perfeitamente por fluxograma.

INPUT

SORT

SUM

OUTREC

OUTPUT


Por que ainda usamos em Mainframe?

Porque sistemas bancários possuem:

Centenas de regras

Milhares de IFs

Milhões de contas

Um código COBOL pode ter:

30000 linhas

500 parágrafos

200 IFs

Ler isso é cansativo.

Ver um desenho leva segundos.


O Fluxograma como ferramenta de sobrevivência do Padawan COBOL

Imagine receber:

Programa:

FINA0345

38 mil linhas.

Criado em 1994.

Sem documentação.

Sem analista.

Sem usuário.

Sem autor.

Você abre.

Encontra:

PERFORM P1120

PERFORM P1130

PERFORM P1140

PERFORM P1150

O que fazem?

Ninguém sabe.

Mas após desenhar:

START

↓

Validar Cliente

↓

Consultar DB2

↓

Calcular Limite

↓

Atualizar Histórico

↓

Gerar Extrato

↓

END

Tudo fica claro.

É por isso que arquitetos, analistas de sistemas, especialistas em CICS, DB2, IMS, MQ, BPM e até equipes DevOps continuam utilizando fluxogramas.

Eles não substituem COBOL.

Não substituem UML.

Não substituem documentação funcional.

Mas fazem algo extremamente valioso: transformam milhares de linhas de código em uma história visual que qualquer pessoa consegue seguir.

E, no universo Bellacosa Mainframe, talvez esta seja a melhor definição possível:

Fluxograma é o mapa da dungeon. COBOL é a espada. DB2 é o tesouro. CICS é o portal de entrada. E o programador júnior que aprende a desenhar processos deixa de ser apenas um codificador e começa a pensar como um verdadeiro Analista de Sistemas do Reino IBM Z. ☕🚀

 

terça-feira, 30 de janeiro de 2007

O que é Lógica de Programação em Mainframe?

 

Bellacosa Mainframe e a logica de programação mainframe

O que é Lógica de Programação em Mainframe?

Quando alguém começa a estudar:

  • COBOL;

  • JCL;

  • REXX;

  • Assembler;

  • DB2;

  • programação no z/OS;

existe um conceito que aparece antes de qualquer linguagem:

lógica de programação.

Muitos iniciantes pensam que programar é:

decorar comandos.

Mas na verdade:
programar significa:

resolver problemas usando lógica.


Definição simples

Lógica de programação é:

a forma organizada de pensar para criar soluções computacionais.

Ela ensina:

  • sequência;

  • decisão;

  • repetição;

  • organização;

  • fluxo de processamento.


O que muda no mainframe?

No ambiente mainframe:

a lógica normalmente processa enormes volumes de dados.

Exemplo:

  • milhões de contas bancárias;

  • bilhões de transações PIX;

  • folhas salariais;

  • cartões de crédito;

  • faturamento.


Analogia simples

Imagine ensinar alguém a fazer café.

Você precisa explicar:

  1. pegar água;

  2. ferver;

  3. colocar pó;

  4. filtrar;

  5. servir.

Isso é:

lógica.

O computador funciona exatamente assim:

seguindo passos organizados.


A lógica existe antes da linguagem

Antes de aprender:

  • COBOL;

  • Java;

  • Python;

  • Assembler;

é importante entender:

como pensar como programador.


O que a lógica ensina?


Sequência

Ordem correta das ações.


Decisão

Escolher caminhos.


Repetição

Executar várias vezes.


Variáveis

Guardar informações.


Fluxo

Controlar execução.


Exemplo simples de lógica

LER SALARIO
SE SALARIO > 5000
   MOSTRAR "IMPOSTO MAIOR"
SENAO
   MOSTRAR "IMPOSTO MENOR"

Isso é lógica

Ainda não importa qual linguagem será usada.


Como isso aparece no COBOL?


Exemplo COBOL simples

IF SALARIO > 5000
   DISPLAY 'IMPOSTO MAIOR'
ELSE
   DISPLAY 'IMPOSTO MENOR'
END-IF

A lógica continua igual

Apenas muda a sintaxe.


Principais conceitos da lógica


Entrada

Dados recebidos.

Exemplo:

  • arquivo;

  • teclado;

  • banco DB2.


Processamento

Regras executadas.


Saída

Resultado final.


Fluxo clássico

ENTRADA
   ↓
PROCESSAMENTO
   ↓
SAÍDA

O que é algoritmo?

Algoritmo é:

sequência lógica de passos.


Exemplo algoritmo

1. Ler cliente
2. Validar saldo
3. Atualizar conta
4. Gerar relatório

O que é variável?

Espaço usado para guardar valores.


Exemplo

NOME
SALARIO
IDADE

O que é condição?

Tomada de decisão.


Exemplos

IF
ELSE
EVALUATE

O que é repetição?

Executar várias vezes.


Exemplo COBOL

PERFORM UNTIL EOF='S'

Muito usado no mainframe

Porque batch processa:

  • milhares;

  • milhões;

  • bilhões de registros.


O que é EOF?

End Of File

Fim do arquivo.


Lógica em processamento batch

Exemplo real:

LER REGISTRO
   ↓
VALIDAR
   ↓
CALCULAR
   ↓
GRAVAR
   ↓
LER PRÓXIMO

Isso é a essência do COBOL batch


O que é fluxograma?

Desenho visual da lógica.


Exemplo

INICIO
 ↓
LER ARQUIVO
 ↓
PROCESSAR
 ↓
FIM

Por que lógica é tão importante no mainframe?

Porque sistemas mainframe:

  • processam muito volume;

  • exigem precisão;

  • não podem falhar facilmente.


Um erro lógico pode causar:

  • cálculo errado;

  • perda financeira;

  • falha batch;

  • ABEND;

  • inconsistência DB2.


O que é debugging?

Analisar lógica para encontrar erros.


O que é bug?

Erro na lógica/programação.


Exemplo clássico

Programa deveria somar:

10 + 20 = 30

Mas lógica errada gera:

10 + 20 = 300

Isso é bug lógico


Como lógica aparece no COBOL?

Principalmente em:

  • IF;

  • PERFORM;

  • EVALUATE;

  • READ;

  • WRITE;

  • COMPUTE.


Exemplo real COBOL batch

READ CLIENTE
IF SALDO > 0
   WRITE RELATORIO
END-IF

Como lógica aparece no JCL?

JCL possui lógica mais operacional.

Exemplo:

COND=(0,NE)

Como lógica aparece no scheduler?

Dependências:

JOBB só executa após JOBA

Como lógica aparece no DB2?

Consultas:

SELECT
WHERE
JOIN

Curiosidades incríveis

1. COBOL foi criado para lógica de negócios


2. Grande parte do processamento bancário depende de lógica batch


3. Programadores experientes valorizam lógica mais do que sintaxe


4. A mesma lógica funciona em várias linguagens


Erros comuns de iniciantes


1. Decorar comandos sem entender lógica


2. Não visualizar fluxo do programa


3. Ignorar regras de negócio


4. Não validar dados


Dicas importantes

Aprenda lógica antes de linguagem


Desenhe fluxos


Entenda entrada → processamento → saída


Pratique algoritmos simples


Como lógica aparece no dia a dia do mainframe?

Praticamente em tudo:

  • COBOL;

  • DB2;

  • CICS;

  • batch;

  • JCL;

  • automação;

  • integração.


Exemplo completo simplificado

LER ARQUIVO
 ↓
VALIDAR CPF
 ↓
CALCULAR SALDO
 ↓
ATUALIZAR DB2
 ↓
GERAR RELATÓRIO
 ↓
FIM

Resumo rápido

ConceitoSignificado
LógicaForma organizada de pensar
AlgoritmoSequência de passos
VariávelGuarda dados
CondiçãoDecisão
RepetiçãoLoop
BatchProcessamento em lote
DebugEncontrar erros

Conclusão

Lógica de programação é a base de todo desenvolvimento no ambiente mainframe IBM Z.

Ela permite criar algoritmos organizados para processar grandes volumes de dados com segurança, precisão e eficiência, sendo fundamental para COBOL, JCL, DB2 e todo o ecossistema z/OS.