Abrir menu principal

COBOL

linguagem de programação
(Redirecionado de Cobol)
COBOL
Paradigma Procedural, imperativa, orientada a objetos
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 Net 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]

A linguagem ainda é amplamente utilizada em sistemas legados armazenados em mainframes. Entretanto, devido à sua baixa popularidade e à aposentadoria dos programadores experientes, muitos dos sistemas estão sendo migrados para novas plataformas e reescritos em linguagens mais modernas. Atualmente, a maior parte do código em COBOL existe essencialmente para manter aplicações existentes.

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çãoEditar

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 o 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 (NBS) que durante os meses seguintes criou uma descrição da primeira versão do COBOL.[5]

O Comitê de Curto Prazo 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, Sylvania Electric Products, a Força Aérea dos Estados Unidos, o David Taylor Model Basin (DTMB) 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 1968Editar

Depois de 1959 o COBOL-1968 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 1974Editar

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

COBOL 1985Editar

Em 1985, a ANSI publicou ainda uma outra versão revista do COBOL-1985 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.

História de normas COBOLEditar

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.

COBOL Orientado a ObjetosEditar

A linguagem de programação de computadores COBOL 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.

Assim como a C++ e a Java, os compiladores COBOL estão disponíveis enquanto a linguagem se move em direção à padronização.

Alguns fornecedores (incluindo a Micro Focus, a Fujitsu, a Hitachi, a Veryant e a IBM) introduziram a sintaxe orientada a objetos, com base nos rascunhos de 1997 ou outro da revisão completa.

A Fujitsu, a Micro Focus e a Raincode PL/1 atualmente suportam os compiladores COBOL orientados a objetos visando o .NET.[8]

ISO COBOL 2002Editar

A versão ISO COBOL 2002, é uma versão do COBOL que foi criado no padrão ISO (adotado como um padrão ANSI por INCITS)[9] que foi aprovada e disponibilizada em 2002, e foi projetado para ser utilizado em servidor mainframe, como por exemplo: IBM[10], HITACHI[11], etc.

O ISO COBOL 2002 incluiu diversos recursos extras, além da 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 DATA DIVISION.
  • Suporte a ponto flutuante
  • Resultados aritméticos padrão (ou portáteis)
  • Geração e parsing de XML

Microsoft COBOLEditar

O Microsoft COBOL é uma versão de COBOL orientado a objetos que é utilizado dentro do Microsoft Visual Studio .NET. O Cobol é uma linguagem de alto nível projetada para uso em negócios, e que usa comandos com sintaxe em inglês. A Microsoft começou cedo produzindo produtos de idiomas como este. Seus outros produtos de idiomas antigos incluíam Microsoft Fortran, Microsoft Pascal, Microsoft Visual Basic e Macro Assembler. Este produto também foi licenciado para a IBM como IBM Cobol Compiler. Atualmente o Microsoft COBOL está na versão 5.0 disponível para download. [12][13]

Micro Focus Visual COBOLEditar

A empresa Micro Focus produz o software Micro Focus Visual COBOL[14] que é uma versão do COBOL orientado a objetos, projetado para uso em sistema operacional Windows, com suporte para execução em ambiente .NET.

FUJITSU NET COBOLEditar

A empresa Fujitsu produz o software Fugitsu NET COBOL que é uma versão do COBOL orientado a objetos, projetado para uso em servidor mainframe, com suporte para execução em ambiente .NET.[15][16][17]

IBM COBOLEditar

A empresa IBM nos últimos anos já produziu o software IBM COBOL em diversas versões: IBM OS/VS COBOL, IBM COBOL/II, IBM COBOL SAA, IBM Enterprise COBOL, IBM COBOL/400, IBM ILE COBOL, projetado para uso em servidor mainframe, com suporte para execução em ambiente com sistema operacional compatível com UNIX. A versão mais atualizada dele é o "IBM Enterprise COBOL for z/OS".[18][19][20]

Legado COBOLEditar

Os programas criados em linguagem 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.[21]

