Você está na página 1de 9

COBOL

COBOL uma linguagem de programao de Terceira Gerao. Este nome a sigla de COmmon Business Oriented Language (Linguagem Orientada aos Negcios), que define seu objetivo principal em sistemas comerciais, financeiros e administrativos para empresas e governos. O COBOL 2002 inclui suporte para programao orientada a objetos e outras caractersticas das linguagens modernas. Entretanto, a maior parte deste artigo est baseado no COBOL 85.

Pr-histria e Especificao
O COBOL foi criado em 1959 durante o CODASYL (Conference on Data Systems Language), um dos trs comits propostos numa reunio no Pentgono em Maio de 1959, organizado por Charles Phillips do Departamento de Defesa dos Estados Unidos. O CODASYL foi formado para recomendar as diretrizes de uma linguagem para negcios. Foi constitudo por membros representantes de seis fabricantes de computadores e trs rgos governamentais, a saber: Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, e Sylvania Electric Products, e a Fora Area dos Estados Unidos, o David Taylor Model Basin e a Agncia Nacional de Padres (National Bureau of Standards ou NBS). Este comit foi presidido por um membro do NBS. Um comit de Mdio Prazo e outro de Longo Prazo foram tambm propostos na reunio do Pentgono. Entretanto, embora tenha sido formado, o Comit de Mdio Prazo nunca chegou a funcionar; e o Comit de Longo Prazo nem chegou a ser formado. Por fim, um subcomit do Comit de Curto Prazo desenvolveu as especificaes da linguagem COBOL. Este subcomit era formado por seis pessoas:

William Selden e Gertrude Tierney da IBM Howard Bromberg e Howard Discount da RCA Vernon Reeves e Jean E. Sammet da Sylvania Electric Products

Este subcomit completou as especificaes para o COBOL no fim do ano de 1959. Elas foram inspiradas em grande parte pela linguagem FLOW-MATIC inventada por Grace Hopper, e pela linguagem COMTRAN da IBM inventada por Bob Bemer. As especificaes foram aprovadas pelo CODASYL. A partir da foram aprovadas pelo Comit Executivo em Janeiro de 1960, e enviadas grfica do governo, que as editou e imprimiu com o nome de COBOL 60. O COBOL foi desenvolvido num perodo de seis meses, s que a primeira verso(COBOL 60), no durou muito tempo devido inmeros

erros que foram rapidamente corrigidos na verso COBOL 61 e foi base para os primeiros compiladores de COBOL. A verso COBOL 61 serviu como base para outra verso, que foi lanada em 1962 e foi nomeada de COBOL-61 - Verso Estendida, que contia novos elemento quando comparada com as verses anteriores. Compiladores COBOL geralmente se baseavam no COBOL Padro Nacional Americano(ANSI), que adotou o COBOL como uma linguagem padro. Que teve seu primeiro padro noticiado em 1968 e posteriormente em 1974, 1985 e 1989. A ltima reviso foi concluda em 2002.

Definindo as caractersticas
O COBOL foi definido na especificao original, possuia excelentes capacidades de autodocumentao, bons mtodos de manuseio de arquivos, e excepcional modelagem de dados para a poca, graas ao uso da clusula PICTURE para especificaes detalhadas de campos. Entretanto, segundo os padres modernos de definio de linguagens de programao, tinha srias deficincias, notadamente sintaxe prolixa e falta de suporte de variveis locais, recorrncia, alocao dinmica de memria e programao estruturada. A falta de suporte linguagem orientada a objeto compreensvel, j que o conceito era desconhecido naquela poca. O COBOL possui muitas palavras reservadas, e difcil evitar de usar alguma inadvertidamente sem o uso de alguma conveno, como adicionando um prefixo a todos os nomes de variveis. A especificao original do COBOL suportava at cdigo auto-modificvel atravs do famoso comando "ALTER X TO PROCEED TO Y". Entretanto, a especificao do COBOL foi redefinida de tempos em tempos para atender a algumas das crticas, e as ltimas definies do COBOL corrigiram muitas destas falhas, acrescentando estruturas de controle melhoradas, orientao a objeto e removendo a possibilidade de codificao auto-modificvel.

