COBOL
COBOL | |
---|---|
Paradigma | procedural, Orientação a objeto |
Surgido em | 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]
Índice
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:
- 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[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 no padrão ISO (adotado como um padrão ANSI por INCITS) foi aprovada e disponibilizada 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 DATA DIVISION)
- 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 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[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, 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".[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
- ↑ Márcia Regina Sawaya. Dicionario De Informatica & Internet. NBL Editora; 1999. ISBN 978-85-213-1099-0. p. 83.
- ↑ a b 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.
- ↑ a b 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
- ↑ Kizior, Ronald J.; Carr, Donald; Halpern, Paul. «Does COBOL Have a Future?» (PDF). The Proceedings of the Information Systems Education Conference 2000 [S.l.: s.n.] 17 (126). Consultado em 2012-09-30.
- ↑ 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.
- ↑ 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.
- ↑ Earl H. Parsons. Structured Programming with COBOL Examples iUniverse [S.l.] 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 August 29, 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.
- ↑ a b 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.
- 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]
- 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)