COBOL

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
COBOL
Paradigma procedural,
Orientação a objeto
Surgido em 1959 (1959)
Última versão COBOL2002
Criado por Grace Hopper, William Selden, Gertrude Tierney, Howard Bromberg, Howard Discount, Vernon Reeves, Jean E. Sammet.
Estilo de tipagem: Forte e estática
Dialetos: HP3000 COBOL/II, COBOL/2, IBM OS/VS COBOL, IBM COBOL/II, IBM COBOL SAA, IBM Enterprise COBOL, IBM COBOL/400, IBM ILE COBOL, Unix COBOL X/Open, Micro Focus COBOL, Microsoft COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, DOSVS COBOL, UNIVAC COBOL, Realia COBOL, Fujitsu COBOL, ICL COBOL, ACUCOBOL-GT, COBOL-IT, DEC COBOL-10, DEC VAX COBOL, Wang VS COBOL, Visual COBOL, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL (um variante de COBOL74 para criar consolas em terminais baseados em texto)
Influenciada por FLOW-MATIC, COMTRAN, FACT
Influenciou PL/I, CobolScript, ABAP

COBOL (sigla de COmmon Business Oriented Language) - Linguagem Comum Orientada para os Negócios é uma linguagem de programação orientada para o processamento de banco de dados comerciais.[1] É a linguagem de programação inteira mais usada, produto do Departamento de Defesa norte-americano sob a direção da contra-almirante Grace Murray Hopper.[2]

As especificações do COBOL 2002 incluem suporte à programação orientada a objetos e outras características das linguagens modernas.[3]

História e especificação[editar | editar código-fonte]

O COBOL foi criado por um comitê de investigadores de várias instituições civis e governamentais durante o segundo semestre de 1959. As especificações eram em grande parte inspiradas na linguagem de programação FLOW-MATIC inventada pela Grace Hopper - referida como "a mãe da língua COBOL." A linguagem de programação da IBM COMTRAN inventada pelo Bob Bemer também foi utilizada, mas a especificação da FACT da Honeywell tinha sido distribuída até tarde aos membros do comitê do processo, e teve relativamente pouco impacto. O uso corrente e estudo do FLOW-MATIC como a única linguagem do grupo de estudo que efetivamente tinha sido utilizada numa situação real, fez com que fosse bastante atractiva ao comitê.[4]

Em 8 de abril de 1959, na CODASYL (Conference on Data Systems Language) destinada a usuários e pessoas da universidade, no centro de computação da Universidade da Pensilvânia, o Departamento de Defesa dos Estados Unidos, posteriormente, concordou em patrocinar e supervisionar as próximas atividades. A reunião presidida por Charles A. Phillips foi realizada no Pentágono em 28/29 de maio de 1959 (exatamente um ano após a reunião em Zurique do ALGOL 58), não foi decidido definir de três comissões: de curto, médio e longo alcance (a última nunca foi realmente formada). Foi o Comitê de Curto Prazo, presidido por Joseph Wegstein do National Bureau of Standards que durante os meses seguintes criou uma descrição da primeira versão do COBOL.[5] O comitê foi constituído por membros representantes de seis fabricantes de computadores e três órgãos governamentais, a saber: Burroughs Corporation, IBM, Minneapolis-Honeywell (Honeywell Labs), RCA, Sperry Rand, e Sylvania Electric Products, e a Força Aérea dos Estados Unidos, o David Taylor Model Basin e a Agência Nacional de Padrões (National Bureau of Standards ou NBS). Este comitê foi presidido por um membro do NBS. Um comitê de Médio Prazo e outro de Longo Prazo foram também propostos na reunião do Pentágono. Entretanto, embora tenha sido formado, o Comitê de Médio 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 especificações da linguagem COBOL. Este subcomitê era formado por seis pessoas:

A decisão de usar o nome "COBOL" foi feita em uma reunião do comitê realizada em 18 de setembro de 1959. O subcomitê completou as especificações para o COBOL em dezembro de 1959.

