1 Tag 1: Vorbereitungen und Javas kleinste Bausteine | 21 |
1.1 Warum gerade mit Java beginnen? | 22 |
1.2 Installation von Java | 23 |
1.2.1 Wahl einer Entwicklungsumgebung | 23 |
1.2.2 Testen wir das installierte Java-System | 24 |
1.3 Vorteile des Selbststudiums | 26 |
1.4 Primitive Datentypen und ihre Wertebereiche | 27 |
1.4.1 Primitive Datentypen allgemein | 28 |
1.4.2 Primitive Datentypen in Java | 28 |
1.5 Variablen und Konstanten | 30 |
1.5.1 Deklaration von Variablen | 30 |
1.5.2 Variablen versus Konstanten | 31 |
1.6 Primitive Datentypen und ihre Operationen | 32 |
1.6.1 Datentyp boolean | 32 |
1.6.2 Datentyp char | 35 |
1.6.3 Datentyp int | 35 |
1.6.4 Datentypen byte, short und long | 36 |
1.6.5 Datentypen float und double | 37 |
1.7 Umwandlungen von Datentypen | 38 |
1.7.1 Explizite Typumwandlung | 39 |
1.7.2 Übersicht zu impliziten Typumwandlungen | 40 |
1.7.3 Die Datentypen sind für die Operation entscheidend | 40 |
1.8 Zusammenfassung und Aufgaben | 41 |
2 Tag 2: Grundlegende Prinzipien der Programmentwicklung | 43 |
2.1 Programm als Kochrezept | 44 |
2.2 Methoden der Programmerstellung | 45 |
2.2.1 Sequentieller Programmablauf | 46 |
2.2.2 Verzweigungen | 46 |
2.2.3 Sprünge | 47 |
2.2.4 Schleifen | 47 |
2.2.5 Parallelität | 47 |
2.2.6 Kombination zu Programmen | 48 |
2.3 Programme in Java | 48 |
2.3.1 Erstellen eines Javaprogramms in Pseudocode | 49 |
2.3.2 Erstellen eines Javaprogramms | 49 |
2.4 Programmieren mit einem einfachen Klassenkonzept | 50 |
2.5 Sequentielle Anweisungen | 52 |
2.6 Verzweigungen | 53 |
2.6.1 Verzweigung mit if | 54 |
2.6.2 Verzweigung mit switch | 55 |
2.7 Verschiedene Schleifentypen | 56 |
2.7.1 Schleife mit for | 56 |
2.7.2 Schleife mit while | 58 |
2.7.3 Schleife mit do-while | 59 |
2.8 Sprunganweisungen | 60 |
2.8.1 Sprung mit break | 60 |
2.8.2 Sprung mit continue | 62 |
2.9 Funktionen in Java | 63 |
2.10 Zusammenfassung und Aufgaben | 66 |
3 Tag 3: Daten laden und speichern | 68 |
3.1 Externe Programmeingaben | 69 |
3.2 Daten aus einer Datei einlesen | 70 |
3.3 Daten in eine Datei schreiben | 72 |
3.4 Daten von der Konsole einlesen | 72 |
3.5 Zusammenfassung und Aufgaben | 73 |
4 Tag 4: Verwendung einfacher Datenstrukturen | 75 |
4.1 Arrays | 76 |
4.1.1 Deklaration und Zuweisung | 77 |
4.1.2 Vereinfachte Schleife mit for | 78 |
4.2 Matrizen oder multidimensionale Arrays | 78 |
4.3 Conway's Game of Life | 79 |
4.3.1 Einfache Implementierung | 81 |
4.3.2 Auswahl besonderer Muster und Ausblick | 84 |
4.4 Zusammenfassung und Aufgaben | 84 |
5 Tag 5: Debuggen und Fehlerbehandlungen | 86 |
5.1 Das richtige Konzept | 87 |
5.2 Exceptions in Java | 89 |
5.2.1 Einfache try-catch-Behandlung | 90 |
5.2.2 Mehrfache try-catch-Behandlung | 91 |
5.3 Fehlerhafte Berechnungen aufspüren | 92 |
5.3.1 Berechnung der Zahl pi nach Leibniz | 92 |
5.3.2 Zeilenweises Debuggen und Breakpoints | 95 |
5.4 Zusammenfassung und Aufgaben | 95 |
6 Tag 6: Erweitertes Klassenkonzept | 97 |
6.1 Entwicklung eines einfachen Fußballmanagers | 98 |
6.2 Spieler und Trainer | 98 |
6.2.1 Generalisierung und Spezialisierung | 98 |
6.2.2 Klassen und Vererbung | 99 |
6.2.3 Modifizierer public und private | 101 |
6.2.4 Objekte und Instanzen | 102 |
6.2.5 Konstruktoren in Java | 103 |
6.3 Torwart | 105 |
6.4 Die Mannschaft | 106 |
6.5 Turniere und Freundschaftsspiele | 107 |
6.5.1 Ein Interface Freundschaftsspiel festlegen | 107 |
6.5.2 Freundschaftsspiel FC Steinhausen-Oderbrucher SK | 110 |
6.5.3 Beispiel zu Interface | 113 |
6.5.4 Interface versus abstrakte Klasse | 115 |
6.6 Zusammenfassung und Aufgaben | 116 |
7 Tag 7: Aufarbeitung der vorhergehenden Kapitel | 118 |
7.1 Referenzvariablen | 119 |
7.2 Zugriff auf Attribute und Methoden durch Punktnotation | 120 |
7.3 Die Referenzvariable this | 121 |
7.4 Prinzip des Überladens | 121 |
7.4.1 Überladung von Konstruktoren | 122 |
7.4.2 Der Copy-Konstruktor | 123 |
7.5 Garbage Collector | 123 |
7.6 Statische Attribute und Methoden | 124 |
7.7 Primitive Datentypen und ihre Wrapperklassen | 125 |
7.8 Die Klasse String | 126 |
7.8.1 Erzeugung und Manipulation von Zeichenketten | 126 |
7.8.2 Vergleich von Zeichenketten | 127 |
7.9 Zusammenfassung und Aufgaben | 129 |
8 Tag 8: Verwendung von Bibliotheken | 131 |
8.1 Standardbibliotheken | 132 |
8.2 Funktionen der Klasse Math | 134 |
8.3 Zufallszahlen in Java | 134 |
8.3.1 Ganzzahlige Zufallszahlen vom Typ int und long | 135 |
8.3.2 Zufallszahlen vom Typ float und double | 136 |
8.3.3 Weitere nützliche Funktionen der Klasse Random | 136 |
8.4 Das Spielprojekt BlackJack | 137 |
8.4.1 Spielregeln | 137 |
8.4.2 Spieler, Karten und Kartenspiel | 138 |
8.4.2.1 Verwendungsbeispiel für die Datenstruktur Vector | 138 |
8.4.2.2 Implementierung der Klassen Spieler, Karteund Kartenspiel | 140 |
8.4.3 Die Spielklasse BlackJack | 143 |
8.5 JAMA -- Lineare Algebra | 149 |
8.6 Eine eigene Bibliothek bauen | 151 |
8.7 Zusammenfassung und Aufgaben | 152 |
9 Tag 9: Grafische Benutzeroberflächen | 154 |
9.1 Fenstermanagement unter AWT | 155 |
9.1.1 Ein Fenster lokal erzeugen | 155 |
9.1.2 Vom Fenster erben und es zentrieren | 156 |
9.2 Zeichenfunktionen innerhalb eines Fensters | 157 |
9.2.1 Textausgaben | 158 |
9.2.2 Zeichenfunktionen | 158 |
9.2.3 Die Klasse Color | 159 |
9.2.4 Bilder laden und anzeigen | 160 |
9.3 Auf Fensterereignisse reagieren und sie behandeln | 162 |
9.3.1 Fenster mit dem Interface WindowListener schließen | 162 |
9.3.2 GUI-Elemente und ihre Ereignisse | 165 |
9.3.2.1 Layoutmanager | 165 |
9.3.2.2 Die Komponenten Label und Button | 165 |
9.3.2.3 Die Komponente TextField | 167 |
9.4 Auf Mausereignisse reagieren | 168 |
9.5 Zusammenfassung und Aufgaben | 170 |
10 Tag 10: Appletprogrammierung | 171 |
10.1 Kurzeinführung in HTML | 172 |
10.2 Applets im Internet | 172 |
10.3 Funktionen eines Applets | 173 |
10.4 Verwendung des Appletviewers | 174 |
10.5 Eine Applikation zum Applet umbauen | 176 |
10.5.1 Konstruktor zu init | 176 |
10.5.2 paint-Methoden anpassen | 177 |
10.5.3 TextField-Beispiel zum Applet umbauen | 178 |
10.6 Flackernde Applets vermeiden | 179 |
10.6.1 Die Ghosttechnik anwenden | 181 |
10.6.2 Die update-Methode überschreiben | 182 |
10.7 Ein Beispiel mit mouseDragged | 183 |
10.8 Diebstahl von Applets erschweren | 184 |
10.8.1 Download und Dekompilierung | 185 |
10.8.2 Verwirrung durch einen Obfuscator | 187 |
10.9 Zusammenfassung und Aufgaben | 187 |
11 Tag 11: Techniken der Programmentwicklung | 189 |
11.1 Der Begriff Algorithmus | 190 |
11.2 Techniken zum Entwurf von Algorithmen | 190 |
11.2.1 Prinzip der Rekursion | 190 |
11.2.2 Brute Force | 192 |
11.2.3 Greedy | 193 |
11.2.4 Dynamische Programmierung und Memoisation | 193 |
11.2.5 Teile und Herrsche | 195 |
11.3 Algorithmen miteinander vergleichen | 195 |
11.4 Kleine algorithmische Probleme | 196 |
11.4.1 Identifikation und Erzeugung von Primzahlenmit Brute Force | 196 |
11.4.2 Sortieralgorithmen | 197 |
11.4.2.1 InsertionSort | 197 |
11.4.2.2 BubbleSort | 198 |
11.4.2.3 QuickSort | 199 |
11.4.3 Needleman-Wunsch-Algorithmus | 201 |
11.5 Zusammenfassung und Aufgaben | 203 |
12 Tag 12: Bildverarbeitung | 204 |
12.1 Das RGB-Farbmodell | 205 |
12.2 Grafische Spielerei: Apfelmännchen | 207 |
12.2.1 Mathematischer Hintergrund | 207 |
12.2.2 Das Apfelmännchen-Fraktal in grau | 209 |
12.2.3 Die Klasse BufferedImage | 211 |
12.2.4 Bilder laden und speichern | 212 |
12.2.5 Das Apfelmännchen-Fraktal in Farbe | 214 |
12.3 Bilder bearbeiten | 217 |
12.3.1 Ein Bild invertieren | 218 |
12.3.2 Erstellung eines Grauwertbildes | 219 |
12.3.3 Binarisierung eines Grauwertbildes | 220 |
12.4 Zusammenfassung und Aufgaben | 221 |
13 Tag 13: Methoden der Künstlichen Intelligenz | 222 |
13.1 Mustererkennung | 223 |
13.1.1 Einlesen der Trainingsdaten | 223 |
13.1.2 k-nn Algorithmus | 228 |
13.1.2.1 Visualisierung des Algorithmus | 228 |
13.1.2.2 Implementierung eines k-nn Klassifikators | 228 |
13.1.3 k-means Algorithmus | 231 |
13.1.3.1 Bestimmung der k Prototypen | 231 |
13.1.3.2 Expectation-Maximizationals Optimierungsverfahren | 232 |
13.1.3.3 Allgemeine Formulierungdes k-means Algorithmus | 233 |
13.1.3.4 Implementierung des k-means | 233 |
13.2 Ein künstlicher Spielegegner | 237 |
13.2.1 Der MinMax-Algorithmus | 238 |
13.2.2 MinMax mit unbegrenzter Suchtiefe | 238 |
13.2.3 MinMax mit begrenzter Suchtiefe und Bewertungsfunktion | 240 |
13.2.4 Spieleprojekt TicTacToe | 241 |
13.3 Zusammenfassung und Aufgaben | 247 |
14 Tag 14: Entwicklung einer größeren Anwendung | 248 |
14.1 Entwurf eines Konzepts | 249 |
14.1.1 GUI Klassen | 250 |
14.1.2 Spiellogik | 251 |
14.1.3 Spieldatenverwaltung | 251 |
14.1.4 Komplettes Klassendiagramm | 253 |
14.2 Implementierung | 253 |
14.2.1 Klasse TeeTristBox | 253 |
14.2.2 Klasse TeeTristStein | 253 |
14.2.3 Klasse TeeTristSpielfeld | 257 |
14.2.4 Klasse SpielThread | 261 |
14.2.5 Klasse TeeTristPanel | 264 |
14.2.6 Klasse TeeTrist | 265 |
14.3 Spielen wir ein Spiel TeeTrist | 266 |
14.4 Dokumentation mit javadoc | 266 |
14.5 Zusammenfassung und Aufgaben | 267 |
15 Java -- Weiterführende Konzepte | 269 |
15.1 Professionelle Entwicklungsumgebungen | 270 |
15.2 Das Klassendiagramm als Konzept einer Software | 270 |
15.3 Klassendiagramm mit UML | 270 |
15.3.1 Klasse | 271 |
15.3.2 Vererbung | 271 |
15.3.3 Beziehungen zwischen Klassen | 272 |
15.3.3.1 Beziehungen | 272 |
15.3.3.2 Kardinalitäten | 272 |
15.3.3.3 Aggregation und Komposition | 273 |
15.4 Verwendung externer Bibliotheken | 273 |
15.5 Zusammenarbeit in großen Projekten | 274 |
Glossar | 275 |
Literaturverzeichnis | 280 |
Sachverzeichnis | 283 |