Mantendo-se forte
Embora o COBOL tenha sido proposto originalmente como soluo para resolver problemas de programao do governo e das foras armadas americanas, programas COBOL continuam em uso na maioria das empresas comerciais em todo o mundo, notadamente nas instituies financeiras, e em praticamente todos os sistemas operacionais, incluindo o IBM z/OS, o Microsoft Windows e a famlia Unix/Linux. A base global de cdigo imensa e os aplicativos, de tempos em tempos, so sujeitos a manuteno. O custo de reescrever um aplicativo COBOL, j depurado, em uma nova linguagem no justifica os benefcios que possa eventualmente trazer. No fim dos anos 90 o Gartner Group, uma empresa de pesquisa na rea de processamento de dados, estimou que dos 300 bilhes de linhas de cdigo-fonte existentes no mundo, 80% - ou cerca de 240 bilhes de linhas - eram em COBOL. Eles tambm reportaram que mais de metade dos novos aplicativos de misso crtica ainda estavam sendo desenvolvidos usando o COBOL. Ao se aproximar o fim do sculo XX houve uma febre de atividade de programadores COBOL para corrigir os efeitos do bug do milnio, em certos casos em sistemas desenvolvidos por estes mesmos programadores h dcadas. Este problema foi mais

crtico no cdigo COBOL porque as datas so primordiais em aplicativos comerciais, e a maioria dos aplicativos comerciais foram escritos em COBOL. Algumas pessoas acreditam que o uso de aritmtica decimal codificada em binrio fez com que programas desenvolvidos sem a previso de datas com ano de 4 dgitos ficassem particularmente vulnerveis a falhas com o problema do ano 2000; entretanto difcil justificar esta opinio. Outros argumentam que a aritmtica BCD do COBOL evitou muitos outros problemas que poderiam ocorrer com o uso ingnuo do ponto flutuante em clculos financeiros. O COBOL provou ser durvel e adaptvel. O padro atual do COBOL o COBOL2002. O COBOL2002 suporta agora convenincias modernas como Unicode, gerao de XML e conveno de chamadas de/para linguagens como o C, incluso como linguagem de primeira classe em ambientes de desenvolvimento como o .NET da Microsoft e a capacidade de operar em ambientes fechados como Java (incluindo COBOL em instncias de EJB) e acesso a qualquer base SQL. No Brasil a rea financeira e de seguros so os principais mercados de COBOL e est aquecido devido grandes compras e fuses das instituies. Mas hoje em dia o COBOL no muito utilizado no desenvolvimento de novos programas, a maioria dos novos programas Cobol escrita apenas para estender ou suportar aplicaes existentes no mainframe, pode-se dizer que o COBOL est fora de moda. Muitas das empresas que possuem programas em COBOL gostariam de migrar para outras linguagens, mas muitas vezes esta migrao no ocorre devido ao alto custo e ao risco deste processo. O tempo da migrao tambm um fator que mantm o COBOL no mercado.

Estrutura Bsica
O COBOL consiste basicamente em quatro divises separadas:

IDENTIFICATION DIVISION

A IDENTIFICATION DIVISION possui informaes documentais, como nome do programa, quem o codificou e quando essa codificao foi realizada.

ENVIRONMENT DIVISION

A ENVIRONMENT DIVISION descreve o computador e os perifricos que sero utilizados pelo programa.

DATA DIVISION

A DATA DIVISION descreve os arquivos de entrada e sada que sero usadas pelo programa. Tambm define as reas de trabalho e constantes necessrias para o processamento dos dados.

PROCEDURE DIVISION

A PROCEDURE DIVISION contm o cdigo que ir manipular os dados descritos na DATA DIVISION. nesta diviso que o desenvolvedor descrever o algoritmo do programa.
IDENTIFICATION DIVISION ENVIRONMENT DIVISION * CONFIGURATION SECTION * INPUT-OUTPUT SECTION DATA DIVISION * FILE SECTION * WORKING-STORAGE SECTION * LOCAL-STORAGE SECTION * LINKAGE SECTION * COMMUNICATION SECTION * REPORT SECTION * SCREEN SECTION PROCEDURE DIVISION

Segue um exemplo da estrutura bsica de um programa chamado EXEMPLO:


IDENTIFICATION DIVISION. * PROGRAM-ID. EXEMPLO. * AUTHOR. WIKIPEDI. * DATE-WRITTEN. 20/09/2009 * ENVIRONMENT DIVISION. * CONFIGURATION SECTION. * SPECIAL-NAMES. * DECIMAL-POINT IS COMMA. * DATA DIVISION. * WORKING-STORAGE SECTION. * PROCEDURE DIVISION. *

