Die Macht der Abstraktion

Werbung
Herbert Klaeren, Michael Sperber
Die Macht
der Abstraktion
Einführung in die
Programmierung
Teubner
Inhaltsverzeichnis
1
Was ist Informatik?
5
2
Elemente des Programmierens
2.1 Handwerkszeug für das Programmieren
2.2 Bausteine für Programme
2.3 Sorten und Verträge
2.4 Testfälle
2.5 Probleme und Teilprobleme
2.6 Das Substitutionsmodell
2.7 Lexikalische Bindung
9
9
11
15
17
18
20
22
3
Fallunterscheidungen und Verzweigungen
3.1 Fallunterscheidungen und boolesche Ausdrücke
3.2 Binäre Verzweigungen
3.3 Weitere boolesche Operatoren
27
27
30
31
4
Zusammengesetzte und gemischte Daten
4.1 Schokokekse im Computer
4.2 Record-Definitionen
4.3 Prozeduren, die Records konsumieren
4.4 Prozeduren, die Records herstellen
4.5 Ein erweitertes Beispiel für zusammengesetzte Daten
4.6 Gemischte Daten
37
37
40
42
44
45
49
5
Induktive Definitionen
5.1 Natürliche Zahlen
5.2 Endliche Folgen
5.3 Terme
5.4 Darstellung von Termen
5.5 Strukturelle Induktion
5.6 Algebren
55
55
58
59
61
62
63
6
Rekursion
6.1 Funktionen auf endlichen Folgen
6.2 Listen in Scheme
6.3 Rekursion über Zahlen
67
67
69
73
vj
Inhaltsverzeichnis
6.4
6.5
6.6
6.7
6.8
Rekursion ohne Ende
Induktionsbeweise über rekursive Funktionen
Rekursive Scheme-Programme beweisen
Endrekursion und Iteration
Invarianten
77
78
79
81
84
7
Praktische Programme mit Listen
7.1 Eingebaute Listen
7.2 Mehr Prozeduren auf Listen
7.3 Die Türme von Hanoi
7.4 Zwischenergebnisse benennen
7.5 Audio-Kassetten optimal bespielen
87
87
87
90
97
99
8
Higher-Order-Programmierung
8.1 Higher-Order-Prozeduren auf Listen
8.2 Listen zusammenfalten
8.3 Anonyme Prozeduren
8.4 Prozedurfabriken
8.5 Der Schönfinkel-Isomorphismus
107
107
111
113
115
116
9
Zeitabhängige Modelle
9.1 Das Teachpack image. ss
9.2 Modelle und Ansichten
9.3 Bewegung und Zustand
9.4 Andere Welten
121
121
124
126
128
10 Abstrakte Datentypen
10.1 ADTs, Signaturen und Datentypen
10.2 Zähler
10.3 Gleichungsdefinierte Datentypen
10.4 Konstruktoren und wohlgeformte ADTs
10.5 Listen
10.6 ADTs und Implementierung
10.7 Suchen in endlichen Mengen
10.8 Parametrisierte Implementierung
133
133
135
137
140
142
143
147
150
11 Binäre Bäume
11.1 Binärbäume
11.2 Suchbäume
11.3 Huffman-Bäume
153
153
158
163
12 Zuweisungen und Zustand
12.1 Zustandsvariablen
12.2 Zustand kapseln
12.3 Erweitertes Beispiel
'
175
175
178
181
Inhaltsverzeichnis
12.4
12.5
12.6
12.7
12.8
Zuweisungen und das Substitutionsmodell
Das Umgebungsmodell für die Programmauswertung
Gekapselter Zustand mit Closures
Sharing und Identität
Zeiger
vii
186
189
194
197
199
13 Objektorientiertes Programmieren
13.1 Message-Passing-Style
13.2 OOP = MPS +Zustand + s e i f + Vererbung
13.3 Vererbung und s e i f
13.4 Mehrfachvererbung
13.5 Abstraktion über Klassen
203
203
205
212
216
219
14 Logische Kalküle
14.1 Wahrheit und Beweisbarkeit
14.2 Ein Kalkül für die Aussagenlogik
14.3 Modelle für die Aussagenlogik
14.4 Korrektheit, Konsistenz und Vollständigkeit
14.5 Der Reduktionskalkül RCi
225
225
226
228
229
230
15 DerX-Kalkül
15.1 Sprache und Reduktionssemantik
15.2 Normalformen
15.3 Der Ä,-Kalkül als Programmiersprache
15.4 Auswertungsstrategien
15.5 Die Auswertungsstrategie von Scheme
15.6 Übungsaufgaben
237
237
242
243
248
250
250
16 Interpretation von Scheme
16.1 Quote und Symbole
16.2 Mini-Scheme: eine Untermenge von Scheme
16.3 Repräsentation von Werten
16.4 Repräsentation von Umgebungen und Frames
16.5 Auswertung und Anwendung
16.6 Programme ausführen
253
253
257
265
266
273
280
A Geschichte der Informatik
A.l Automatisierung des Denkens
A.2 Programmierbare Maschinen
A.3 Programme, Berechnungen und Algorithmen
287
287
288
290
B Mathematische Grundlagen
B. 1 Aussagenlogik
B.2 Mengen
B.3 Prädikatenlogik
293
293
294
297
viii
Inhaltsverzeichnis
B.4 Multimengen
B.5 Relationen und Abbildungen
298
298
B.6 Ordnungen
300
C Mantras zur Programmierung
303
D Konstruktionsanleitungen
305
Herunterladen