O primeiro compilador para COBOL foi posteriormente implementado em 1960 e em 6/7 de dezembro, essencialmente o mesmo programa COBOL funcionou em dois computadores diferentes, um computador RCA e uma Remington-Rand Univac, demonstrando que a compatibilidade pode ser alcançada.[7]

ANS COBOL 1968[editar | editar código-fonte]

Depois de 1959 o COBOL sofreu várias modificações e melhorias. Na tentativa de superar o problema da incompatibilidade entre diferentes versões de COBOL, o American National Standards Institute (ANSI) desenvolveu uma forma padrão de língua, em 1968, após o lançamento da versão COBOL-61 que se tornou a pedra angular para mais versões. Esta versão ficou conhecida como American National Standard (ANS) COBOL.

COBOL 1974[editar | editar código-fonte]

Em 1974, a ANSI publicou uma versão revista da (ANS) COBOL, que continha uma série de recursos que não estavam na versão 1968.[7]

COBOL 1985[editar | editar código-fonte]

Em 1985, a ANSI publicou ainda uma outra versão revista que tinha novas funcionalidades que não apareciam no padrão 1974, como construções de linguagem mais notavelmente estruturadas ("terminadores de escopo"), incluindo END-IF, END-PERFORM, END-READ, etc.

COBOL 2002 e o COBOL orientado a objeto[editar | editar código-fonte]

A linguagem continua a evoluir até hoje. No início de 1990, decidiu-se acrescentar a orientação a objetos na próxima revisão completa do COBOL. A estimativa inicial era ter esta revisão concluída em 1997 e um ISO CD (Committee Draft, rascunho do comitê) disponível até 1997. Alguns fornecedores (incluindo a Micro Focus, a Fujitsu, a Veryant e a IBM) introduziram a sintaxe orientada a objetos com base nos rascunhos de 1997 ou outro da revisão completa. A versão final aprovada no padrão ISO (adotado como um padrão ANSI por INCITS) foi aprovada e disponibilizado em 2002.

Assim como a C++ e a Java, os compiladores COBOL estão disponíveis enquanto a linguagem se move em direção à padronização. A Fujitsu, a Micro Focus e a Raincode atualmente suportam os compiladores COBOL orientados a objetos visando o .NET.[8]

O COBOL 2002 incluiu recursos além orientação a objetos, (mas não estão limitados a):

  • Suporte a idiomas (incluindo, mas não limitado a suporte ao Unicode)
  • Processamento baseado em Locale
  • Funções amigáveis ao usuário
  • CALL (e função) protótipos (para a verificação de parâmetro em tempo de compilação)
  • Ponteiros e sintaxe para a obtenção/liberação de armazenagem
  • Convenções de chamada de e para línguas não-COBOL, como C
  • Suporte para execução em ambientes estruturas como .NET e Java (incluindo COBOL instanciado como Enterprise JavaBeans)
  • Suporte a Bit e Bool
  • Suporte a "True" (até esta melhoria, itens binários eram truncados (pela especificação de base-10) dentro da divisão de dados)
  • Suporte a ponto flutuante
  • Resultados aritméticos padrão (ou portáteis)
  • Geração e parsing de XML

História de normas COBOL[editar | editar código-fonte]

As especificações aprovadas por todo o Comitê de Curto Prazo foram aprovadas pelo Comitê Executivo em 3 de janeiro de 1960, e enviadas para a gráfica do governo que editou e imprimiu essas especificações como COBOL 60.

O American National Standards Institute (ANSI) produziu várias revisões do padrão COBOL, incluindo:

Após as alterações de 1985 o padrão ANSI (que era adotado pela ISO), o desenvolvimento e a apropriação foi assumida pela ISO. As seguintes edições e TRs (Relatórios Técnicos) foram emitidas pelo padrão ISO (e adotados como ANSI):

  • COBOL 2002
  • Finalizer Technical Report - 2003
  • Native XML syntax Technical Report - 2006
  • Bibliotecas de coleção de classes orientadas a objeto - aprovação pendente

