Curso de COBOL - Aula 1

Notas da Aula de 08.11.2008 (sábado) do Curso de COBOL

da Escola Alcides Maya com o Professor Cabral

COBOL = COmmon Business Oriented Language

*** Histórico ***

1959 – COBOL ANSI

1968 – COBOL 68

1974 – COBOL 74 (o mais presente até hoje)

1985 – COBOL 85 (inclui facilidades para microcomputadores)

anos 2000:

COBOL 2000 (inclui facilidades para Internet)

COBOL O.O.

COBOL WIN

*** Características ***

* Linguagem fácil de aprender e fácil de usar. Comandos explícitos.

* Estrutura rígida, mas simples. Por exemplo, a declaração das variáveis tem que ser feita no início!

* Programas longos, mas claros e autodocumentados (fator de sobrevivência).

*** Presença ***

Mundo: 600 milhões de programas em 1999

Porto Alegre: 120 mil programas em 2006.

Banrisul: 25 mil programas

CEEE: 12 mil programas

Santander: 15 mil programas

Rodoviária de Porto Alegre (com frente PHP)

(“COBOL ta na moda de novo”)

*** Bibliografia Recomendada ***

Alex Bastos. Programação COBOL. (para máquinas IBM)

Nancy Stern. Robert Stern. COBOL.

*** Estrutura ***

Livro: Capítulos – Seções – Parágrafos – Sentenças – Orações

COBOL: Divisões – Seções – Parágrafos – Sentenças – Comandos

*** Regras de Formatação ***

80 colunas (herança dos cartões perfurados)

* Colunas 1 a 6: números das linhas

Numeração das linhas não é necessária (apenas herança dos cartões), mas é útil para localização de algum erro eventual apontado pelo compilador.

Numeração automática folgada, de 100 em 100 (para facilitar a manutenção no caso de necessidade de inserção de algumas linhas no meio das outras.)

* Coluna 7:

– (hífen) indica continuação da linha anterior

* (asterisco) indica linha de comentário

* Colunas 8 a 11: “Margem A” – usada para Divisões, Seções e Parágrafos

* Colunas 12 a 72: “Margem B” – usada para Sentenças e Comandos

* Colunas 73 a 80: identificação do programa – hoje “nome único” automático OU nome-&-data-alteração

*** Divisões ***

IDENTIFICATION DIVISION.

ENVIRONMENT DIVISION.

DATA DIVISION.

PROCEDURE DIVISION.

*** Exemplo do menor programa COBOL ***

IDENTIFICATION DIVISION.

ENVIRONMENT DIVISION.

DATA DIVISION.

PROCEDURE DIVISION.

INICIO.

DISPLAY “OLÁ!”.

STOP RUN.

*** Sintaxe da Identification Division ***

IDENTIFICATION DIVISION.

PROGRAM-ID. Identificação do programa.

AUTHOR. Nome do autor.

DATE-WRITTEN. Data de criação do programa.

DATA-COMPILED. (deixar em branco: o compilador completa automaticamente)

INSTALLATION. Setor ou local da empresa.

REMARKS. Observações.

*** Sintaxe da Environment Division ***

CONFIGURATION SECTION.

SOURCE-COMPUTER. Computador-fonte (onde se fez o programa).

OBJECT-COMPUTER. Computador-objeto (mínimo exigido onde o programa vai rodar).

SPECIAL-NAMES. DECIMAL-POINT IS COMMA.

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT Nome-do-arquivo ASSIGN TO Periférico.

*** Regras para Formação de Nomes ***

Tamanho máximo: 30 caracteres.

Inicia com letra, e segue com letra ou algarismo ou hífen.

Não pode terminar por hífen e não pode ter dois ou mais hífens consecutivos.

*** Periféricos Mais Utilizados ***

DISK

PRINTER

TAPE

KEYBOARD

E outros utilizados somente para relatórios (serão vistos nas próximas aulas).

*** Exemplo de Input-Output Section ***

