COBOL
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 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]
As especificações do COBOL 2002 incluem suporte à programação orientada a objetos e outras características das linguagens modernas.[3]
Índice
1 História e especificação
1.1 ANS COBOL 1968
1.2 COBOL 1974
1.3 COBOL 1985
1.4 História de normas COBOL
2 COBOL Orientado a Objetos
3 ISO COBOL 2002
4 Microsoft COBOL
5 Micro Focus Visual COBOL
6 FUJITSU NET COBOL
7 IBM COBOL
8 Legado COBOL
9 Características
9.1 Olá, mundo
9.2 Olá, OS/360 cerca de 1972
10 Estrutura básica
10.1 Área de codificação no COBOL
11 Críticas e defesas
11.1 Falta de estruturalismos
11.2 Problemas de compatibilidade após normalização
11.3 Sintaxe verbosa
11.4 Outras defesas
12 Bibliografia
13 Referências
14 Ver também
15 Ligações externas
História e especificação |
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:
- William Selden e Gertrude Tierney da IBM
- Howard Bromberg e Howard Discount da RCA
- Vernon Reeves e Jean E. Sammet da Sylvania Electric Products[6]
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 |
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 1974 |
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 1985 |
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 COBOL |
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:
- COBOL-1968
- COBOL-1974
- COBOL-1985
Intrinsic Functions Amendment - 1989
Corrections Amendment - 1991
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 Objetos |
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 2002 |
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 COBOL |
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 COBOL |
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 COBOL |
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 COBOL |
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 COBOL |
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ísticas |
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á, mundo |
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 |
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ásica |
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 COBOL |
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 |
Falta de estruturalismos |
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ção |
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 verbosa |
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.
Outras defesas |
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]
Bibliografia |
- 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
↑ Márcia Regina Sawaya. Dicionario De Informatica & Internet. NBL Editora; 1999. ISBN 978-85-213-1099-0. p. 83.
↑ ab Stephen R. Schach. Engenharia de Software. McGraw Hill Brasil; ISBN 978-85-63308-44-3. p. 465.
↑ 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.
↑ Jean_Sammet, The Early History of COBOL, p.121–161, ACM SIGPLAN Notices, Association for Computing Machinery, Inc., 1978
↑ Garfunkel, Jerome (1987). The Cobol 85 Example Book. New York: Wiley. ISBN 0-471-80461-4
↑ Wexelblat, Richard (1981). History of Programming Languages. Boston: Academic Press. ISBN 0-12-745040-8
↑ ab Atul Kahate. Object Oriented Analysis & Design. Tata McGraw-Hill Education; ISBN 978-0-07-058376-4. p. 420.
↑ NetCOBOL for .NET supports COBOL migration and software development in the .NET environment
↑ As grandes mudanças do ISO COBOL 2002
↑ COBOL 2002 – The Good, the Bad, and the UGLY Session 8204 (August 25, 2005)
↑ The COBOL2002 Family - HITACHI
↑ Usando COBOL na plataforma Microsoft.NET - Visual Studio .NET
↑ Microsoft COBOL 5.0 (download)
↑ Micro Focus Visual COBOL
↑ Fujitsu Software Net COBOL
↑ Migração de mainframe e midrange COBOL para NetCOBOL
↑ Fujitsu Progression. Mainframe e Midrange para .NET
↑ IBM Enterprise COBOL for z/OS
↑ IBM Enterprise COBOL for z/OS V6.2 documentation
↑ IBM Support - Enterprise COBOL for z/OS documentation library]
↑ 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
↑ 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.
↑ abc "(...)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.
↑ Earl H. Parsons. Structured Programming with COBOL Examples. [S.l.]: iUniverse. p. 41. ISBN 978-0-595-25094-3
↑ 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
↑ "In Defense of Teaching Structured COBOL as Computer Science," Howard E. Tompkins, ACM SIGPLAN Notices, Vol. 18, Issue 4, April 1983.
↑ Garfunkel, Jerome (1987). The COBOL 85 example book. New York: Wiley. ISBN 0-471-80461-4
↑ ab COBOL Tutorial - Introduction to COBOL
↑ "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ém |
- Lista de palavras reservadas da linguagem de programação COBOL
- Lista de linguagens de programação
Outras linguagens de programação de terceira geração:
- ALGOL
- APL
- BASIC
- C
- FORTRAN
- Lisp
- PL/I
- RPG
Ligações externas |
- Associação Brasileira de Profissionais COBOL
- Clube Cobol
- (em inglês) COBOL-Standard Committee (em inglês)
- (em inglês) COBOL Tutorial (em inglês)
- (em inglês) COBOL Defined (em inglês)
- (em inglês) The future's bright ... the future's Cobol (em inglês)