- Danksagungen 1
- Inhaltsverzeichnis 1
- Vorwort 2
1. Informelle Einführung 5
- 1.1. Dualität des Programmierens 5
- 1.2. Passive und aktive Programmelemente 6
- 1.3. Das Programmierparadigma 7
- 1.4. Algorithmen 10
- 1.5. Programmiersprachen 11
- 1.6. Das Schichtenmodell 12
- 1.7. Werkzeuge des Programmierens 14
- 1.7.1. Der Editor 15
- 1.7.2. Der Übersetzer 15
- 1.7.3. Der Binder 16
- 1.7.4. Der Ausführer 16
- 1.7.5. Das Laufzeitsystem 17
- 1.7.6. Der Bibliothekar 17
- 1.7.7. Testwerkzeuge 18
- 1.7.8. Generatoren 19
- 1.7.9. Die Entwicklungsumgebung 19
- 1.8. Struktur einer Programmiersprache 19
- 1.8.1. Zeichensatz 20
- 1.8.2. Syntax 20
- 1.8.3. Semantik 23
- 1.9. Fehlerarten 23
2. Abstrakte Datenobjekte und -typen 24
- 2.1. Der leere Algorithmus 24
- 2.2. Programmbausteine 26
- 2.2.1. Das leere Modul 26
- 2.2.2. Das Hallo-Modul 27
- 2.2.3. Datenbehälter 27
- 2.3. Operationen 28
- 2.4. Algorithmen 30
- 2.4.1. Elementare Algorithmen 30
- 2.4.2. Sequentielle Algorithmen 31
- 2.5. Ausnahmebehandlung 32
- 2.6. Abstrakte Objekte 34
- 2.7. Datentypen 35
- 2.7.1. Konkrete Datenobjekte 35
- 2.7.2. Abstrakte Datentypen und Datenabstraktionsmodule 37
- 2.7.3. Anlegen eines Objekts 38
- 2.8. Klassen und Klassenobjekte 38
- 2.9. Prozeduren 39
- 2.9.1. Makros 39
- 2.9.2. Subroutinen 40
- 2.9.3. Übersetzeranweisungen 41
- 2.9.4. Lokale Prozeduren 42
- 2.10. Schnittstellen 44
- 2.10.1. Modulschnittstellen 45
- 2.10.2. Klassenschnittstellen 46
- 2.11. Modulrümpfe 47
- 2.11.1. Die Entwicklung eines Moduls 47
- 2.11.2. Fremdleistung 47
- 2.11.3. Klassenrümpfe 49
- 2.12. Zusammenfassung 50
3. Werte 53
- 3.1. Operationsaufrufe mit Parametern 54
- 3.1.1. Import 54
- 3.1.2. Mutatorenaufrufe mit mehreren Parametern 55
- 3.1.3. Inhalt eines Behälters 56
- 3.1.4. Informatoren 57
- 3.1.5. Parametrisierte Informatoraufrufe 57
- 3.2. Duplizieren von Inhalten 57
- 3.2.1. Kopie 58
- 3.2.2. Zuweisung 58
- 3.3. Prozeduren mit mehreren Parametern 59
- 3.4. Schachtelungen 61
- 3.4.1. Lokale und globale Objekte 61
- 3.4.2. Statische Schachtelung 62
- 3.4.3. Dynamische Schachtelung 64
- 3.5. Zusammenfassung 65
4. Bedienerkommunikation 67
- 4.1. Menüs für Programmsteuerung 67
- 4.2. Meldungsfenster 69
- 4.3. Hierarchie von Bausteinen 70
- 4.4. Rückruf 71
- 4.4.1. Prozedurparameter 72
- 4.4.2. Mehrere Prozedurparameter 74
- 4.5. Werkzeuge für Bedienerkommunikation 75
- 4.5.1. Menügeneratoren 75
- 4.5.2. Auswahllisten 76
- 4.5.3. Eingabemasken 77
- 4.5.4. Ausgabefenster 78
- 4.6. Objektwahl 78
- 4.6.1. Aktion nach Vorwahl 78
- 4.6.2. Zeiger auf Stapelobjekte 79
- 4.6.3. Zeiger auf Haldenobjekte 80
- 4.6.4. Objektwahl nach Aktionwahl 82
- 4.7. Zusammenfassung 82
5. Standard-Aufzählungstypen 83
- 5.1. Zeichenbehälter 84
- 5.2. Einfache Standard-Datentypen 84
- 5.2.1. Der Standard-Datentyp Character 85
- 5.2.2. Der Standard-Datentyp Boolean 86
- 5.3. Logische Informatoren 87
- 5.3.1. Parameterlose Informatoren 87
- 5.3.2. Informatoren mit Parameter 88
- 5.3.3. Informatoren für Klassen 88
- 5.4. Konstanten 88
- 5.4.1. Zeichenliterale 88
- 5.4.2. Konstante Objekte 89
- 5.4.3. Konstruktore 90
- 5.5. Operationen mit Aufzählungsobjekten 90
- 5.5.1. Aufzählungsfunktionen 90
- 5.5.2. Gleichheit 90
- 5.5.3. Ordnungsoperatoren 92
- 5.5.4. Logische Operatoren 93
- 5.5.5. Lokale Funktionen 94
- 5.6. Ausdrücke 95
- 5.6.1. Geschachtelte Funktionsaufrufe 95
- 5.6.2. Operanden von Operatoren 96
- 5.6.3. Geschachtelte Operanden 96
- 5.6.4. Kombination von Operatoren gleicher Priorität 98
- 5.6.5. Ausdrücke als Parameter 98
- 5.6.6. Der Syntax von Ausdrücken 99
- 5.7. Zusammenfassung 100
6. Aufzählungstypen 101
- 6.1. Importierte Aufzählungstypen 101
- 6.2. Aufzählungsobjekte 102
- 6.3. Definition von Aufzählungstypen 102
- 6.4. Modulrümpfe 103
- 6.4.1. ADO-Rümpfe 103
- 6.4.2. Klassenrümpfe 104
- 6.4.3. Klassenkonstruktore 105
- 6.5. Operationen der Aufzählungstypen 106
- 6.5.1. Aufzählungsfunktionen 106
- 6.5.2. Gleichheit 107
- 6.6. Exportierte Funktionen 108
- 6.6.1. Konstruktorfunktionen 109
- 6.7. Typbildung 109
- 6.7.1. Bereichstypen 110
- 6.7.2. Abgeleitete Typen 110
- 6.7.3. Typkonvertierung 111
- 6.8. Schablonen 111
- 6.8.1. Definition von Prozedurschablonen 112
- 6.8.2. Funktionsschablonen 112
- 6.8.3. Klassenschablonen 112
- 6.9. Zusammenfassung 113
7. Multibehälter 115
- 7.1. Mengen 117
- 7.1.1. Farbenmengen 117
- 7.1.2. Modulvererbung 119
- 7.1.3. Zeichenmengen 120
- 7.1.4. Persistenz 121
- 7.1.5. Mengenschablonen 121
- 7.1.6. Ausprägung von Klassenschablonen 122
- 7.2. Säcke 123
- 7.3. Überladen einer Methode 124
- 7.4. Abstrakte Multibehälter 124
- 7.5. Folgen 125
- 7.5.1. Zeichenfolgen 125
- 7.5.2. Arten von Folgen 126
- 7.5.3. Warteschlangen 126
- 7.5.4. Anwendung einer Klassenschablone 127
- 7.5.5. Stapel 129
- 7.5.6. Positionierbare Listen 130
- 7.5.7. Sequentielle Dateien 130
- 7.5.8. Persistente Dateien 131
- 7.5.9. Sortierkanäle 132
- 7.6. Assoziativspeicher 134
- 7.6.1. Beispiel 134
- 7.6.2. Schablone mit mehreren Parametern 135
- 7.6.3. Verwendung von Assoziativspeichern 135
- 7.6.4. Direkte Dateien 136
- 7.6.5. Mehrfaches Erben 136
- 7.7. Zusammenfassung 137
8. Konglomerate 139
- 8.1. Felder 140
- 8.1.1. Abstrakte Feldtypen 140
- 8.1.2. Konkrete Feldtypen 141
- 8.1.3. Feldliterale 143
- 8.1.4. Mehrdimensionale Felder 143
- 8.1.5. Die Feldschablone 145
- 8.2. Feld als Implementierungswerkzeug 146
- 8.2.1. Übersetzungstabellen 146
- 8.2.2. Abstraktes Stapelobjekt 147
- 8.2.3. Stapelklasse 148
- 8.2.4. Ganzzahlen 148
- 8.2.5. Ganzzahlen als Ausprägungsparameter 149
- 8.2.6. Implementierung von Mengen 149
- 8.2.7. Implementierungscharakteristika 151
- 8.2.8. Implementierung der Feldschablone 152
- 8.2.9. Zeichenketten 153
- 8.3. Verbunde 153
- 8.3.1. Definition von Verbundtypen und -objekten 154
- 8.3.2. Verbundliterale 155
- 8.3.3. Beispiele für Verbunde 155
- 8.3.4. Kombination von Feldern und Verbunden 156
- 8.3.5. Variante Verbunde 157
- 8.4. Verbund als Implementierungswerkzeug 157
- 8.4.1. Implementierung eines ADT 158
- 8.4.2. Implementierung einer Klasse 159
- 8.4.3. Verwendung der Feldschablone 160
- 8.5. Dateien 162
- 8.5.1. Konkrete Dateitypen 162
- 8.5.2. Implementierung von Persistenzmethoden 164
- 8.5.3. Vergleich der Konglomeraten 164
- 8.6. Zusammenfassung 165
9. Dynamische Datentypen 167
- 9.1. Zeigerobjekte und -typen 167
- 9.2. Lebensdauer von Objekten 169
- 9.3. Verwendung von Zeigern 169
- 9.3.1. Referierte skalare Objekte 169
- 9.3.2. Referierte Konglomerate 170
- 9.3.3. Konstante Zeigerobjekte 170
- 9.3.4. Mehrfachbenennung 170
- 9.3.5. Rekursive Zeigertypen 171
- 9.3.6. Dereferenzierung 172
- 9.3.7. Verkettete Listen 172
- 9.4. Verketteten Listen als Implementierungswerkzeug 173
- 9.4.1. Zuweisung auf ein ADT-Objekt 173
- 9.4.2. Stapel als verkettete Liste 173
- 9.4.3. Implementierung der positionierbaren Liste 175
- 9.4.4. Texte 177
- 9.5. Zusammenfassung 177
10. Arithmetik 179
- 10.1. Ganzzahlbehälter 179
- 10.2. Ganzzahlliterale 180
- 10.3. Ganzzahlobjekte 181
- 10.4. Ganzzahloperationen 181
- 10.5. Ganzzahlausdrücke 182
- 10.6. Weitere Ganzzahltypen 183
- 10.6.1. Abgeleitete Ganzzahltypen 184
- 10.6.2. Ganzzahlklassen 184
- 10.7. Aufzählungsfunktionen mit Ganzzahltypen 185
- 10.8. Ein- und Ausgabe von ganzen Zahlen 185
- 10.9. Zusammenfassung 186
11. Numerik 187
- 11.1. Abstrakte Bruchtypen 187
- 11.1.1. Rationale Zahlen 187
- 11.1.2. Gleitkomma-Dezimalbrüche 189
- 11.1.3. Festkomma-Dezimalbrüche 190
- 11.1.4. Binärbrüche 191
- 11.1.5. Modellzahlen 192
- 11.2. Konkrete Brüche 193
- 11.2.1. Bruchliterale 194
- 11.2.2. Standard-Bruchtypen in Pascal 194
- 11.2.3. Operationen für Bruchtypen 195
- 11.2.4. Ein- und Ausgabe von Bruchwerten 195
- 11.3. Vektoren und Matrizen 195
- 11.4. Zusammenfassung 198
12. Steuerstrukturen 200
- 12.1. Fallunterscheidungen 201
- 12.1.1. Mehrweg-Alternativen 201
- 12.1.2. Einweg-Alternativen 201
- 12.1.3. Zweiweg-Alternativen 202
- 12.1.4. Schachtelung von Alternativen 202
- 12.1.5. Lineare Algorithmen 203
- 12.1.6. Kombination von Bedingungen 203
- 12.1.7. Algorithmisierung 204
- 12.1.8. Erkennen einer Ausnahmesituation 204
- 12.1.9. Vorbeugende Ausnahmebehandlung 205
- 12.2. Wiederholungen 206
- 12.2.1. Festschleifen 207
- 12.2.2. Zählschleifen 208
- 12.2.3. Verwendung von Zählschleifen 209
- 12.2.4. Endlosschleifen 211
- 12.2.5. Rumpfgesteuerte Schleifen 211
- 12.2.6. Kopfgesteuerte Schleifen 213
- 12.2.7. Beispiele 213
- 12.2.8. Dateiverarbeitung 214
- 12.2.9. Fußgesteuerte Schleifen 216
- 12.2.10. Gleichwertigkeit von Wiederholungen 216
- 12.3. Struktogramme 217
- 12.4. Sprünge 220
- 12.4.1. Unstrukturierte Algorithmen 220
- 12.4.2. Steuerstrukturfreie Programmiersprachen 221
- 12.5. Rekursion 223
- 12.6. Zusammenfassung 228
13. Vererbung und Polymorphie 231
- 13.1. Der Weg zur Vererbung 233
- 13.1.1. Die Urlösung 233
- 13.1.2. Mit neuer Methode ergänzen 233
- 13.1.3. Mit neuer Komponente ergänzen 234
- 13.1.4. Einkaufen 235
- 13.1.5. Modulvererbung 236
- 13.1.6. Typvererbung 237
- 13.1.7. Das Geheimnisprinzip 239
- 13.1.8. Vererbung ohne Datenkapselung 240
- 13.2. Polymorphie 241
- 13.2.1. Späte Bindung 241
- 13.2.2. Aufwärtskompatibilität 246
- 13.2.3. Erzwungene Abwärtskompatibilität 248
- 13.2.4. Der polymorphe Stapel 248
- 13.2.5. Registrierung 250
- 13.3. Klassenbibliotheken 254
- 13.4. Zusammenfassung 254
14. Software Engineering 255
- 14.1. Der Prozeß der Programmentwicklung 255
- 14.2. Qualitätskriterien von Software 258
- 14.3. Prinzipien der Softwareentwicklung 259
- 14.4. Testmethoden 262
- 14.5. Lesbarkeit 264
- 14.6. Schnittstellen 267
Literatur 267
Inhaltsverzeichnis 267
Sachwortverzeichnis 274