Grundkurs Programmieren in Java Band 1: Der Einstieg in Programmierung und Objektorientierung von Dietmar Ratz, Jens Scheffler, Detlef Seese 2. Auflage Hanser München 2004 Verlag C.H. Beck im Internet: www.beck.de ISBN 978 3 446 22878 8 Zu Leseprobe schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG
Inhaltsverzeichnis Vorwort 15 1 Einleitung 17 1.1 Java mehr als nur kalter Kaffee?... 17 1.2 Java für Anfänger Das Konzept dieses Buches... 18 1.3 Weitere Infos und Kontakt zu den Autoren... 19 1.4 Verwendete Schreibweisen... 20 2 Einige Grundbegriffe aus der Welt des Programmierens 21 2.1 Computer, Software, Informatik und das Internet... 21 2.2 Was heißt Programmieren?... 24 I Einstieg in das Programmieren in Java 29 3 Aller Anfang ist schwer 31 3.1 Mein erstes Programm... 31 3.2 Formeln, Ausdrücke und Anweisungen... 32 3.3 Zahlenbeispiele... 33 3.4 Verwendung von Variablen... 34 3.5 Auf den Schirm!... 34 3.6 Das Programmgerüst... 35 3.7 Eingeben, übersetzen und ausführen... 36 3.8 Übungsaufgaben... 38 4 Grundlagen der Programmierung in Java 39 4.1 Grundelemente eines Java-Programms... 39 4.1.1 Kommentare... 41 4.1.2 Bezeichner und Namen... 43 4.1.3 Literale... 44 4.1.4 Reservierte Wörter, Schlüsselwörter... 45 4.1.5 Trennzeichen... 45 4.1.6 Interpunktionszeichen... 46
8 Inhaltsverzeichnis 4.1.7 Operatorsymbole... 47 4.1.8 import-anweisungen... 47 4.1.9 Zusammenfassung... 48 4.1.10 Übungsaufgaben... 48 4.2 Erste Schritte in Java... 49 4.2.1 Grundstruktur eines Java-Programms... 50 4.2.2 Ausgaben auf der Konsole... 51 4.2.3 Eingaben von der Konsole... 53 4.2.4 Schöner Programmieren in Java... 53 4.2.5 Zusammenfassung... 54 4.2.6 Übungsaufgaben... 55 4.3 Einfache Datentypen... 55 4.3.1 Ganzzahlige Datentypen... 56 4.3.2 Gleitkommatypen... 57 4.3.3 Der Datentyp char für Zeichen... 59 4.3.4 Zeichenketten... 60 4.3.5 Der Datentyp boolean für Wahrheitswerte... 60 4.3.6 Implizite und explizite Typumwandlungen... 60 4.3.7 Zusammenfassung... 62 4.3.8 Übungsaufgaben... 62 4.4 Der Umgang mit einfachen Datentypen... 63 4.4.1 Variablen... 64 4.4.2 Operatoren und Ausdrücke... 67 4.4.2.1 Arithmetische Operatoren... 68 4.4.2.2 Bitoperatoren... 70 4.4.2.3 Zuweisungsoperator... 72 4.4.2.4 Vergleichsoperatoren und Logische Operatoren.. 74 4.4.2.5 Inkrement- und Dekrementoperatoren... 75 4.4.2.6 Priorität und Auswertungsreihenfolge der Operatoren... 76 4.4.3 Allgemeine Ausdrücke... 77 4.4.4 Ein- und Ausgabe... 78 4.4.5 Zusammenfassung... 80 4.4.6 Übungsaufgaben... 80 4.5 Anweisungen und Ablaufsteuerung... 83 4.5.1 Anweisungen... 84 4.5.2 Blöcke und ihre Struktur... 84 4.5.3 Entscheidungsanweisung... 85 4.5.3.1 Die if-anweisung... 85 4.5.3.2 Die switch-anweisung... 86 4.5.4 Wiederholungsanweisungen, Schleifen... 88 4.5.4.1 Die for-anweisung... 88 4.5.4.2 Die while-anweisung... 89 4.5.4.3 Die do-anweisung... 90
Inhaltsverzeichnis 9 4.5.4.4 Endlosschleifen... 91 4.5.5 Sprungbefehle und markierte Anweisungen... 92 4.5.6 Zusammenfassung... 94 4.5.7 Übungsaufgaben... 94 5 Praxisbeispiele 99 5.1 Worum geht es in diesem Kapitel?... 99 5.2 Teilbarkeit zum Ersten... 99 5.2.1 Aufgabenstellung... 99 5.2.2 Analyse des Problems... 99 5.2.3 Algorithmische Beschreibung... 100 5.2.4 Programmierung in Java... 101 5.2.5 Vorsicht, Falle!... 102 5.2.6 Übungsaufgaben... 103 5.3 Teilbarkeit zum Zweiten... 103 5.3.1 Aufgabenstellung... 103 5.3.2 Analyse des Problems... 103 5.3.3 Algorithmische Beschreibung... 104 5.3.4 Programmierung in Java... 104 5.3.5 Vorsicht, Falle!... 105 5.3.6 Übungsaufgaben... 106 5.4 Dreierlei... 107 5.4.1 Aufgabenstellung... 107 5.4.2 Analyse des Problems... 108 5.4.3 Algorithmische Beschreibung... 108 5.4.4 Programmierung in Java... 108 5.4.5 Vorsicht, Falle!... 112 5.4.6 Übungsaufgaben... 112 6 Referenzdatentypen 117 6.1 Felder... 119 6.1.1 Was sind Felder?... 122 6.1.2 Deklaration, Erzeugung und Initialisierung von Feldern.. 123 6.1.3 Felder unbekannter Länge... 126 6.1.4 Referenzen... 128 6.1.5 Ein besserer Terminkalender... 133 6.1.6 Mehrdimensionale Felder... 134 6.1.7 Mehrdimensionale Felder unterschiedlicher Länge... 138 6.1.8 Vorsicht, Falle: Kopieren von mehrdimensionalen Feldern. 140 6.1.9 Zusammenfassung... 141 6.1.10 Übungsaufgaben... 141 6.2 Klassen... 144 6.2.1 Was sind Klassen?... 145 6.2.2 Deklaration und Instantiierung von Klassen... 146
10 Inhaltsverzeichnis 6.2.3 Komponentenzugriff bei Objekten... 147 6.2.4 Ein erstes Adressbuch... 148 6.2.5 Klassen als Referenzdatentyp... 150 6.2.6 Felder von Klassen... 153 6.2.7 Vorsicht, Falle: Kopieren von geschachtelten Referenzdatentypen... 156 6.2.8 Auslagern von Klassen... 157 6.2.9 Zusammenfassung... 159 6.2.10 Übungsaufgaben... 160 7 Unterprogramme, Methoden 161 7.1 Methoden... 162 7.1.1 Was sind Methoden?... 162 7.1.2 Deklaration von Methoden... 163 7.1.3 Parameterübergabe und -rückgabe... 164 7.1.4 Aufruf von Methoden... 166 7.1.5 Überladen von Methoden... 167 7.1.6 Vorsicht, Falle!... 169 7.1.7 Sichtbarkeit und Verdecken von Variablen... 171 7.1.8 Zusammenfassung... 173 7.1.9 Übungsaufgaben... 173 7.2 Rekursiv definierte Methoden... 174 7.2.1 Motivation... 174 7.2.2 Das Achtdamenproblem... 177 7.2.2.1 Aufgabenstellung... 177 7.2.2.2 Lösungsidee... 177 7.2.2.3 Erste Vorarbeiten: Die Methoden ausgabe und bedroht... 177 7.2.2.4 Die Rekursion... 179 7.2.2.5 Die Lösung... 182 7.2.3 Zusammenfassung... 184 7.2.4 Übungsaufgaben... 184 7.3 Die Methode main... 184 7.3.1 Zusammenfassung... 186 7.3.2 Übungsaufgaben... 187 7.4 Methoden aus anderen Klassen aufrufen... 188 7.4.1 Klassenmethoden... 189 7.4.2 Die Methoden der Klasse java.lang.math... 190 7.5 Methoden von Objekten aufrufen... 191 7.5.1 Instanzmethoden... 191 7.5.2 Die Methoden der Klasse java.lang.string... 192 7.6 Übungsaufgaben... 195
Inhaltsverzeichnis 11 8 Praxisbeispiele 201 8.1 Mastermind zum Ersten... 201 8.1.1 Aufgabenstellung... 201 8.1.2 Analyse des Problems... 202 8.1.3 Unterteilen einer Zahl... 202 8.1.4 Gültigkeit einer Zahl... 203 8.1.5 Finden einer gültigen Zahl... 204 8.1.6 Anzahl der Treffer... 205 8.1.7 Ein- und Ausgabe... 206 8.1.8 Zum Hauptprogramm... 207 8.1.9 Das komplette Programm im Überblick... 208 8.2 Mastermind zum Zweiten... 211 8.2.1 Aufgabenstellung... 211 8.2.2 Analyse des Problems... 211 8.2.3 Verwendete Datenstrukturen... 211 8.2.4 Vergleich der Versuche... 212 8.2.5 Zum Hauptprogramm... 213 8.2.6 Das komplette Programm im Überblick... 214 8.3 Black Jack... 216 8.3.1 Aufgabenstellung... 216 8.3.2 Analyse des Problems... 217 8.3.3 Mischen eines Kartenspiels... 219 8.3.4 Die Pflichten des Gebers... 219 8.3.5 Zum Hauptprogramm... 221 8.3.6 Das komplette Programm im Überblick... 224 8.3.7 Übungsaufgaben... 227 II Objektorientiertes Programmieren in Java 229 9 Die objektorientierte Philosophie 233 9.1 Die Welt, in der wir leben... 233 9.2 Programmierparadigmen Objektorientierung im Vergleich... 234 9.3 Die vier Grundpfeiler objektorientierter Programmierung... 236 9.3.1 Generalisierung... 237 9.3.2 Vererbung... 238 9.3.3 Kapselung... 241 9.3.4 Polymorphismus... 243 9.3.5 Weitere wichtige Grundbegriffe... 244 9.4 Modellbildung von der realen Welt in den Computer... 245 9.4.1 Grafisches Modellieren mit UML... 245 9.4.2 CRC-Karten... 246 9.4.3 Entwurfsmuster... 246 9.5 Zusammenfassung... 247 9.6 Übungsaufgaben... 248
12 Inhaltsverzeichnis 10 Der grundlegende Umgang mit Klassen 251 10.1 Vom Referenzdatentyp zur Objektorientierung... 251 10.2 Instanzmethoden... 253 10.2.1 Zugriffsrechte... 253 10.2.2 Was sind Instanzmethoden?... 254 10.2.3 Instanzmethoden zur Validierung von Eingaben... 257 10.2.4 Instanzmethoden als erweiterte Funktionalität... 259 10.3 Statische Komponenten einer Klasse... 260 10.3.1 Klassenvariablen und -methoden... 260 10.3.2 Konstanten... 263 10.4 Instantiierung und Initialisierung... 266 10.4.1 Konstruktoren... 266 10.4.2 Überladen von Konstruktoren... 268 10.4.3 Der statische Initialisierer... 270 10.4.4 Der Mechanismus der Objekterzeugung... 273 10.5 Zusammenfassung... 278 10.6 Übungsaufgaben... 279 11 Vererbung und Polymorphismus 299 11.1 Wozu braucht man Vererbung?... 299 11.1.1 Aufgabenstellung... 299 11.1.2 Analyse des Problems... 300 11.1.3 Ein erster Ansatz... 300 11.1.4 Eine Klasse für sich... 301 11.1.5 Stärken der Vererbung... 302 11.1.6 Übungsaufgaben... 305 11.2 Die super-referenz... 307 11.3 Überschreiben von Methoden und Variablen... 308 11.4 Die Klasse java.lang.object... 310 11.5 Übungsaufgaben... 313 11.6 Abstrakte Klassen und Interfaces... 314 11.7 Übungsaufgaben... 317 11.8 Weiteres zum Thema Objektorientierung... 323 11.8.1 Erstellen von Paketen... 323 11.8.2 Zugriffsrechte... 324 11.8.3 Innere Klassen... 325 11.8.4 Anonyme Klassen... 330 11.9 Zusammenfassung... 332 11.10Übungsaufgaben... 333 12 Praxisbeispiele 345 12.1 Streng geheim... 345 12.1.1 Aufgabenstellung... 345 12.1.2 Analyse des Problems... 346
Inhaltsverzeichnis 13 12.1.3 Verschlüsselung durch Aufblähen... 347 12.1.4 XOR-Verschlüsselung... 349 12.1.5 Ein einfacher Test... 351 12.1.6 Übungsaufgaben... 353 12.2 Mastermind zum Dritten... 354 12.2.1 Aufgabenstellung... 354 12.2.2 Die Klassen GameModel und GameEngine... 354 12.2.3 Wir bauen ein Modell... 358 12.2.3.1 Grundlegende Datenstruktur... 358 12.2.3.2 Implementierung des Interfaces, Teil 1... 359 12.2.3.3 Implementierung des Interfaces, Teil 2... 360 12.2.4 Programmstart... 362 12.2.5 Fazit... 363 12.2.6 Übungsaufgaben... 364 12.3 Game of Life... 364 12.3.1 Aufgabenstellung... 364 12.3.2 Designphase... 365 12.3.3 Die Klasse Zelle... 368 12.3.4 Die Klasse Petrischale... 370 12.3.4.1 Interne Struktur und einfacher Datenzugriff... 370 12.3.4.2 Erster Konstruktor: Zufällige Belegung der Zellen 371 12.3.4.3 Zweiter Konstruktor: Die neue Generation... 374 12.3.4.4 Die komplette Klasse im Überblick... 375 12.3.5 Die Klasse Life... 377 12.3.6 Fazit... 379 12.3.7 Übungsaufgaben... 380 13 Exceptions und Errors 383 13.1 Eine Einführung in Exceptions.... 384 13.1.1 Was ist eine Exception?... 384 13.1.2 Übungsaufgaben... 386 13.1.3 Abfangen von Exceptions... 386 13.1.4 Ein Anwendungsbeispiel... 388 13.1.5 Die RuntimeException... 391 13.1.6 Übungsaufgaben... 393 13.2 Exceptions für Fortgeschrittene... 396 13.2.1 Definieren eigener Exceptions... 396 13.2.2 Übungsaufgaben... 398 13.2.3 Vererbung und Exceptions... 399 13.2.4 Vorsicht, Falle!... 403 13.2.5 Der finally-block... 404 13.2.6 Die Klassen Throwable und Error... 409 13.2.7 Zusammenfassung... 411 13.2.8 Übungsaufgaben... 411
14 Inhaltsverzeichnis 13.3 Assertions... 412 13.3.1 Zusicherungen im Programmcode... 412 13.3.2 Compilieren des Programmcodes... 413 13.3.3 Ausführen des Programmcodes... 414 13.3.4 Zusammenfassung... 414 14 Zu guter Letzt... 415 14.1 Collections... 416 14.2 Sortieren von Feldern... 418 14.3 Grafische Oberflächen in Java... 421 A Der Weg zum guten Programmierer... 429 A.1 Die goldenen Regeln der Code-Formatierung... 430 A.2 Die goldenen Regeln der Namensgebung... 433 A.3 Zusammenfassung... 435 B Die IOTools Tastatureingaben in Java 439 B.1 Kurzbeschreibung... 439 B.2 Anwendung der IOTools-Methoden... 440 C Einige Neuerungen in Java 5.0 443 C.1 Vereinfachte Schleifen-Notation... 444 C.2 Variable Argument-Anzahl bei Methoden... 445 C.3 Formatierte Ausgabe... 446 C.4 Vereinfachte Eingabe... 446 C.5 Statische Importe... 447 C.6 Aufzählungstypen... 448 C.7 Generische Datentypen... 451 C.8 Automatische Typwandlung für die Wrapper-Klassen... 457 D Glossar 459 Literaturverzeichnis 469 Stichwortverzeichnis 471