Aniversário
Alura 12 anos

20% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

Alura > Cursos de Programação > Cursos de > Conteúdos de > Primeiras aulas do curso Praticando Cobol: Modularização e linkage

Praticando Cobol: Modularização e linkage

Modularização e linkage - Apresentação

Olá! Meu nome é Ivan Petrucci e vou te acompanhar nesta jornada!

Audiodescrição: Ivan se descreve como uma pessoa de pele branca, com cabelos e olhos castanhos, e barba bem alinhada. Usa óculos de armação quadrada na cor preta e veste uma camiseta preta. Ao fundo uma parede iluminada em tom azul.

Te desejo as boas-vindas mais um curso de Cobol!

Neste curso, aprenderemos a transportar informações de um programa para outro utilizando a área de linkage. Isso será de grande ajuda na construção das modularizações.

Nos vemos no próximo vídeo!

Modularização e linkage - Modularização e Linkage

Boas-vindas a mais um curso de COBOL!

Neste curso, vamos explorar duas situações muito interessantes. A primeira trata da passagem de dados entre programas. Nesse caso, vamos receber informações de um programa chamado, enquanto o programa que realizou a chamada atuará como display, ou seja, será responsável por exibir esses dados. É como se estivéssemos simulando o consumo de um serviço que retorna valores, e, em seguida, montássemos a interface de apresentação.

O segundo conceito que vamos abordar é o de modularização, uma prática essencial para tornar nossos programas mais organizados, reutilizáveis e fáceis de manter.

Conceito de Modularização

Vamos a um exemplo: temos o programa A e o programa B:

PROGRAMA A:

WORKING-STORAGE SECTION.
01 WRK-DADOS.
    05 WRK-ID       PIC 9(003) VALUE 0.
    05 WRK-NOME     PIC X(020) VALUE SPACES.
    05 WRK-EMAIL    PIC X(030) VALUE SPACES.
PROCEDURE DIVISION.
    CALL "DllCONS" USING WRK-DADOS.
    CALL "DllCONS"
        USING WRK-ID, WRK-NOME, WRK-EMAIL.
    DISPLAY "EMAIL  " WRK-EMAIL.

PROGRAMA B:

LINKAGE SECTION.
01 LNK-DADOS.
    05 LNK-ID       PIC 9(003) VALUE 0.
    05 LNK-NOME     PIC X(020) VALUE SPACES.
    05 LNK-EMAIL    PIC X(030) VALUE SPACES.

PROCEDURE DIVISION USING LNK-DADOS.
    MOVE "MARIA EDUARDA  " TO LNK-NOME
    MOVE "MARIA@GMAIL.COM" TO LNK-EMAIL

No programa A, há uma estrutura chamada WRK-DADOS, composta por 53 posições. No programa B, temos uma estrutura semelhante na seção LINKAGE, também com 53 posições. Essa estrutura é necessária para a troca de dados. O importante é que, se passarmos 53 caracteres, precisamos receber 53 caracteres. O espelho nos dá segurança na troca de layout, mas poderíamos ter uma única variável de 53 posições.

Quando chamamos o programa B a partir do programa A, passamos a estrutura de dados com 53 posições. No programa B, a procedure precisa entender que está usando a área de troca. No programa A, não é necessário usar a LINKAGE, pois ele é o chamador. No entanto, o programa B, que recebe os dados, precisa usar a LINKAGE.

Por exemplo, movemos "Maria Eduarda" para uma variável e "maria@gmail.com" para outra, recebendo o nome e o e-mail. Suponhamos que o ID 2 corresponda a Maria Eduarda; então, movemos os nomes e o e-mail. Quando retornamos ao programa A, a variável de e-mail contém "maria@gmail.com".

Podemos chamar o programa B passando variáveis individualmente. Se todas as variáveis necessárias estiverem dentro de uma variável pai, é mais fácil. Caso contrário, especificamos uma a uma. É lógico que precisamos receber o que foi passado, mas não é necessário passar a estrutura inteira; podemos passar partes isoladas.

O conceito é: no programa A, temos uma variável de trabalho, chamamos o módulo e passamos a variável. No programa B, recebemos o ID. Suponhamos que o ID seja 2; movemos o 2 para a variável, e ele entra no programa B. Fazemos a pesquisa, populamos e retornamos com os dados. Assim, temos o chamador e o chamado.

