COBOL
COBOL linguaggio di programmazione | |
---|---|
![]() | |
Autore | Grace Murray Hopper, William Selden, Gertrude Tierney, Howard Bromberg, Howard Discount, Vernon Reeves, Jean E. Sammet |
Data di origine | 1959 |
Ultima versione | ISO/IEC 1989:2014 / 2014 |
Utilizzo | General purpose |
Paradigmi | Programmazione procedurale, Programmazione orientata al business |
Tipizzazione | Forte |
Estensioni comuni | cbl, cob e cpy |
Influenzato da | FLOW-MATIC, COMTRAN e FACT |
COBOL (acronimo di COmmon Business-Oriented Language, ossia, letteralmente, "linguaggio comune orientato alle applicazioni commerciali") è un linguaggio di programmazione, fra i primi a essere stato sviluppato e ancora presente in molte applicazioni software commerciali di tipo bancario.[1]
Storia
[modifica | modifica wikitesto]Progettato nel 1959, nasce ufficialmente nel 1961, grazie ad un gruppo di lavoro composto da elementi dell'industria statunitense e da alcune agenzie governative degli Stati Uniti con lo scopo di creare un linguaggio di programmazione adatto all'elaborazione di dati commerciali. Grace Murray Hopper ebbe un ruolo primario nello sviluppo e nella progettazione del linguaggio.
Dagli anni sessanta ad oggi, il COBOL ha subito continue evoluzioni: negli anni 1968, 1974 e 1985 l'American National Standards Institute (ANSI) ha definito gli standard Cobol68, Cobol74 e Cobol85, adottati anche dall'Organizzazione internazionale per la normazione (ISO).
Con l'ISO/IEC 1989-2002, iniziato nel 1989 e terminato nel 2002, si è giunti allo standard internazionale definitivo.
Gli applicativi COBOL, noti per la loro stabilità, sono stati, fino al 2013 (e si presume ancora per molti anni a venire), alla base del funzionamento dei Bancomat e dell'operatività di molte banche e assicurazioni. In effetti molto spesso ciò è dovuto anche al fatto che questi applicativi sono stati sviluppati a partire dagli anni sessanta e continuamente aggiornati negli anni settanta e ottanta a seguito della prima diffusa informatizzazione aziendale fino agli ultimi imponenti interventi:
- il 31 dicembre 1998 per gestire il passaggio dalla lira all'euro. Si ricorda infatti che – se pur la moneta è stata utilizzata a partire dal 2002 – le transazioni finanziarie sono state regolate in euro a partire dal 1º gennaio 1999;
- il 31 dicembre 1999 per evitare il pericolo del millennium bug.
Lo standard COBOL 2002 include il supporto alla programmazione orientata agli oggetti e altre caratteristiche tipiche di un linguaggio moderno.
Secondo alcune fonti, il COBOL nel 2013 era ancora utilizzato nel 70% di tutte le transazioni aziendali, e in COBOL sarebbero state scritte l'85% delle applicazioni business nel mondo[2]. Secondo un'indagine Micro Focus le aziende nel 2013 ancora cercavano programmatori COBOL da sostituire agli sviluppatori storici poiché il 75% dei processi di riscrittura in un linguaggio più moderno si sono rivelati fallimentari o il costo di sostituzione è troppo alto da sostenere[2].
Tuttavia non mancano esempi di successo nell'adeguamento delle stampe COBOL a sistemi operativi grafici, ricorrendo semplicemente alla loro codifica in formato html (grafico) anziché txt (a caratteri)[senza fonte].
Al 2014, l'IBM stimava una popolazione mondiale di circa un milione di programmatori COBOL.[3]
Organizzazione dei sorgenti
[modifica | modifica wikitesto]Ogni sorgente scritto correttamente in COBOL contiene 4 divisioni, non obbligatorie, che comprendono:
- IDENTIFICATION DIVISION
Vengono incluse informazioni generiche come il nome del programma, la data di stesura, il nome del Computer utilizzato e altre informazioni.
- ENVIRONMENT DIVISION
Indica i file che vengono usati all'interno del sorgente.
- DATA DIVISION
Contiene la definizione di file, archivi, variabili e costanti.
- PROCEDURE DIVISION
In questa divisione è definito il procedimento elaborativo da applicare ai dati.
Principi di programmazione
[modifica | modifica wikitesto]In generale, le istruzioni del linguaggio COBOL sono da intendere come frasi scritte in inglese, che terminano con un punto fermo. In certe situazioni, si riuniscono più istruzioni in un'unica «frase», che termina con un punto, ma in tal caso spesso si usa la virgola, e il punto e virgola per concludere le istruzioni singole.
Le istruzioni del linguaggio si compongono in linea di massima di parole chiave, costanti letterali e operatori matematici. Le parole chiave sono scritte usando lettere maiuscole (dell'alfabeto inglese) e il trattino normale (-); dal COBOL2 si possono utilizzare indifferentemente le maiuscole e le minuscole. In generale, i simboli che si possono usare nel linguaggio sono abbastanza limitati, con l'eccezione del contenuto delle costanti alfanumeriche letterali, che teoricamente potrebbero contenere qualunque simbolo (escluso quello che si usa come delimitatore) secondo le potenzialità del compilatore particolare.
Simboli | Descrizione |
---|---|
'0'..'9' | cifre numeriche |
'A'..'Z' | lettere maiuscole dell'alfabeto latino |
' ' | spazio |
'+' | segno più |
'-' | segno meno o trattino |
'*' | asterisco |
'/' | barra obliqua |
'$' | dollaro o segno di valuta |
',' | virgola |
';' | punto e virgola |
'.' | punto fermo |
'(' | parentesi aperta |
')' | parentesi chiusa |
'<' | minore |
'>' | maggiore |
'<=' | minore o uguale |
'>=' | maggiore o uguale |
Le parole chiave più importanti del linguaggio sono i «verbi» imperativi, che descrivono un comando che si vuole sia eseguito. Un gruppo interessante di parole chiave è rappresentato dalle «costanti figurative», che servono a indicare verbalmente delle costanti di uso comune. Per esempio, la parola chiave ZERO rappresenta uno o più zeri, in base al contesto.
Le stringhe sono delimitate da virgolette (apici singoli) e di solito non sono previste forme di protezione per incorporare le virgolette stesse all'interno delle stringhe: per questo si possono suddividere le stringhe, concatenandole con la costante figurativa QUOTE; normalmente, comunque, la ripetizione delle virgolette viene interpretata dal compilatore come virgoletta all'interno della stringa (ad esempio: per scrivere, rispettivamente l'uso, lo uso', si scrive: 'l''uso', 'lo uso''').
La gestione numerica del COBOL è speciale rispetto ai linguaggi di programmazione comuni, perché le variabili vengono dichiarate con la loro dimensione di cifre esatta, stabilendo anche la quantità di decimali e il modo in cui l'informazione deve essere gestita. In pratica, si stabilisce il modo in cui il valore deve essere rappresentato, lasciando al compilatore il compito di eseguire ogni volta tutte le conversioni necessarie. Sotto questo aspetto, un programma COBOL ha una gestione per i valori numerici molto pesante, quindi più lenta rispetto ad altri linguaggi, dove i valori numerici sono gestiti in base alle caratteristiche fisiche della CPU e le conversioni di tipo devono essere dichiarate esplicitamente.
Le variabili usate nel linguaggio sono sempre globali e come tali vanno dichiarate in una posizione apposita. Tali variabili, salvo situazioni eccezionali, fanno sempre parte di un record, inteso come una raccolta di campi di informazioni. Questa gestione particolare costringe a stabilire esattamente le dimensioni che ogni informazione deve avere se registrata nella memoria di massa (dischi, nastri o altro) o se stampata. In un certo senso, questa caratteristica può impedire o rendere difficile l'uso di una forme di codifica dei caratteri che preveda una dimensione variabile degli stessi, considerato che i record possono essere rimappati, trattando anche valori numerici come insiemi di cifre letterali.
Questo particolare, che non è affatto di poco conto, suggerisce di usare il linguaggio per gestire dati rappresentabili con il codice ASCII tradizionale, ovvero con i primi 127 punti di codifica (da U+0000 a U+007F). Naturalmente sono disponibili compilatori che permettono di superare questo problema, ma in tal caso occorre verificare come vengono gestiti effettivamente i dati.
Le istruzioni COBOL vengono scritte sul video nello spazio compreso tra l'ottava e la settantaduesima colonna. Il video è quindi diviso in tre aree, rispettando gli spazi stabiliti negli anni quaranta dove le colonne da uno a sei rappresentano i numeri di riga, mentre la settima colonna accetta caratteri speciali. L'area dopo la settantaduesima colonna è in genere ignorata. Le istruzioni possono essere scritte anche usando più righe, avendo l'accortezza di continuare a partire dall'area «B»; in generale non c'è bisogno di indicare esplicitamente che l'istruzione sta continuando nella riga successiva, perché si usa il punto fermo per riconoscere la loro conclusione. Tuttavia, in situazioni eccezionali, si può spezzare una parola chiave o anche una stringa letterale; in tal caso, nella settima colonna delle riga che continua, va inserito il segno -, inoltre, se si tratta di una stringa, la sua ripresa va iniziata nuovamente con le virgolette. Ad ogni modo, considerato che difficilmente si devono scrivere parole chiave molto lunghe e che le stringhe letterali si possono concatenare, è auspicabile che la continuazione nella riga successiva con l'indicatore nella settima colonna sia evitata del tutto.
I commenti nel sorgente si indicano inserendo un asterisco nella settima colonna; se invece si mette una barra obliqua (/) si vuole richiedere un salto pagina, in fase di stampa, ammesso che il compilatore preveda questo.
Esempio di codice: Hello, world!
[modifica | modifica wikitesto]000001 IDENTIFICATION DIVISION. 000002 PROGRAM-ID. HELLOWORLD. 000003 ENVIRONMENT DIVISION. 000004 CONFIGURATION SECTION. 000005 DATA DIVISION. 000006 PROCEDURE DIVISION. 000007 000008 DISPLAY 'HELLO, WORLD.'. 000009 STOP RUN.
Screen section
[modifica | modifica wikitesto]La Screen section è la parte del linguaggio Cobol dedicata alla gestione delle maschere video. Sebbene non faccia parte dello standard ANSI, è supportata dalla maggioranza dei compilatori del linguaggio Cobol. Essa permette di posizionare sullo schermo videate comprendenti sia dati costanti come titoli e descrizioni, sia dati variabili quali i campi elementari definiti nella Working-Storage Section ed i campi dei record definiti nella File Section. In questa sezione si possono assegnare attributi per ciascun elemento visualizzato (i colori, gli effetti lampeggiante, reverse, evidenziato, ecc.) ed anche assegnare controlli per i valori accettati: tipo numerico con o senza segno, inoltre stabilire l'allineamento, il formato delle date, ecc. Alla fine dell'input è possibile testare la pressione dei tasti funzione e frecce ed in alcune versioni anche la posizione del mouse.[4]
Esempio:
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/Screen-section.jpg/220px-Screen-section.jpg)
Sorgente
IDENTIFICATION DIVISION. PROGRAM-ID. ESEMPIO. AUTHOR. GIORGIO BRANDOLIN. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 REC-ANAGRAFICO. 03 ANA-COGNOME PIC X(25). 03 ANA-NOME PIC X(25). 03 ANA-INDIRIZZO PIC X(30). 03 ANA-CITTA PIC X(20). SCREEN SECTION. 01 VIDEATA-INIZIALE. 03 BLANK SCREEN BACKGROUND-COLOR 1 FOREGROUND-COLOR 6. 01 INPUT-ANAGRAFICA AUTO. 03 LINE 6 COLUMN 20 HIGHLIGHT "Cognome : ". 03 PIC X(25) USING ANA-COGNOME REVERSE-VIDEO. 03 LINE COLUMN 20 HIGHLIGHT "Nome : ". 03 PIC X(25) USING ANA-NOME REVERSE-VIDEO. 03 LINE COLUMN 20 HIGHLIGHT "Indirizzo : " . 03 PIC X(30) USING ANA-INDIRIZZO REVERSE-VIDEO. 03 LINE COLUMN 20 HIGHLIGHT "Città : " . 03 PIC X(20) USING ANA-CITTA REVERSE-VIDEO. PROCEDURE DIVISION. PROGRAMMA SECTION. INIZIO. DISPLAY VIDEATA-INIZIALE. DISPLAY INPUT-ANAGRAFICA. ACCEPT INPUT-ANAGRAFICA. FINE. STOP RUN.
Stampa
[modifica | modifica wikitesto]Le istruzioni standard ANSI '74 prevedono la stampa di tabulati con moduli di carta continui, utilizzabili con stampanti ad aghi collegate alla porta parallela LPT1. I caratteri possono essere solo di tipo ASCII o EBCDIC, con spaziatura e dimensione fisse. Da tempo, le tecnologie di stampa sono cambiate radicalmente e le stampanti ad aghi sono praticamente scomparse. L'uso del modulo continuo ha senso ormai soltanto se si necessita di più copie, magari per moduli bollati o prestampati in carta chimica. In tutti gli altri casi, una stampante laser risolve perfettamente qualsiasi necessità di stampa. Proprio per questo è nata l'esigenza di un adeguamento software che permetta di utilizzare qualsiasi stampante disponibile e di modificare facilmente i report, consentendo di modificare il meno possibile i sorgenti COBOL.
Note
[modifica | modifica wikitesto]- ^ COBOL: storia, applicazioni e futuro, in Webnews, 12 novembre 2014. URL consultato il 9 maggio 2018.
- ^ a b COBOL: in Italia tutti cercano programmatori, in Tom's Hardware, 6 novembre 2013. URL consultato il 6 novembre 2013 (archiviato dall'url originale il 9 novembre 2013).
- ^ (EN) The gift of Grace: COBOL's odyssey from Vietnam to the Square, su theregister.co.uk, 8 aprile 2014. URL consultato il 12 febbraio 2019 (archiviato il 13 aprile 2014).
- ^ Introduction to the COBOL Language - Micro Focus Support, su supportline.microfocus.com. URL consultato il 9 gennaio 2015 (archiviato dall'url originale il 2 aprile 2015).
Voci correlate
[modifica | modifica wikitesto]Altri progetti
[modifica | modifica wikitesto]Wikimedia Commons contiene immagini o altri file su COBOL
Collegamenti esterni
[modifica | modifica wikitesto]- COBOL, in Enciclopedia della Matematica, Istituto dell'Enciclopedia Italiana, 2013.
- (EN) COBOL, su Enciclopedia Britannica, Encyclopædia Britannica, Inc.
- (EN) Opere riguardanti COBOL (Computer program language), su Open Library, Internet Archive.
- (EN) Cobol, su Encyclopaedia of Mathematics, Springer e European Mathematical Society.
Manuali di riferimento:
- (EN) IBM Enterprise COBOL for z/OS V4R2 Bookshelf, su publibfp.boulder.ibm.com. URL consultato il 30 novembre 2022 (archiviato dall'url originale l'11 aprile 2013).
- (EN) IBM COBOL for AIX, V4.1.1 documentazione, su pic.dhe.ibm.com.
- (EN) IBM VS COBOL II V1R4.0 Bookshelf, su publibz.boulder.ibm.com. URL consultato il 6 novembre 2013 (archiviato dall'url originale il 17 aprile 2001).
- (EN) IBM COBOL documentazione (iSeries Information Center), su publib.boulder.ibm.com.
- (EN) IBM ILE COBOL Programmer's Guide (PDF), su public.dhe.ibm.com. URL consultato l'8 aprile 2020 (archiviato dall'url originale il 7 aprile 2022).
- (EN) IBM ILE COBOL Language Reference (PDF), su public.dhe.ibm.com. URL consultato l'8 aprile 2020 (archiviato dall'url originale il 7 aprile 2022).
- (EN) Hewlett Packard Cobol Reference Manual for OPEN VMS (PDF), su h71000.www7.hp.com. URL consultato il 6 novembre 2013 (archiviato dall'url originale l'11 febbraio 2014).
- (EN) OpenCOBOL Programmer's Guide (PDF), su opencobol.add1tocobol.com.
Compilatori e altri prodotti:
- IBM COBOL compilers, su ibm.com.
- IBM COBOL Cafe, su ibm.com.
- Dell Enterprise Cobol, su dell.com. URL consultato il 6 novembre 2013 (archiviato dall'url originale il 20 ottobre 2013).
- Elastic COBOL Cloud-based Elastic COBOL from Heirloom Computing allows application development and maintenance framework as well as deployment of applications onto an Enterprise Legacy Platform-as-a-Service.
- Fujitsu Fujitsu NetCOBOL, COBOL development, deployment and modernization.
- Micro Focus Micro Focus Visual COBOL, COBOL development, deployment and modernization.
- Veryant, leading COBOL technology / maintenance, modernization and migration platform
- COBOL-IT, The Enterprise-Class Open Source COBOL Compiler
- Cobos Archiviato il 6 marzo 2016 in Internet Archive., Open Source IDE for COBOL / Mainframe development
- Redvers Consulting Archiviato il 13 gennaio 2013 in Internet Archive., Open Source COBOL Tools
- OpenCOBOL, an open-source COBOL compiler.
- OpenCOBOL FAQ, and collection of code samples.
- TinyCOBOL, an open-source COBOL compiler based on the COBOL 85 standards
- SoftwareMining, COBOL Rule Extraction Toolkit.
- (EN) The Compilerator, su vintagebigblue.org. URL consultato il 30 novembre 2022 (archiviato dall'url originale il 16 aprile 2013). Online COBOL compiler for small experiments
- RainCode COBOL, .NET Legacy compiler
Controllo di autorità | LCCN (EN) sh85027548 · GND (DE) 4010323-7 · BNF (FR) cb11941315s (data) · J9U (EN, HE) 987007284048005171 |
---|