INPUT-OUTPUT SECTION.

FILE-CONTROL.

SELECT Disco-1 ASSIGN TO DISK.

SELECT Relatorio ASSIGN TO PRINTER.

SELECT Fita ASSIGN TO TAPE.

SELECT Entrada ASSIGN TO KEYBOARD.

*** Sintaxe da Data Division ***

DATA DIVISION.

FILE SECTION. (descrição dos arquivos)

...

WORKING-STORAGE SECTION. (descrição das variáveis “temporárias” da memória)

REPORT SECTION. (só para a geração de relatórios)

*** Características da Data Division ***

* Número de níveis para Itens de Grupo e para Itens Elementares: desde o 01 até o 49.

Habitualmente são usados apenas os números ímpares dos níveis, para poder incluir algum nível intermediário.

Nível 77 é especial para Itens Independentes.

* Cláusula PICTURE (indicada habitualmente a partir da coluna 40) indica os Tipos/Máscaras de dados.

Itens elementares: sempre devem ter PICTURE.

Itens de grupo: NÃO podem ter PICTURE.

Cláusula VALUE permite indicar um valor inicial para um item independente.

* Tipos/Máscaras de dados:

A – Alfabético: do A até o Z e mais o <branco>

9 – Numérico: do 0 até o 9

X – Alfanumérico: tudo (números de telefone têm que ser Alfanuméricos para evitar problemas com DDD) :-}

*** Exemplo de File Section ***

FILE SECTION.

FD DISCO-1. (file description)

01 REGISTRO-1.

02 NOME PIC A(36).

02 DATA-NASC.

03 DIA PIC 9(2).

03 MES. PIC 9(2).

03 ANO PIC 9(4).

02 ENDEREÇO.

03 RUA PIC X(25).

03 NUM PIC 9(5).

03 COMPL PIC X(8).

03 CEP PIC 9(8).

02 TELEFONE.

03 RES PIC X(11).

03 COM PIC X(11).

03 CEL PIC X(11).

FD DISCO-2.

01 REGISTRO-2.

03 NOME PIC A(36).

03 NOTAS.

05 N1 PIC 9(2)V9(1).

05 N2 PIC 99V9.

05 N3 PIC 99V9(1).

05 N4 PIC 9(2)V9.

03 TURMA PIC X(3).

03 TURNO PIC A(1).

*** Exemplo de Working-Storage Section ***

WORKING-STORAGE SECTION.

77 CAMPO-MEMÓRIA PIC 99V99.

77 CONTADOR PIC 9(5) VALUE 0.

77 SOMA PIC 9(12) VALUE 50.

77 TROCOU PIC AAA VALUE “NÃO”.

01 REGISTRO-3.

...

01 REGISTRO-4.

...

*** Curiosidades ***

COBOL é “Common” porque não tem que pagar Royalties nem licença para ninguém (fator para disseminação nas empresas)

Em 1991, as Loterias da Caixa Federal usaram os últimos cartões perfurados no Brasil.

Uma das “gambiarras” para contornar o “bug” do ano 2000 foi postergar o problema em 28 anos, aproveitando a regularidade do calendário.

O calendário do Windows Vista (ainda) tem um “bug”: dois dias 28/11/2008. :-P

As eleições norte-americanas ainda hoje usam cartões perfurados, há mais de 100 anos.

Site do professor Cabral: www.inf.ufrgs.br/~cabral/

Site do guru do HTML, Jakob Nielsen: www.useit.com

Outros fatores de sobrevivência são o DECIMAL-POINT IS COMMA e o comando SORT.

Só COBOL tem máscara para zeros à esquerda para a parte inteira dos números e para zeros à direita da parte fracionária dos números.

Pascal foi criado por Niklaus Wirth (e não por Blaise Pascal) com o nome de “My Own Language”. J (Sem pretensões comerciais, portanto. (não tinha nem exponenciação, já que Wirth não usava.) A UCLA é que convenceu Wirth a bolar uma versão comercial da linguagem.)