rea de codificao no COBOL :

Colunas Descrio
1a6 7 branco (ser preenchido com a numerao COBOL) (branco) linha de codificao * (asterisco) linha de comentrio - (hfen) continuao de literal no numrico instrues do COBOL iniciando na coluna 8

8 a 72

Ol Mundo
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO-WORLD. * ENVIRONMENT DIVISION. * DATA DIVISION. * PROCEDURE DIVISION. PARA-1. DISPLAY "Hello, World!!". * STOP RUN.

Se copiar e colar este exemplo, cuidado com a identificao, j que ela fundamental (pelo menos) em compiladores COBOL padro [ANSI]. Em alguns compiladores, o cdigo acima poderia ser escrito sem especificao das divises que no so utilizadas. Ficando apenas assim:
DISPLAY "Ol, Mundo.".

Escrever programas COBOL omitindo divises e sees ou escrevendo fora da faixa convencionalmente aceita pelo ANSI (colunas de 8 a 72) pode prejudicar o intercmbio de programas entre ferramentes e plataformas. Se estiver disponibilizadas ferramentas de apoio do COBOLware o resultado poderia ser exibido em uma janela modo grfico e no modo texto.
EXEC COBOLware SEND Message "Ol, Mundo." END-EXEC.

Programa que monta formato de data: Exemplo da sada deste programa : Data do dia ...... : IPIRANGA, 07 de SETEMBRO de 1882.
*----------------------------------------------------------------PROCEDURE DIVISION. *----------------------------------------------------------------MOVE FUNCTION CURRENT-DATE TO WS-DATA-CORRENTE STRING 'IPIRANGA, ' DELIMITED BY SIZE WS-DIA DELIMITED BY SIZE ' de ' DELIMITED BY SIZE NOME-MES ( WS-MES ) DELIMITED BY SPACES ' de ' DELIMITED BY SIZE WS-ANO-INTEIRO DELIMITED BY SIZE '.' DELIMITED BY SIZE INTO WS-DATA-EXTENSO END-STRING DISPLAY 'Data do dia ...... : ' WS-DATA-EXTENSO GOBACK.

Programa que encontra os 10 primeiros numeros perfeitos.


IDENTIFICATION DIVISION. ****************************************************************** * PROGRAM-ID. PERFEITO. AUTHOR. WIKIPEDIA. DATE-WRITTEN. 20/08/2009. DATE-COMPILED. * ****************************************************************** * ENVIRONMENT DIVISION * ****************************************************************** ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. * ****************************************************************** * DATA DIVISION * ****************************************************************** DATA DIVISION. * ****************************************************************** * WORKING-STORAGE SECTION. * ****************************************************************** WORKING-STORAGE SECTION. * *----------------------------------------------------------------* * WS-AUXILIARES * *----------------------------------------------------------------* 01 WS-AUXILIARES. 05 WS-DIVIDENDO PIC 9(12) VALUE 0. 05 WS-INDEX PIC 9(05) VALUE 0. 05 WS-MEIO PIC 9(10) VALUE 0. 05 WS-INDEX2 PIC 9(05) VALUE 0. 05 WS-RESTO PIC 9(10) VALUE 0. 05 WS-SOMA PIC 9(12) VALUE 0. * ****************************************************************** * PROCEDURE DIVISION * ****************************************************************** PROCEDURE DIVISION . * ****************************************************************** * MAINLINE * ****************************************************************** MAINLINE. * PERFORM 1000-INICIO * PERFORM 2000-PROCESSO * PERFORM 3000-FINAL. * ****************************************************************** * 1000-INICIO * ****************************************************************** 1000-INICIO.

* INITIALIZE . WS-AUXILIARE