CaracterísticasEditar

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:[22]

  • 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,[23] classificação e geração de relatórios.[2]

Olá, mundoEditar

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 1972Editar

Em um IBM System/360 executando OS/360 MVT 21.8f, por volta de 1972, o teste Olá, Mundo teria levado cartões perfurados 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ásicaEditar

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

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

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

  • 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 COBOLEditar

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 defesasEditar

Falta de estruturalismosEditar

Uma das causas do código espaguete era a ampla utilização da cláusula GOTO, que resultava em bases de código de difícil legibilidade e de baixa escalabilidade.

Em sua carta a um editor em 1975, intitulada "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".[25]

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..."[26]

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çãoEditar

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, St. Paul Travelers (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.[27]

Sintaxe verbosaEditar

A sintaxe da COBOL tem sido muitas vezes criticada por sua verbosidade.[23] 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."[28] 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.

Isolamento da área acadêmicaEditar

Nenhum acadêmico da ciência da computação participou do projeto do COBOL: todos do comitê faziam parte da área comercial ou do governo. Enquanto o COBOL procurava resolver problemas de processamento de arquivos comerciais, os cientistas da computação estavam mais interessados em campos como análise numérica, física e programação de sistemas. O desdém dos acadêmicos pelo processamento de dados empresariais e a não participação de cientistas da computação influentes no projeto da linguagem contribuíram para a impopularidade do COBOL.

Outras defesasEditar

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),[29] 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.[28]

BibliografiaEditar

  • Lawrence R. Newcomer, Cobol Estruturado, 1985, Editora: Schaum McGraw-Hill, ISBN 0-07-450315-4
  • Renato Erich Kleiber, Cartão de Referência: Cobol 80, Editora: Livros Técnicos e Científicos Editora S/A, ISBN 85-216-0411-4
  • Garfunkel, Jerome (1987). The COBOL 85 example book. New York: Wiley. ISBN 0-471-80461-4 

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 (1987). The Cobol 85 Example Book. New York: Wiley. ISBN 0-471-80461-4 
  6. Wexelblat, Richard (1981). History of Programming Languages. Boston: Academic Press. 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. As grandes mudanças do ISO COBOL 2002
  10. COBOL 2002 – The Good, the Bad, and the UGLY Session 8204 (August 25, 2005)
  11. The COBOL2002 Family - HITACHI
  12. Usando COBOL na plataforma Microsoft.NET - Visual Studio .NET
  13. Microsoft COBOL 5.0 (download)
  14. Micro Focus Visual COBOL
  15. Fujitsu Software Net COBOL
  16. Migração de mainframe e midrange COBOL para NetCOBOL
  17. Fujitsu Progression. Mainframe e Midrange para .NET
  18. IBM Enterprise COBOL for z/OS
  19. IBM Enterprise COBOL for z/OS V6.2 documentation
  20. IBM Support - Enterprise COBOL for z/OS documentation library]
  21. Kizior, Ronald J.; Carr, Donald; Halpern, Paul. «Does COBOL Have a Future?» (PDF). The Proceedings of the Information Systems Education Conference 2000. 17 (126). Consultado em 30 de setembro de 2012 
  22. 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.
  23. 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.
  24. Earl H. Parsons. Structured Programming with COBOL Examples. [S.l.]: iUniverse. p. 41. ISBN 978-0-595-25094-3 
  25. Dijkstra (2006). «E. W. Dijkstra Archive: How do we tell truths that might hurt? (EWD498)». University of Texas at Austin. Consultado em 29 de agosto de 2007 
  26. "In Defense of Teaching Structured COBOL as Computer Science," Howard E. Tompkins, ACM SIGPLAN Notices, Vol. 18, Issue 4, April 1983.
  27. Garfunkel, Jerome (1987). The COBOL 85 example book. New York: Wiley. ISBN 0-471-80461-4 
  28. a b COBOL Tutorial - Introduction to COBOL
  29. "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.

Ver tambémEditar

Ligações externasEditar