Raouf Habib, Uwe Rozanski
Cobol 2002 de Luxe
i
Inhaltsverzeichnis
Einleitung 19
Kapi te l l : Die allgemeine COBOL-Programmstruktur 21 1.1 Vorbemerkung 21 1.2 COBOL-Programmstruktur 21 1.3 Die Bedeutung der Programmteile 21 1.4 Das COBOL-Programm im Überblick 22 1.5 Die Hierarchie in einem COBOL-Programm 23 1.6 COBOL-Sprachelemente 24
COBOL-reservierte Wörter 24 Programmiererwörter 24 Literale 25 Figurative Konstanten 27 Trennsymbole 29 Sonderregister 33
1.7 COBOL-Zeichensatz 33 1.8 Interpretation der COBOL-Klausel- und Anweisungsformate 34 1.9 Das Codieren 35
Fixed-form reference format 35 Free-form reference format 37
1.10 Programmbeispiel: DEMOl : Zinsen 39
Kapitel 2: Programmüberblick 41 2.1 Vorbemerkung 41 2.2 IDENTIFICATION DIVISION 41 2.3 ENVIRONMENT DIVISION 43 2.4 DATA DIVISION 52 2.5 PROCEDURE DIVISION 53
COBOL-Anweisungen im Überblick 55 Ein einfaches COBOL-Programm 59
2.6 Programmbeispiel: D E M 0 2 : Schreibmaschine 59
Kapitel 3: Definitionen von Datenfeldern 63 3.1 Vorbemerkung 63 3.2 Stufennummer 77 63 3.3 PICTURE-Klausel 63
5
Inhaltsverzeichnis
3.4 VALUE-Kkusel 77
3.5 USAGE-Klausel 78
3.6 BLANK WHEN ZERO-Klausel 84
3.7 JUSTIFIED 85
3.8 SYNCHRONIZED Klausel 85
3.9 SIGN-Klausel 86
3.10 Programmbeispiel: D E M 0 3 : Liste von Zweierpotenzen 87
Kapitel 4: Definitionen von Strukturen und Sätzen 91 4.1 Vorbemerkung 91
4.2 Stufennummern 01 bis 49 91
4.3 REDEFINES-Klausel 94
4.4 Stufennummer 88 96
4.5 Stufennummer 66 98
4.6 Datengruppen mit BIT-Feldern 99
4.7 Konstante 99
4.8 Programmbeispiel: D E M 0 4 : Artikelliste 100
Kapitel 5: Datenübertragungen 107 5.1 MOVE-Anweisung 107
5.2 INITIALIZE-Anweisung 112
5.3 SET-Anweisung 116
5.4 Referenz-Modifikation 119
5.5 Programmbeispiel: D E M 0 5 : Gehaltsstatistik 120
Kapitel 6: Bildschirmsteuerung 125 6.1 DISPLAY-Anweisung 125
6.2 ACCEPT-Anweisung 128
6.3 Programmbeispiel: DEM06: Darlehen 136
Kapitel 7: Systeminformationen, Systembeendigung 141 7.1 ACCEPT Anweisung Format 2 141
7.2 STOP-Anweisung 143
7.3 Programmbeispiel: D E M 0 7 : Degressive Abschreibung 143
Kapitel 8: Arithmetische Operationen 149 8.1 COMPUTE-Anweisung 149
8.2 ADD-Anweisung 153
8.3 SUBTRACT-Anweisung 155
8.4 MULTIPLY-Anweisung 157
8.5 DIVIDE-Anweisung 159
8.6 Programmbeispiel: D E M 0 8 : Fahrkartenautomat 162
6
Inhaltsverzeichnis
Kapitel 9: Programmverzweigungen 165 9.1 GO TO-Anweisung 165 9.2 GO T O ... DEPENDING ON 168 9.3 Programmbeispiel: D E M 0 9 : Einstufiger Gruppenwechsel 170
Kapitel 10: Interne Unterprogramme 179 10.1 Vorbemerkung 179 10.2 PERFORM-Anweisung 179 10.3 EXIT-Anweisung 193 10.4 EXIT PERFORM-Anweisung 194
10.5 EXIT SECTION-Anweisung 195 10.6 Programmbeispiel: DEMOIO: Zweistufiger Gruppenwechsel 196
Kapitel 11 : Bedingungen 205 11.1 Vorbemerkung 205 11.2 IF-Anweisung 205
Vergleichsbedingung 210 Vorzeichenbedingung 214 Klassenbedingung 215 Bedingungsnamen-Bedingung 216
Abfragen eines Pointers 218 Zusammengesetzte Bedingungen 218
11.3 CONTINUE-Anweisung 221 11.4 EVALUATE-Anweisung 222 11.5 Programmbeispiel: DEMOl 1: Kontostand 229
Kapitel 12: COPY-Bibliothek 235 12.1 COPY-Anweisung 235
12.2 COPY-Bibliotheken 237 12.3 REPLACE-Anweisung 239 12.4 Programmbeispiel: DEMO 12: Vertriebs-soll-ist-Vergleich 239
Kapitel 13: Sequenzielle Dateiorganisation 245 13.1 Vorbemerkung 245 13.2 Eintragungen in der ENVIRONMENT DIVISION 246
SELECT-Klausel 246 ASSIGN-Klausel 246 ORGANIZATION-Klausel 248
ACCESS MODE-Klausel 248 FILE STATUS-Klausel 248 RESERVE-Klausel 251 LOCK MODE-Klausel 251 PADDING CHARACTER-Klausel 251 RECORD DELIMITER-Klausel 251
7
Inhaltsverzeichnis
13.3 Eintragungen in der DATA DIVISION 252 RECORD CONTAINS-Klausel 252 BLOCK CONTAINS-Klausel 253 LINAGE-Klausel 254 CODE-SET-Klausel 255 Datensatzbeschreibung 255
13.4 Anweisungen in der PROCEDURE DIVISION 256 OPEN-Anweisung 256 READ-Anweisung 258 WRITE-Anweisung 260 REWRITE-Anweisung 263 CLOSE-Anweisung 264 USE-Anweisung 265
13.5 Programmbeispiel: D E M 0 1 3 : Überweisungen 268
Kapitel 14: Externe Unterprogramme 275 14.1 Vorbemerkung 275 14.2 Sprachelemente für Unterprogramm-Technik 275 14.3 Die Programmverbindung 276 14.4 CALL-Anweisung 276 14.5 LINKAGE SECTION 279 14.6 USING-Zusatz der PROCEDURE DIVISION 280 14.7 EXIT PROGRAM-Anweisung 285 14.8 Rekursive COBOL-Programme 287 14.9 CANCEL-Anweisung 289 14.10 GOBACK-Anweisung 290 14.11 Weitere Angaben zur Programmkommunikation 290 14.12 EXTERNAL-Klausel 291 14.13 Schachtelung von Programmen 293 14.14 GLOBAL-Klausel 295 14.15 INITIAL-Klausel 296 14.16 Programmbeispiel: DEM014 : Wurzelziehen 296
Kapitel 15: Eigene Funktionen 301 15.1 Vorbemerkung 301 15.2 FUNCTION-ID 301 15.3 EXIT FUNCTION-Anweisung 302 15.4 Funktionsaufruf 303 15.5 Funktionsbibliothek 307 15.6 Rekursive Funktionsaufrufe 309 15.7 Programmbeispiel: Falschgeld 311
Kapitel 16: Tabellenverarbeitung 317 16.1 Vorbemerkung 317 16.2 OCCURS-Klausel 317 16.3 Normalindizierang (Subskribierung) 323
8
Inhaltsverzeichnis
16.4 Spezialindizierung 325
16.5 SET-Anweisung 327
16.6 USAGE INDEX-Klausel 329
16.7 SEARCH-Anweisung 333
16.8 SEARCH ALL-Anweisung 337
16.9 Programmbeispiel: DEMO 15: Aufzinsungsfaktor 339
16.10 Programmbeispiel: DEM016: Rechnung 343
16.11 Programmbeispiel: DEMO 17: Balkendiagramm 350
16.12 Programmbeispiel: DEM018 : Altersstatistik 357
16.13 Programmbeispiel: DEM019: Tabelle sortieren 362
Kapitel 17: Zeichenkettenverarbeitung 367 17.1 Vorbemerkung 367
17.2 INSPECT-Anweisung 367
17.3 STRING-Anweisung 374
17.4 UNSTRING-Anweisung 377
17.5 Programmbeispiel: DEMO20: Variable Satzlänge 381
Kapitel 18: Bit-Manipulationen 385 18.1 Vorbemerkung 385
18.2 Bitweise Negation 386
18.3 Bitweises Und 387
18.4 Bitweises Exklusiv-Oder 388
18.5 Bitweises Oder 390
18.6 Programmbeispiel: Speicherdump 391
Kapitel 19: Index-sequenzielle Dateiorganisation 397 19.1 Vorbemerkung 397
19.2 Eintragungen in der ENVIRONMENT DIVISION 397
19.3 Eintragungen in der DATA DIVISION 403
19.4 Anweisungen in der PROCEDURE DIVISION 403
OPEN-Anweisung 403
READ-Anweisung 405
WRITE-Anweisung 408
REWRITE-Anweisung 409
DELETE-Anweisung 411
START-Anweisung 412
CLOSE-Anweisung 413
USE-Anweisung 414
19.5 Alternative Schlüssel für Index-sequenzielle Dateien 415
19.6 Programmbeispiel: D E M 0 2 1 : Adressen verwalten 417
19.7 Programmbeispiel: DEM022: Telefonliste 428
19.8 Programmbeispiel: D E M 0 2 3 : Auskunftssystem 432
9
Inhaltsverzeichnis
Kapitel 20: Konkurrierende Dateizugriffe 439 20.1 Vorbemerkung 439 20.2 File connector 439 20.3 Verarbeitung ohne Satzsperren 440
Beispiel: Counter 440 20.4 Pessimistische Satzsperren 445
Manuelle Einzelsatzsperre 446 Manuelle Mehrfachsatzsperre 449 Automatische Einzelsatzsperre 449 Automatische Mehrfachsatzsperre 449 Beispiel: Counter 450
20.5 Optimistische Satzsperren 452 Beispiel: Counter 454
20.6 Konkurrierende Zugriffe in rekursiven Programmen 457 20.7 Konkurrierende Zugriffe in objektorientierten Programmen 457
Kapitel 2 1 : Grundlagen objektorientierter Programmierung 463 21.1 Vorbemerkung 463 21.2 O O P 463
Objektorientierte Analyse (OOA) 464 Objektorientiertes Design (OOD) 465 Objektorientierte Implementierung (OOI) 465
21.3 Klassen 466 21.4 Objekte 468 21.5 Attribute 469 21.6 Methoden 470 21.7 Instanzen 471
Garbage Collection 472 21.8 Methodenaufruf 473
Signatur einer Methode 474 Methoden sind keine Module 474 Klassenmethoden 475
21.9 Beziehungen 476 Assoziation 476 Assoziative Klasse 477 Aggregat 478 Generalisierung 478
21.10 Klassenbibliotheken 482 21.11 Methoden überladen 484
Anwendung der Methodenpolymorphie 486 21.12 Basisklassenreferenz 487 21.13 Mehrfachvererbung 488
SUPER 489 21.14 Zuweisungskompatibilität 490 21.15 Interfaces 491
10
Inhaltsverzeichnis
Kapitel 22: Definition von Klassen, Objekten und Attributen, Properties 497
22.1 CLASS-ID 497 Finale Klassen 498 Vererbungen ausdrücken 498 Parametrisierte Klassen 500
22.2 OPTIONS 501 22.3 REPOSITORY 502 22.4 FACTORY 502
OPTIONS 504 ENVIRONMENT DIVISION 504 DATA DIVISION 504 PROCEDURE DIVISION 504 END FACTORY 505
22.5 OBJECT 505 OPTIONS 505 ENVIRONMENT DIVISION 506 DATA DIVISION 506 PROCEDURE DIVISION 506 END OBJECT 506
22.6 Definition von Attributen und Properties 506 Klassenattribute 506 Objektattribute 507 Properties 508
22.7 Ende einer Klassendefinition 510 22.8 Programmbeispiel: Dynamischer Vektor 511
Kapitel 23: Definition und Aufruf von Methoden, Instanzenbildung 521 23.1 Vorbemerkung 521 23.2 Methoden, Module und Funktionen 521
Module 521 Funktionen 523 Methoden 525
23.3 Unterschied zwischen Klassen- und Objektmethoden 528 23.4 Syntax der Methodendefinition 529
OPTIONS-Paragraph 530 23.5 Was eine Methode nicht enthalten darf 531
Einschränkungen in der ENVIRONMENT DIVISION 531 Einschränkungen in der DATA DIVISION 531
23.6 Datenfelder in Methoden 531 23.7 Syntax des Methodenaufrufs 532
Inline method invocation 534 23.8 Konstruktoren, Erzeugen von Instanzen 537
Singleton Patterns 539 23.9 Gegenseitige Methodenaufrufe 540 23.10 Programmbeispiel: Simple Tree Map 544 23.11 Programmbeispiel: Gruppenwechsel durch Instanzenbildung 548
11
Inhaltsverzeichnis
Kapitel 24: Beziehungen zwischen Klassen (Assoziation, Aggregation) 555
24.1 Vorbemerkung 555
24.2 Assoziation 555 Assoziative Klasse 558 Auflösen von gegenseitigen oder gleichzeitigen Beziehungen 559
24.3 Aggregation 562 Auflösen von Aggregatbeziehungen 562
24.4 Programmbeispiel: Assoziation und Fachklassenpool 562
Kapitel 25: Einfach- und Mehrfachvererbung (Messagerouting) 609 25.1 Vorbemerkung 609 25.2 Vererbungsbeziehungen 609 25.3 Vererben von Konstruktoren und Klassenmethoden 614 25.4 Vererben von Attributen 617 25.5 Vererben von Objektmethoden 618 25.6 Aspekte der Mehrfachvererbung, Messagerouting 619 25.7 Wiederholte Vererbung 621 25.8 Konstruktoraufrufe bei Mehrfachvererbung 626 25.9 Programmbeispiel: Schrauben und Nägel 626
Kapitel 26: Methoden überladen (SELF, SUPER) 639 26.1 Vorbemerkung 639 26.2 Aufruf einer Objektmethode über SELF 641 26.3 Aufruf einer Klassenmethode über SELF 643 26.4 Aufruf einer Objektmethode über SUPER 644 26.5 Aufruf einer Klassenmethode über SUPER 646 26.6 Programmbeispiel: Einheitliche Listen drucken 646
Kapitel 27: Prototypdefinition 665 Vorbemerkung 665 Programmprototypen 666 Funktionsprototypen 668 Methodenprototypen 669
Interfaces 671 Vorbemerkung 671 Interfaces kontra Mehrfachvererbung 671 Aufbau eines Interfaces 674
OPTIONS 675 OBJECT-Interfaces 678 FACTORY-Interfaces 680 Parametrisierbare Interfaces 680 Programmbeispiel: Iterator 683 Programmbeispiel: Durchlaufen einer Menge mit einem Iterator 695
27.1 27.2 27.3 27.4
Kapitel 28: 28.1 28.2 28.3
28.4 28.5 28.6 28.7 28.8
12
Inhaltsverzeichnis
Kapitel 29: SORT-MERGE-Modul 701 29.1 Vorbemerkung 701 29.2 Die SELECT-Klausel für Sortierdateien 701 29.3 Die SD-Stufenbezeichnung 702 29.4 SORT-Anweisung 703 29.5 RELEASE-Anweisung 705 29.6 RETURN-Anweisung 706 29.7 MERGE-Anweisung 706 29.8 Programmbeispiel: DEM024: Sortierprogramm 707 29.9 Programmbeispiel: DEM025 : Stichwortverzeichnis 709 29.10 Programmbeispiel: DEM024 : Mischprogramm 712
Kapitel 30: Intrinsic-Funktionen 717 30.1 Vorbemerkung 717 30.2 Liste aller Funktionen 717 30.3 Zeichen- und Zeichenkettenfunktionen 718
CHAR-Funktion 718 LENGTH-Funktion 718 LOWER-CASE-Funktion 719 NUMVAL-Funktion 720 NUMVAL-C-Funktion 720 ORD-Funktion 721 REVERSE-Funktion 722 UPPER-CASE-Funktion 723
30.4 Arithmetische Funktionen 723 FACTORIAL-Funktion 723 INTEGER-Funktion 724 INTEGER-PART-Funktion 725 MAX-Funktion 726 MIN-Funktion 726 MOD-Funktion 727 ORD-MAX-Funktion 728 ORD-MIN-Funktion 729 RANDOM-Funktion 730 RANGE-Funktion 731 REM-Funktion 731 SQRT-Funktion 732 SUM-Funktion 733
30.5 Datumsfunktionen 733 CURRENT-DATE-Funktion 734 DATE-OF-INTEGER-Funktion 735 DAY-OF-INTEGER-Funktion 735 INTEGER-OF-DATE-Funktion 736 INTEGER-OF-DAY-Funktion 737 WHEN-COMPILED-Funktion 738
13
Inhaltsverzeichnis
30.6 Statistische Funktionen 739 MEAN-Funktion 739 MEDIAN-Funktion 739 MIDRANGE-Funktion 741 STAND ARD-DEVIATION-Funktion 742 VARIANCE-Funktion 743
30.7 Trigonometrische Funktionen 743 ACOS-Funktion 743 ASIN-Funktion 744 ATAN-Funktion 745 COS-Funktion 745 LOG-Funktion 746 LOGIO-Funktion 746 SIN-Funktion 747 TAN-Funktion 747
Kapitel 31: COBOL ruft JAVA 749 31.1 Vorbemerkung 749 31.2 JAVA-Kkssen definieren 750
JAVA-Packages 750 31.3 Instanzen vonJAVA-Klassen erzeugen 751 31.4 JAVA-Methoden aufrufen 752 31.5 JA VA-Klassenmethoden aufrufen 754 31.6 Zugriff auf öffentliche Attribute 756 31.7 Garbage Collector 759 31.8 JAVA-Exceptions behandeln 761 31.9 Programmbeispiel DATUM-BERECHNEN 765
Kapitel 32: JAVA ruft COBOL 775 32.1 Vorbemerkung 775 32.2 Entwicklung eines einfachen JAVA-Programms 776
CALL BY VALUE 776 32.3 JAVA-Wrapper-Klassen für COBOL 776
CALL BY REFERENCE 783
Kapitel 33: XML 785 33.1 Vorbemerkung 785 33.2 Aufbau einer XML-Datei 785 33.3 DTD 789
Die Elementdeklaration 790 Inhaltsmodelle 790 Attributdeklarationen 791 Interne und externe DTDs 791
33.4 DOM- und SAX-Parser 793 33.5 SAX-Parser selbst programmieren 794 33.6 IBM-Erweiterung XML PARSE 809
14
Inhaltsverzeichnis
33.7 MicroFocus-Erweiterung XML-enabled COBOL 815 SELECT-Klausel 815 XD-Klausel 815 OPEN-Anweisung 817 READ-Anweisung 817 WRITE-Anweisung 818 REWRITE-Anweisung 818 DELETE-Anweisung 819 CLOSE-Anweisung 819
33.8 Programmbeispiel: XML-Datei mit MicroFocus-Erweiterungen lesen 819
Kapitel 34: Web Services 825 34.1 Vorbemerkung 825 34.2 Technische Grundlagen 825 34.3 SOAP 827 34.4 WSDL 827 34.5 UDDI 827 34.6 Benutzen eines Web Service 828 34.7 Einen Web Service anbieten 839
Kapitel 35: COBOL und Application Server (EJB) 845 35.1 Vorbemerkung 845 35.2 J2EE 845 35.3 Enterprise JAVA Beans 846 35.4 Application Server 846 35.5 Stateless Session Beans 848
Eigenschaften 848 Einsatzgebiete 849 Methoden der Bean-Klasse 849 Methoden des Home-Interfaces 850 Methoden des Remote-Interfaces 850 Local-Home-Interface 851 Local-Interface 851 Programmbeispiel: Addierer 851
35.6 Stateful Session Beans 861 Eigenschaften 861 Einsatzgebiete 862 Methoden der Bean-Klasse 862 Methoden des Home-Interfaces 864 Methoden des Remote-Interfaces 864 Local-Home-Interface 864 Local-Interface 864 Programmbeispiel: Summierer 865
35.7 Message Driven Beans 875 Eigenschaften 875 Einsatzgebiete 875
15
Inhaltsverzeichnis
Methoden der Bean-Klasse 876 Methoden des Home-Interfaces 877 Methoden des Remote-Interfaces 877 Local-Home-Interface 877 Local-Interface 877 Programmbeispiel: Nachricht 877
35.8 Entity Beans 886 Eigenschaften 886 Einsatzgebiete 887 Methoden der Bean-Klasse 887 Methoden des Home-Interfaces 890 Methoden des Remote-Interfaces 891 Local-Home-Interface 891 Local-Interface 891 Programmbeispiel: Datei 891
Anhang A: A.l A.2 A.3 A.4 A.5 A.6 A.7 A.8 A.9 АЛО A. l l A.12 A.13 A.14 A.15 A.16 A.17 A.18
Übungen Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapitel Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite Übungen zu Kapite
1 . 2. 3. 4. 5 . 6. 7. 8. 9. 10 11 12 13 14 15 16 17 18
909 909 910 910 911 912 912 913 913 913 914 915 916 916 917 917 917 918 919
Anhang B: Lösungen B.l B.2 B.3 B.4 B.5 B.6 B.7 B.8 B.9
921 Lösungen zu Kapitel 1 921 Lösungen zu Kapitel 2 922 Lösungen zu Kapitel 3 922 Lösungen zu Kapitel 4 923 Lösungen zu Kapitel 5 923 Lösungen zu Kapitel 6 924 Lösungen zu Kapitel 7 925 Lösungen zu Kapitel 8 925 Lösungen zu Kapitel 9 925
16
Inhaltsverzeichnis
В. 10 Lösungen zu Kapitel 10 926 B. 11 Lösungen zu Kapitel 11 926 B.12 Lösungen zu Kapitel 12 927 B. 13 Lösungen zu Kapitel 13 928 B.14 Lösungen zu Kapitel 14 929 B. 15 Lösungen zu Kapitel 15 929 B.16 Lösungen zu Kapitel 16 929 B.17 Lösungen zu Kapitel 17 930 B. 18 Lösungen zu Kapitel 18 931
Anhang C: Testhilfe 933 C.l Vorbemerkung 933 C.2 Schalter zur Umwandlungszeit 933
Anhang D: Einführung in NetExpress 935 D.l Vorbemerkung 935 D.2 Funktionsumfang 935 D.3 Projektverwaltung 936 D.4 Der Editor 937 D.5 Der Compiler 938 D.6 Der Debugger 938
Stichwortverzeichnis 941
17