* ****************************************************************** * 2000-PROCESSO * ****************************************************************** 2000-PROCESSO. PERFORM WS-DIVIDENDO VARYING 0 BY 1 UNTIL WS-INDEX GREATER 9 * COMPUTE WS-MEIO = WS-DIVIDENDO / 2 * PERFORM WS-DIVISOR VARYING 0 BY 1 UNTIL WS-INDEX2 GREATER WS-MEIO * DIVIDE WS-DIVIDENDO BY WS-DIVISOR GIVING WS-PRODUTO REMAINDER WS-RESTO * IF WS-RESTO EQUAL ZEROS * ADD WS-DIVISOR TO WS-SOMA END-IF * END-PERFORM * IF WS-SOMA EQUAL WS-DIVIDENDO * DISPLAY WS-DIVIDENDO ' NUMERO PERFEITO' ADD 1 TO WS-INDEX END-IF END-PERFORM . * ****************************************************************** * 3000-FINAL * ****************************************************************** 3000-FINAL. * GOBACK. * ****************************************************************** * FIM * ******************************************************************

Vises opostas do COBOL


Todas as linguagens de programao tm seus defensores e detratores. J foi dito que com linguagens como o C, o C++ e Java a nica maneira de modificar o cdigo legado reescrevendo-o a cada vez. Por outro lado, j se disse do COBOL que na realidade s h um nico programa COBOL que foi copiado e modificado bilhes de vezes.

Crtica
A motivao do desenvolvimento do COBOL era de facilitar a programao tornando a linguagem a mais prxima possvel do ingls. Embora esta idia parea razovel, na

prtica a tarefa mais difcil na programao reduzir uma computao complexa numa seqncia de passos simples, no associando estes passos com uma linguagem natural. Os crticos argumentam que a sintaxe prolixa e a estrutura geral do COBOL s serve para aumentar o tamanho do programa e dificultar o desenvolvimento do pensamento preciso necessrio para o desenvolvimento de software. O cientista de computao Edsger Dijkstra observou em um artigo em 1975 (How do we tell truths that might hurt?): "O uso do COBOL mutila a mente; seu ensino deveria, portanto, ser considerado um crime". Antigas verses do COBOL no do suporte a variveis locais e portanto no implementam inteiramente a programao estruturada. Alguns programadores brincam dizendo que a extenso orientada a objeto do COBOL deveria ser chamada ADD 1 TO COBOL GIVING COBOL. Trata-se de uma analogia com o C++, um trocadilho da sintaxe da linguagem C para incrementar uma varivel, e evidenciar a prolixidade do COBOL comparada com o C.

Defesa
Por outro lado, os defensores do COBOL argumentam que os que o criticam e ironizam a linguagem nunca foram programadores COBOL e geralmente o desconhecem. Na maioria das verses atuais os compiladores no fazem distino entre maisculas e minsculas, embora o compilador ir transformar em maisculas todas as palavraschave antes de process-las. Se algum quiser tornar o COBOL menos prolixo do que , geralmente consegue. Por exemplo o cdigo:
ADD A TO B GIVING C. DIVIDE 2 INTO C GIVING C.

pode ser escrito assim:


COMPUTE C = (A + B) / 2.

e o verbo COMPUTE pode manipular frmulas bastante complexas em forma algbrica. Por exemplo, o cdigo em COBOL de uma equao da frmula de Bhaskara

pode ser escrita, usando o verbo COMPUTE, que pode manipular frmulas bastante complexas em forma algbrica, como esta:
COMPUTE X = (-B + (B ** 2 - (4 * A * C)) **.5) / (2 * A)

ou esta:
MULTIPLY B BY B GIVING B-SQUARED. MULTIPLY 4 BY A GIVING FOUR-A. MULTIPLY FOUR-A BY C GIVING FOUR-A-C. SUBTRACT FOUR-A-C FROM B-SQUARED GIVING RESULT-1.

COMPUTE RESULT-2 = RESULT-1 ** .5. SUBTRACT B FROM RESULT-2 GIVING NUMERATOR. MULTIPLY 2 BY A GIVING DENOMINATOR. DIVIDE NUMERATOR BY DENOMINATOR GIVING X.

Enquanto linguagens concisas como o C podem encorajar desenvolvedores a escrever cdigo que pode ser difcil a entender e depurar, o COBOL encoraja o desenvolvimento inteligvel ao nvel da instruo.

Referncias

Sammet, J.E. (1981). "The Early History of COBOL." In History of Programming Languages, by Wexelblat, R.L., ed. New York: ACM Monograph Series. SAADE, Joel. COBOL Sem Mistrios. So Paulo: Novatec, 1997, 520 p. ISBN 85-85184-61-2.

Você também pode gostar