Desde 2002, o padrão ISO também está disponível para o público codificado como ISO / IEC 1989.

O trabalho progride na próxima revisão integral da norma COBOL. A aprovação e disponibilidade era esperado primeiros em 2010. Para obter informações sobre esta revisão, ver o mais recente projeto desta revisão, ou para ver o que as outro trabalhos em progresso no padrão COBOL, consulte o site de normas do COBOL.

Legado[editar | editar código-fonte]

Programas em COBOL estão em uso globalmente em agências governamentais e militares além de empresas comerciais, e estão sendo executados em sistemas operacionais como o da IBM z/OS e z/VSE, as famílias POSIX (Unix / Linux, etc) e Windows da Microsoft, bem como Unisys OS 2200. Em 1997, o Gartner Group relatou que 80% dos negócios do mundo rodavam em COBOL com mais de 200 bilhões de linhas de código existentes e cerca de 5 bilhões de linhas de código novo por ano.[9]

Características[editar | editar código-fonte]

O COBOL teve como meta servir como uma linguagem de programação para negócios. Os programas para negócios não precisam de cálculos tão precisos como os encontrados em engenharia, assim o COBOL foi concebido basicamente com as características:[10]

  • Acesso rápido a arquivos e bases de dados
  • Atualização rápida de arquivos e bases de dados
  • Geração de uma grande quantidade de informações
  • Saída com um formato compreensível ao usuário

O COBOL é geralmente a linguagem escolhida em cálculos financeiros por suportar aritmética inteira aplicada a números muito grandes (milhões, bilhões etc) ao mesmo tempo que é capaz de lidar com números muito pequenos como frações de centavos. Outra característica é a formatação,[11] classificação e geração de relatórios.[2]

Olá, mundo[editar | editar código-fonte]

Um exemplo do programa "Olá, Mundo" em COBOL:

      IDENTIFICATION DIVISION.
      PROGRAM-ID. HELLO-WORLD.
      PROCEDURE DIVISION.
          DISPLAY 'Ola, mundo'.
          STOP RUN.


Existem vários dialetos do COBOL. Alguns compiladores, por exemplo, permitem o uso de aspas duplas, além do padrão de aspas simples:

      DISPLAY "Hello, world".

Olá, OS/360 cerca de 1972[editar | editar código-fonte]

Em um IBM System/360 executando OS/360 MVT 21.8f, por volta de 1972, o teste Olá, Mundo teria levado perfurado cartões de 80 colunas, contendo o código-fonte semelhante a:

//COBUCLG  JOB CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1)
//HELOWRLD EXEC COBUCLG,PARM.COB='MAP,LIST,LET'
//COB.SYSIN DD *
  001  IDENTIFICATION DIVISION.
  002  PROGRAM-ID.  'HELLO'.
  003  ENVIRONMENT DIVISION.
  004  CONFIGURATION SECTION.
  005  SOURCE-COMPUTER.  IBM-360.
  006  OBJECT-COMPUTER.  IBM-360.
  0065 SPECIAL-NAMES.
  0066     CONSOLE IS CNSL.
  007  DATA DIVISION.
  008  WORKING-STORAGE SECTION.
  009  77  HELLO-CONST   PIC X(12) VALUE 'HELLO, WORLD'.
  075  PROCEDURE DIVISION.
  090  000-DISPLAY.
  100      DISPLAY HELLO-CONST UPON CNSL.
  110      STOP RUN.
//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR
//            DD DSNAME=SYS1.LINKLIB,DISP=SHR
//GO.SYSPRINT DD SYSOUT=A
//

Estrutura básica[editar | editar código-fonte]

No COBOL há três tipos básicos de dados usados nas instruções:[11]

  • Numérico (sinalizado ou não, com decimal ou inteiros)
  • Alfanumérico
  • Constantes figurativas

O COBOL consiste basicamente em quatro divisões separadas:[12]

  • IDENTIFICATION DIVISION