Programa de Consulta

Deixamos um programa pré-pronto e vamos entender o que ele faz:

IDENTIFICATION DIVISION.
PROGRAM-ID. CONSULTA.

ENVIRONMENT DIVISION.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WRK-DADOS.
   05 WRK-ID     PIC 9(003) VALUE ZEROS.
   05 WRK-NOME   PIC X(020) VALUE SPACES.
   05 WRK-EMAIL  PIC X(030) VALUE SPACES.

SCREEN SECTION.
01 TELA.
   05 BLANK SCREEN.
01 Entrada.
   05 LINE 01 COLUMN 10 VALUE "Digite o ID do cliente: ".
   05 LINE 01 COLUMN 40 USING WRK-ID BLANK WHEN ZEROS.

01 Saida.
   05 LINE 03 COLUMN 10 VALUE "Nome ".
   05 LINE 03 COLUMN 40 USING WRK-NOME.
   05 LINE 05 COLUMN 10 VALUE "Email ".
   05 LINE 05 COLUMN 40 USING WRK-EMAIL.

PROCEDURE DIVISION.
   DISPLAY TELA.
   ACCEPT ENTRADA.
   CALL "DLLCONS" USING WRK-ID, WRK-NOME, WRK-EMAIL.
   DISPLAY SAIDA.

GOBACK.

Temos a variável WRK-ID inicializada com ZEROS. A tela é limpa e, em seguida, solicitamos o ID do cliente: na linha 1, coluna 10, exibimos a mensagem, e na linha 1, coluna 40, recebemos o ID digitado. Como estamos utilizando a instrução BLANK WHEN ZEROS, os zeros não aparecem por padrão, deixando o campo em branco. Se quisermos que os zeros sejam exibidos, basta remover essa instrução.

Também utilizamos uma variável de tela chamada SAIDA, que será responsável por exibir o nome e o e-mail retornados. Na linha 3, coluna 10, mostramos uma mensagem, e na coluna 40 exibimos o conteúdo da variável SAIDA.

Usamos o comando DISPLAY com a instrução BLANK SCREEN para limpar a tela, e em seguida realizamos um ACCEPT da variável ENTRADA, que aguardará a digitação do ID. E aqui está o ponto-chave: chamamos o módulo DLLCONS, passando a variável WRK-DADOS. Podemos ignorar a linha anterior ao CALL e focar apenas no envio dessa variável.

O módulo DLLCONS receberá o ID digitado — por exemplo, 003 —, fará a busca e retornará com o nome e o e-mail correspondentes. Esses dados retornam preenchidos na variável, e então os exibimos com DISPLAY.

Dessa forma, usamos ACCEPT para capturar o ID e DISPLAY para apresentar o resultado. Embora estejamos utilizando uma screen section, também seria possível usar apenas os comandos DISPLAY e ACCEPT diretamente. Esse é o funcionamento básico do nosso programa de consulta!

Vamos compilar o programa de consulta:

IDENTIFICATION DIVISION.
PROGRAM-ID. CONSULTA.

ENVIRONMENT DIVISION.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 WRK-DADOS.
   05 WRK-ID     PIC 9(003) VALUE ZEROS.
   05 WRK-NOME   PIC X(020) VALUE SPACES.
   05 WRK-EMAIL  PIC X(030) VALUE SPACES.

SCREEN SECTION.
01 TELA.
   05 BLANK SCREEN.
01 Entrada.
   05 LINE 01 COLUMN 10 VALUE "Digite o ID do cliente: ".
   05 LINE 01 COLUMN 40 USING WRK-ID BLANK WHEN ZEROS.

01 Saida.
   05 LINE 03 COLUMN 10 VALUE "Nome ".
   05 LINE 03 COLUMN 40 USING WRK-NOME.
   05 LINE 05 COLUMN 10 VALUE "Email ".
   05 LINE 05 COLUMN 40 USING WRK-EMAIL.

PROCEDURE DIVISION.
   DISPLAY TELA.
   ACCEPT ENTRADA.
*  CALL "DLLCONS" USING WRK-ID, WRK-NOME, WRK-EMAIL.
   DISPLAY SAIDA.

GOBACK.

Implementação do Programa Modular DLLCONS

