COBOL ist eine Programmiersprache, die wie FORTRAN in der Frühzeit der Computerentwicklung 1960 entstanden ist und bis heute verwendet wird. Der Stil dieser Programmiersprache ist wortreich und stark an die natürliche Sprache angelehnt.
Die Abkürzung COBOL steht für "Common Business Oriented Language".
Das Ergebnis wurde 1960 als COBOL-60 von CODASYL verabschiedet, in der Folgezeit weiterentwickelt und von nationalen und internationalen Normierungsinstituten (ANSI, ISO) standardisiert.
COBOL fand schnell den Weg in die zivile Nutzung als eine der ersten kommerziell eingesetzten kompilierbaren und bis heute am weitesten verbreiteten Programmiersprachen, vor allem für kommerzielle Anwendungen.
COBOL zeichnet sich aus durch eine strikte Trennung von Datendeklaration und prozeduralen Anweisungen. Im Prozedurteil kann man nur Variablen benutzen, die vorher im Datenteil deklariert worden sind. Auch das Aussehen von formatierten Ausgaben wird nicht im Prozedurteil, sondern im Datenteil durch die PICTURE-Klausel festgelegt. Der "REPORT WRITER" macht es möglich, die Struktur einer Druckliste komplett im Datenteil als physische Struktur von Seiten, und logische Struktur von Postenzeilen mit Gruppensummen etc zu beschreiben, ohne dass sich der Prozedurteil darum kümmern muss.
Ein COBOL-Programm ist in Teile (DIVISION), Kapitel (SECTION) und Abschnitte (PARAGRAPH) gegliedert. Die vier DIVISIONs sind in ihrer festgelegten Reihenfolge:
In der IDENTIFICATION DIVISION gibt es keine SECTIONs, und in der PROCEDURE DIVISION können neuerdings SECTIONS und auch Paragraphs entfallen. ENVIRONMENT und DATA DIVISIONs können u. U. ganz entfallen.
Das traditionelle Kodierschema bei Cobol entspricht der Lochkarte mit ihren 80 Spalten, d. h. Schreibstellen. Dabei waren reserviert
Der aktuelle Standard (2002) kennt ein fixes Zeilenformat, das die Einteilung in Area A und Area B aufhebt, sowie ein ganz freies Format, das in den Spalten 1 bis 255 alles erlaubt. Die Sonderrolle der Spalte 7 entfällt hier:
Ursprünglich wurde COBOL nur in Großbuchstaben geschrieben (man hatte nur Lochkarten und Zeilendrucker ohne Kleinbuchstaben), heute können Variablen und COBOL-Anweisungen beliebig groß oder klein geschrieben werden. Die Sprache ist nicht case sensitive:
Ein fast minimales Cobol-Programm:
Identification Division. Program-ID. HALLOPGM. Procedure Division. Display "Hallo Wikipedianer!" STOP RUN.
… erfolgen in der Data Division
Zur Deklaration von Variablen bietet COBOL zahlreiche Klauseln, deren wichtigsten die Stufennummer, die PICTURE-Klausel und die USAGE-Klausel sind.
Die Stufennummer 77 kennzeichnet eine freistehende Variable, 01 kann ebenfalls eine freistehende Variable bezeichnen, leitet aber normalerweise die Deklaration einer Gruppe ein, was in anderen Sprachen als Record (Pascal u. ä.) oder struct (C++, C u. ä.) bezeichnet wird. Die Stufennummern 02 bis 49 kennzeichnen dann dieser Gruppe untergeordnete Datendeklarationen, die selber auch wieder Gruppen (Records) sein können. Eine Datendeklaration, die keine weiteren untergeordneten (mit höheren Stufennummern) Datendeklarationen hat, wird in COBOL als elementar (elementary Item) bezeichnet, ansonsten ist es eine Gruppen-Variable (Group Item). Eine solche Gruppe kann man abstrakt als Baum darstellen mit den Gruppen als Knoten und den elementary Items als Blättern.
Mit der speziellen Stufennummer 66 kann man ganzen Speicherbereichen einen anderen Namen geben, mit 88 einen Bedingungsnamen definieren, der wie ein boolescher Ausdruck in z. B. einer IF-Anweisung verwandt werden kann.
Die Stufennummern werden üblicherweise zweistellig geschrieben. Aus den Lochkartenzeiten stammt die Gewohnheit, die Stufennummern in einer Gruppendefinition nicht fortlaufend, sondern in Schritten von 5 oder 10 zu vergeben, weil man dann Zwischenstufen einfügen konnte, ohne gleich einen ganzen Kartenstapel neu lochen zu müssen.
Das folgende Beispiel beschreibt das Layout der traditionellen 80-stelligen COBOL-Programmzeile:
01 Cobol-Zeile USAGE DISPLAY. 05 Zeilennummer PIC 9(6). 05 Indikator PIC X. 88 Ist-Kommentar VALUES '*' '/'. 88 Ist-Fortsetzungszeile VALUE '-'. 88 Ist-Debuggingzeile VALUE 'D'. 'd'. 05 Bereich-A-und-B. 10 Bereich-A PIC X(4). 10 Bereich-B PIC X(61). 05 Zeilen-Endekennung PIC X(8).
Die Definition eines Wertebereiches sieht als Beispiel so aus:
01 Wertebereich PIC 99V99 USAGE COMPutational. 88 Einerwerte Value 1 thru 9. 88 Zehnerwerte Value 10 thru 19. 88 Zwanzigerwerte Value 20 thru 29.
Äußere Erscheinung und interne Repräsentation werden im wesentlichen durch die Klauseln PICTURE und USAGE bestimmt. USAGE COMP, wenn damit gerechnet werden soll, DISPLAY zur Anzeige. Die Symbole hinter PICture legen die Anzahl Stellen oder Zeichen fest, bzw. Editiersymbole wie Dezimal- oder Tausendertrennzeichen, Vorzeichen, Währungssymbole, gedachtes Dezimaltrennzeichen (V) etc., und bestimmen eine elementare Variable damit als entweder alphabetisch, alphanumerisch, numerisch oder numerisch-editiert.
In COBOL wird die Formatierung für sichtbare Ausgabe eben durch die Datendeklaration erledigt, nicht durch prozedurale Anweisungen wie in Sprachen wie Pascal oder C. Den Rest der insgesamt etwa 60 möglichen Klauseln einer Datendeklaration möge man in einem COBOL-Handbuch nachschlagen.
In der Procedure Divsion findet sich der ausführbare Programmcode. Die Ausführung beginnt mit der ersten Anweisung in hinter der Überschrift Procedure Division bzw. den DECLARATIVES, deren Ausführung nur durch bestimmte Ereignisse ausgelöst wird. Danach werden alle Anweisungen sequentiell ausgeführt, bis ein STOP RUN das Programm beendet, oder ein GO TO zu einer anderen Stelle im Programm verzweigt.
Die Procedure Divsion besteht aus einer oder mehreren Prozeduren. Eine Prozedur ist entweder
Prozeduren können mit der Cobol-Anweisung Perform ausgeführt werden. Es gibt keine formale Parameterübergabe, alle Prozeduren haben Zugriff auf alle Felder in der Data Division.
Mittels CALL können externe Programme (Cobol oder andere Programmiersprachen) aufgerufen werden. Dabei werden Parameter By Reference oder By Content übergeben.
Cobol unterstützt die strukturierte Programmierung; die Verwendung des ebenfalls zulässigen GOTOs ist heute verpönt. In der professionellen Programmierung herrschen hausinterne Programmierstandards, die legen dann in der Mehrzahl fest, dass Prozeduren ausschließlich aus einer Section bestehen.
Ziel der Cobol-Syntax soll sein, dass auch ein nicht an formale Programmiersyntax gewohnter Mensch den Sinn eines Cobol-Programm erahnen kann (wenn er oder sie denn etwas Englisch kann). Alle Cobol-Anweisungen beginnen mit einem Verb und davon gibt es viele.
Zur Darstellung der Syntax wird einfaches C (oder Java) zu Hilfe genommen.
IF und ELSE funktionieren so, wie man es erwartet. Das End-If wurde erst mit dem COBOL85-Standard eingeführt. Im COBOL74-Standard wurde die IF-Anweisung noch durch einen Punkt beendet, was eine leicht zu übersehende Fehlerquelle darstellen konnte.
COBOL85-Syntax:
If Nenner > 0 Compute Zahl = Zaehler / Nenner Else Display "Ich bin so unglücklich!" Move 0 To Zahl End-If
COBOL74-Syntax:
If Nenner > 0 Compute Zahl = Zaehler / Nenner Else Display "Ich bin so unglücklich!" Move 0 To Zahl.
EVALUATE macht die mehrfache Fallunterscheidung, womit jede Form von CASE oder Switch (wie in C), Folgen von IF/ELSIF/ELSIF/END-IF bis hin zu kompletten Entscheidungstabellen dargestellt werden kann. Die Anweisung EVALUATE wurde erstmals in COBOL85 integriert, COBOL-Versionen vor der 85-Version kennen kein EVALUATE, so dass dort mehrfache Fallunterscheidungen über – teils schwierig zu lesende – IF-Konstrukte abgebildet werden mussten.
Evaluate True When Nenner > 0 Compute Zahl = Zaehler / Nenner When Nenner < 0 Compute Zahl = Zaehler / Nenner * -1 When Other Display "Ich bin schon wieder unglücklich!" Move 0 To Zaehler End-Evaluate
Eine Cobol-Spezialität sind die sogenannten Conditional Statements, das sind Cobol-Anweisungen mit einer Bedingungs-Klausel:
COBOL85-Syntax:
Read Eingabesatz At End Display "Dateiende erreicht " Eingabe-Zaehler " gelesen!" Set Ende-der-Verarbeitung To True Not At End Add 1 to Eingabe-Zaehler End-read
Eine C-Schleife wie „for (i=0; i<10; i++) {...}“ wird in Cobol mit PERFORM kodiert (COBOL85-Syntax):
Perform Varying i From 1 By 1 Until i > 10 . . . End-Perform
Insbesondere auf PCs aber auch auf anderen Systemen können als Benutzerschnittstelle eine Vielzahl von Möglichkeiten zum Einsatz kommen. Neben den Standard-COBOL Anweisungen ACCEPT zur Tastatureingabe und DISPLAY zur Bildschirmausgabe kommt aus der X/OPEN-Spezifikation die SCREEN SECTION hinzu. Außerdem Compiler-Hersteller-spezifische und Compiler-Hersteller-unabhängige GUI Lösungen. Auch Internet-Browser-Schnittstellen sind möglich - oder Java- oder unter Windows auch Visual-Basic-Programme.
Der Datenhaltungsteil kann mit COBOL-Mitteln oder mit einem Datenbankanschluss realisiert werden.
COBOL ist (auf Großrechnern) an Stapelverarbeitung (Batch) orientiert und enthält z. B. mit ACCEPT/DISPLAY nur einfache Elemente, um interaktive Ein/Ausgabe an einem Terminal oder PC zu programmieren. Dennoch spielt Cobol problemlos eine große Rolle als Programmiersprache bei der Erstellung von Online-Systemen wie CICS oder IMS; solche Transaktionsmonitore stellen ihre Dienste mit einem Cobol-tauglichen API zur Verfügung: Entweder wie z. B. bei IMS als reines CALL-Interface (CALL 'CBLTDLI') oder wie bei CICS als EXEC-Sprache, die von einem Preprozessor in Cobol-Code umgesetzt wird.
Das gleiche gilt für den Zugriff auf relationale Datenbanken: Cobol-Programme benutzen dann embedded SQL (EXEC SQL). Auch kann man Stored Procedures in Cobol programmieren.
Neuerungen in Cobol aus der jüngsten Zeit:
Insgesamt lässt sich sagen, dass mit der Programmiersprache Cobol viel und mit Verstärkung durch Transaktionssysteme und kleinen Hilfsroutinen in C oder Assembler so ziemlich alles geht.
Im Rahmen von CODASYL gab es dann ständig einen Ausschuss, teilweise mit Unterausschüssen, der bzw. die sich mit der Weiterentwicklung von COBOL befassten und im Lauf der Jahrzehnte verschiedene Namen und verschiedene Status innerhalb von CODASYL hatten.
COBOL-61 war nur teilweise kompatibel mit der Vorgängerversion, wurde aber weitgehend in zahlreichen Compilern implementiert. CODASYL hat sich dann darauf verpflichtet, die Sprache von da aus evolutionär zu weiterzuentwickeln, statt revolutionäre Änderungen vorzunehmen.
Mit COBOL-61 EXTENDED kamen u. a. die SORT-Möglichkeiten und der REPORT WRITER hinzu.
COBOL, EDITION 1965 fügte u. a. interne Tabellen und Optionen für Dateibearbeitung hinzu.
Weitere Dokumente zur Entwicklung sind die CODASYL COBOL JOURNAL OF DEVELOPMENT der Jahre 1968, 1969, 1970, 1973, 1976, 1978, 1981 und 1984.
Der erste Standard wurde am 23. August 1968 als USA Standard COBOL 1968 verabschiedet und als Dokument X3.23-1968 veröffentlicht.
Der Ausschuss X3.4.4 wurde dann zum Technischen Komitee X3J4, wie er auch heute noch heißt, und machte sich an die Arbeit, den nächsten Standard zu entwickeln, der dann am 10. Mai 1974 als American National Standard COBOL 1974 verabschiedet und dann im Dokument ANS X3.23-1974 veröffentlicht wurde.
Der nächste Standard wurde im April 1985 von X3J4 verabschiedet und im September vom zuständigen Entscheidungsgremium der inzwischen ANSI heißenden Organisation angenommen und dann als ANS X3.23-1985 veröffentlicht. COBOL-85 führte mit Begrenzern wie END-IF und END-PERFORM erstmals die Möglichkeit ein, in COBOL beliebig geschachtelte Entscheidungs- (IF, EVALUATE) und Wiederholungsanweisungen (PERFORM) zu schreiben und damit die sog. "Strukturierte Programmierung" in COBOL zu praktizieren. Zu COBOL-85 wurde später ein Zusatz mit eingebauten (intrisic) Funktionen und eine weiterer mit Korrekturen zum Standard veröffentlicht.
Der aktuelle Standard wurde 2002 verabschiedet. Wesentliche Änderungen darin sind die Übernahme der Erweiterungen durch X/Open, die explizite Unterstützung von internationalen Zeichensätzen einschließlich Unicode, die Objektorientierte Programmierung sowie bedingte Compilierung, neben zahlreichen anderen Erweiterungen und Präzisierungen.
Nach dem Ende von CODASYL hat das Komitee J4 auch die Verantwortung nicht nur für die Standardisierung, sondern auch für die Entwicklung übernommen.
Der nächste Standard wird für das Jahr 2008 vorbereitet.
In der ISO ist das Technical Committee ISO/TC 97, Computers and Information Processing zuständig, dessen Sekretariat vom ANSI gestellt wird.
ISO hat zu COBOL eine Empfehlung (Recommendation) R-1989:1972, sowie Standards ISO 1989:1978 und ISO 1989:1985 verabschiedet, und dabei die Vorgabe des US-Standardisierungsgremiums übernommen.
Der aktuelle Standard 2002 ist umgekehrt zuerst als ISO/IEC 1989:2002 veröffentlicht und dann von den nationalen Standardorganisationen übernommen worden.
Für Betriebssysteme, die aus der UNIX- bzw. MS-DOS-Tradition entstanden sind, gibt es COBOL-Compiler von verschiedenen Software-Herstellern. Näheres siehe in der unten verlinkten COBOL-FAQ von William M. Klein.
COBOL | كوبول | COBOL | COBOL | COBOL | COBOL | COBOL | COBOL | COBOL | COmmon Business Oriented Language | Cobol | COBOL | Cobol | COBOL programozási nyelv | COBOL | COBOL | COBOL | COBOL | 코볼 | Cobol | COBOL | COBOL | COBOL | COBOL | COBOL | Cobol | КОБОЛ | COBOL | COBOL | COBOL | ภาษาโคบอล | COBOL | Кобол (мова програмування) | COBOL