A IDENTIFICATION DIVISION possui informações documentais, como nome do programa, quem o codificou e quando essa codificação foi realizada.

  • ENVIRONMENT DIVISION

A ENVIRONMENT DIVISION descreve o computador e os periféricos que serão utilizados pelo programa.

  • DATA DIVISION

A DATA DIVISION descreve os arquivos de entrada e saída que serão usadas pelo programa. Também define as áreas de trabalho e constantes necessárias para o processamento dos dados.

  • PROCEDURE DIVISION

A PROCEDURE DIVISION contém o código que irá manipular os dados descritos na DATA DIVISION. É nesta divisão 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

Área de codificação no COBOL[editar | editar código-fonte]

Colunas Descrição

1 a 6      branco (será preenchido com a numeração COBOL)
  7             (branco) LINHA DE CODIFICAÇÃO
               * (asterisco) linha de comentário
               - (hífen) continuação de literal não numérico
8 a 72          instruções do COBOL iniciando na coluna 8

Críticas e defesas[editar | editar código-fonte]

Falta de estruturalismos[editar | editar código-fonte]

Em sua carta a um editor em 1975, intitulado "Como é que vamos dizer verdades que podem machucar?" que era crítica a várias linguagens de programação contemporâneas como o COBOL, o cientista da computação e vencedor do Prêmio Turing, Edsger Dijkstra comentou que "O uso de COBOL mutila a mente, o seu ensino deve, portanto, ser considerado como uma infração penal".[13]

Em sua resposta divergente ao artigo de Dijkstra e "declaração ofensiva", o cientista da computação Howard E. Tompkins defendeu que COBOL era estruturada: "Os programas em COBOL com controle de fluxo complicado na verdade tendem a "paralisar a mente'", mas isso foi porque "Há grande quantidade de programas de aplicativos de negócios escritos por outros programadores que nunca aprenderam corretamente sobre o benefício de manter o COBOL estruturado..."[14]

Além disso, a introdução de OO-COBOL adicionou suporte para código orientada a objeto, bem como funções definidas pelo usuário e tipos de dados definidos pelo usuário para o repertório de COBOL.

Problemas de compatibilidade após normalização[editar | editar código-fonte]

O COBOL 85 não era totalmente compatível com as versões anteriores, resultando nem um "parto de cesariana" do COBOL 85. Joseph T. Brophy, CIO, Travelers Insurance, lideraram uma força-tarefa para informar aos usuários de COBOL dos pesados ​​custos de reprogramação para implementar o novo padrão. Como resultado, o Comitê ANSI do COBOL recebeu mais de 3.200 cartas do público, em sua maioria negativas, exigindo que o comitê fizesse as alterações. Por outro lado, a conversão para COBOL 85 foi pensada para aumentar a produtividade nos próximos anos, justificando, assim, os custos de conversão.[15]

Sintaxe verbosa[editar | editar código-fonte]

A sintaxe da COBOL tem sido muitas vezes criticada por sua verbosidade.[11] No entanto, os defensores notam que isto foi intencional no projeto da linguagem, e muitos a consideram um dos pontos fortes da COBOL. Um dos objetivos do projeto de COBOL foi que gerentes, supervisores e usuários não-programadores pudesse ler e entender seu código. É por isso que a COBOL tem o inglês como sintaxe e elementos estruturais, incluindo: substantivos, verbos, orações, frases, seções e divisões. Consequentemente, a COBOL é considerada por pelo menos uma fonte a ser "A linguagem de programação mais legível, compreensível e documentada em uso hoje. [...] Não só este legibilidade geralmente auxilia o processo de manutenção, mas quanto mais velho um programa se tornar, mais valiosa se torna essa legibilidade."[16] Por outro lado, a mera capacidade de ler e entender algumas linhas de código da COBOL não concede a um executivo ou usuário final a experiência e os conhecimentos necessários para projetar, construir e manter sistemas de software de grande porte.

Outras defesas[editar | editar código-fonte]