Agora, vamos criar o programa modular, que será chamado DLLCONS. Um detalhe importante: o nome do programa precisa ser exatamente o mesmo do arquivo-fonte, ou seja, os dois devem ter o mesmo nome.

A variável LNK-DADOS é idêntica à estrutura utilizada anteriormente. Aqui, utilizamos a linkage para fazer a procedure. Recebemos os dados por ela — lembrando que será recebido o ID digitado, que chegará até este ponto do código.

Em seguida, fazemos uma verificação: qual foi o ID recebido? Se for 1, o programa preenche os dados com "Maria Eduarda"; se for 2, com "Carlos Alberto"; e se for qualquer outro valor, exibe as mensagens "NOME NÃO ENCONTRADO" e "EMAIL NÃO ENCONTRADO".

Depois disso, salvamos o programa e realizamos a compilação.

IDENTIFICATION DIVISION.
PROGRAM-ID. DLLCONS.

DATA DIVISION.
LINKAGE SECTION.
01 LNK-DADOS.
   05 LNK-ID     PIC 9(003) VALUE 0.
   05 LNK-NOME   PIC X(020) VALUE SPACES.
   05 LNK-EMAIL  PIC X(030) VALUE SPACES.

PROCEDURE DIVISION USING LNK-DADOS.
   EVALUATE LNK-ID
       WHEN 1
           MOVE "MARIA EDUARDA " TO LNK-NOME
           MOVE "MARIA@GMAIL.COM" TO LNK-EMAIL
       WHEN 2
           MOVE "CARLOS ALBERTO " TO LNK-NOME
           MOVE "CARLOS@GMAIL.COM" TO LNK-EMAIL
       WHEN OTHER
           MOVE "NOME NAO ENCONTRADO" TO LNK-NOME
           MOVE "EMAIL NAO ENCONTRADO" TO LNK-EMAIL
   END-EVALUATE.

GOBACK.

Teste e Execução do Programa

Vamos lá! Agora vamos testar, executar a consulta e verificar se o módulo DLLCONS está funcionando corretamente.

Vamos ampliar um pouco a explicação. Só para relembrar o que acontece na consulta: ela recebe o ID digitado e chama o módulo DLLCONS.

Vamos iniciar: digitamos "consulta", pressionamos "Enter", a tela é limpa e o sistema fica aguardando a entrada do ID do cliente.

Repare no detalhe visual: o recurso BLANK WHEN ZEROS evita que múltiplos zeros apareçam, o que deixa a exibição mais limpa.

Vamos digitar 001 e pressionar "Enter". Esse valor 001 é enviado, chega até o DLLCONS, entra no programa e é comparado. Como o ID é 1, ele retorna os dados correspondentes, como nome e e-mail de Maria Eduarda.

Ap testar com 002, ele retornou os dados de Carlos Alberto. Já com 003, como esse ID não está cadastrado, ele entra no bloco OTHER e exibe "NOME NÃO ENCONTRADO" e "EMAIL NÃO ENCONTRADO".

Conclusão e Possibilidades Futuras

Com isso, um universo de possibilidades se abre. Podemos criar um programa principal que chama um módulo, passa o ID, por exemplo, e esse módulo entra em ação. Dentro dele, podemos fazer com que um arquivo seja aberto. O módulo abrirá o arquivo, receberá a chave, buscará a informação e, se encontrá-la, irá preenchê-la.

Em vez de fazer um move direto, com valores hardcoded, transferimos o registro do arquivo para as variáveis. Basta seguir esse processo: enviamos o layout do arquivo, o módulo preenche os dados e os devolve ao programa principal.

Esse programa principal passa a ser o construtor da interface. Ele não gera os dados em si, apenas os solicita. O módulo trata os dados e devolve as informações prontas. Com o retorno em mãos, o programa monta a tela de apresentação.

Então, abordamos aqui dois conceitos importantes:

  1. Modularização — transformar partes do código em DLLs;
  2. Linkage — a técnica de passagem de dados entre programas.

Até a próxima!

Sobre o curso Praticando Cobol: Modularização e linkage

O curso Praticando Cobol: Modularização e linkage possui 11 minutos de vídeos, em um total de 17 atividades. Gostou? Conheça nossos outros cursos de em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Escolha a duração
do seu plano

Conheça os Planos para Empresas