Além disso, tradicionalmente a COBOL é uma linguagem simples, com alcance limitado da função (sem ponteiros, sem tipos definidos pelo usuário e sem funções definidas pelo usuário),[17] estimulando um estilo de codificação simples. Isso fez com que seja bem adequada ao seu domínio principal de computação de negócios, onde a complexidade do programa encontra-se em regras de negócio que precisam ser codificados em vez de sofisticados algoritmos e estruturas de dados. E porque a norma não pertence a nenhum fornecedor em particular, os programas escritos em COBOL são altamente portáteis. A língua pode ser utilizada numa grande variedade de plataformas de hardware e sistemas operativos. E sua estrutura hierárquica rígida restringe a definição de referências externas para a Divisão de Ambiente (environment division), o que simplifica a mudança de plataforma em particular. [16]

Referências

  1. Márcia Regina Sawaya. Dicionario De Informatica & Internet. NBL Editora; 1999. ISBN 978-85-213-1099-0. p. 83.
  2. a b Stephen R. Schach. Engenharia de Software. McGraw Hill Brasil; ISBN 978-85-63308-44-3. p. 465.
  3. Rui Bivar De Oliveira. The Power of Cobol: For Systems Developers of the 21st Century. Booksurge Llc; 30 May 2006. ISBN 978-0-620-34652-8.
  4. Jean_Sammet, The Early History of COBOL, p.121–161, ACM SIGPLAN Notices, Association for Computing Machinery, Inc., 1978
  5. Garfunkel, Jerome. The Cobol 85 Example Book. New York: Wiley, 1987. ISBN 0-471-80461-4
  6. Wexelblat, Richard. History of Programming Languages. Boston: Academic Press, 1981. ISBN 0-12-745040-8
  7. a b Atul Kahate. Object Oriented Analysis & Design. Tata McGraw-Hill Education; ISBN 978-0-07-058376-4. p. 420.
  8. NetCOBOL for .NET supports COBOL migration and software development in the .NET environment
  9. "Does COBOL Have a Future?". The Proceedings of the Information Systems Education Conference 2000 17 (126).
  10. Behrouz A. Forouzan; Sophia Chung Fegan. Foundations of Computer Science: From Data Manipulation to Theory of Computation. Cengage Learning Editores; 2003. ISBN 978-970-686-285-3. p. 197.
  11. a b c "(...)para escrever um simples programa em Cobol são necessárias muitas linhas de código, o que torna a linguagem não muito fácil de aprender.", Mario Leite. Técnicas de Programação - Uma Abordagem Moderna. Brasport; ISBN 978-85-7452-229-6. p. 191.
  12. Earl H. Parsons. Structured Programming with COBOL Examples. [S.l.]: iUniverse. p. 41. ISBN 978-0-595-25094-3
  13. Dijkstra (2006). E. W. Dijkstra Archive: How do we tell truths that might hurt? (EWD498). University of Texas at Austin. Página visitada em August 29, 2007.
  14. "In Defense of Teaching Structured COBOL as Computer Science," Howard E. Tompkins, ACM SIGPLAN Notices, Vol. 18, Issue 4, April 1983.
  15. Garfunkel, Jerome. The COBOL 85 example book. New York: Wiley, 1987. ISBN 0-471-80461-4
  16. a b COBOL Tutorial - Introduction to COBOL
  17. "Em COBOL não há funções, mas podemos utilizar o comando PER- FORM para executar sub-rotinas." Cleuton Sampaio. Web 2.0 e Mashups - Reinventando a Internet. Brasport; 2007. ISBN 978-85-7452-338-5. p. 46.
  • Lawrence R. Newcomer, Cobol Estruturado, Schaum McGraw-Hill, ISBN 0-07-450315-4
  • Renato Erich Kleiber, Cartão de Referência: Cobol 80, Livros Técnicos e Científicos Editora S/A, ISBN 85-216-0411-4

Ver também[editar | editar código-fonte]

Outras linguagens de programação de terceira geração:

Ligações externas[editar | editar código-fonte]