2008 AGI-Information Management Consultants May be used for personal purporses only or by libraries associated to dandelon.com network. Dietmar Ratz Jens Scheffler Detlef Seese Grundkurs Programmieren in Java Band 1: Der Einstieg in Programmierung und Objektorientierung HANSER
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 Einstieg in das Programmieren in Java 29 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 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 47
Inhaltsverzeichnis 4.1.7 Operatorsymbole 47 4.1.8 import-anweisungen 47 4.1.9 Zusammenfassung 48 4.1.10 Übungsaufgaben 49 4.2 Erste Schritte in Java 50 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 54 4.2.5 Zusammenfassung 55 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 61 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.. 73 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 4AA Ein- und Ausgabe 78 4.4.5 Zusammenfassung 79 4.4.6 Übungsaufgaben 80 4.5 Anweisungen und Ablaufsteuerung 83 4.5.1 Anweisungen 83 4.5.2 Blöcke und ihre Struktur 84 4.5.3 Entscheidungsanweisung 84 4.5.3.1 Die if-anweisung 84 4.5.3.2 Die switch-anweisung 86 4.5.4 Wiederholungsanweisungen, Schleifen 88 4.5.4.1 Die f or-anweisung 88 4.5.4.2 Die while-anweisung 89 4.5.4.3 Die do-anweisung 90
Inhaltsverzeichnis 4.5.4.4 Unendliche Schleifen 91 4.5.5 Sprungbefehle und markierte Anweisungen 92 4.5.6 Zusammenfassung 94 4.5.7 Übungsaufgaben 94 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 109 5.4.5 Vorsicht Falle 112 5.4.6 Übungsaufgaben 112 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 142 6.2 Klassen 145 6.2.1 Was sind Klassen? 146 6.2.2 Deklaration und Instantiierung von Klassen 146
12 Inhaltsverzeichnis 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 261 10.3.2 Konstanten 263 10.4 Instantiierung und Initialisierung 267 10.4.1 Konstruktoren 267 10.4.2 Überladen von Konstruktoren 269 10.4.3 Der statische Initialisierer 271 10.4.4 Der Mechanismus der Objekterzeugung 274 10.5 Zusammenfassung 279 10.6 Übungsaufgaben 280 11 Vererbung und Polymorphismus 301 11.1 Wozu braucht man Vererbung? 301 11.1.1 Aufgabenstellung 301 11.1.2 Analyse des Problems 302 11.1.3 Ein erster Ansatz 302 11.1.4 Eine Klasse für sich 303 11.1.5 Stärken der Vererbung 304 11.1.6 Übungsaufgaben 306 11.2 Die super-referenz 308 11.3 Überschreiben von Methoden und Variablen 309 11.4 Die Klasse java. lang.object 311 11.5 Übungsaufgaben 314 11.6 Abstrakte Klassen und Interfaces 315 11.7 Übungsaufgaben 319 11.8 Weiteres zum Thema Objektorientierung 324 11.8.1 Erstellen von Paketen 324 11.8.2 Zugriffsrechte 326 11.8.3 Innere Klassen 326 11.8.4 Anonyme Klassen 332 11.9 Zusammenfassung 334 ll.loübungsaufgaben 335 12 Praxisbeispiele 347 12.1 Streng geheim 347 12.1.1 Aufgabenstellung 347 12.1.2 Analyse des Problems 348 12.1.3 Verschlüsselung durch Aufblähen 349 12.1.4 XOR-Verschlüsselung 351 12.1.5 Ein einfacher Test 353
Inhaltsverzeichnis 13 12.1.6 Übungsaufgaben 355 12.2 Mastermind zum Dritten 356 12.2.1 Aufgabenstellung 356 12.2.2 Die Klassen GameModel und GameEngine 356 12.2.3 Wir bauen ein Modell 360 12.2.3.1 Grundlegende Datenstruktur 360 12.2.3.2 Implementierung des Interfaces, Teil 1 361 12.2.3.3 Implementierung des Interfaces, Teil 2 363 12.2.4 Programmstart 365 12.2.5 Fazit 365 12.2.6 Übungsaufgaben 366 12.3 Game of Life 366 12.3.1 Aufgabenstellung 366 12.3.2 Designphase 367 12.3.3 Die Klasse Zelle 370 12.3.4 Die Klasse Petrischale 372 12.3.4.1 Interne Struktur und einfacher Datenzugriff... 372 12.3.4.2 Erster Konstruktor: Zufällige Belegung der Zellen 374 12.3.4.3 Zweiter Konstruktor: Die neue Generation 376 12.3.4.4 Die komplette Klasse im Überblick 378 12.3.5 Die Klasse Life 380 12.3.6 Fazit 382 12.3.7 Übungsaufgaben 383 13 Exceptions und Errors 385 13.1 Eine Einführung in Exceptions 386 13.1.1 Was ist eine Exception? 386 13.1.2 Übungsaufgaben 388 13.1.3 Abfangen von Exceptions 389 13.1.4 Ein Anwendungsbeispiel 390 13.1.5 Die RuntimeException 393 13.1.6 Übungsaufgaben 396 13.2 Exceptions für Fortgeschrittene 398 13.2.1 Definieren eigener Exceptions 398 13.2.2 Übungsaufgaben 400 13.2.3 Vererbung und Exceptions 402 13.2.4 Vorsicht, Falle! 405 13.2.5 Der finally-block 407 13.2.6 Die Klassen Throwable und Error 412 13.2.7 Zusammenfassung 413 13.2.8 Übungsaufgaben 414
14 Inhaltsverzeichnis 14 Zu guter Letzt... 417 14.1 Collections 418 14.2 Sortieren von Feldern 420 14.3 Grafische Oberflächen in Java 423 A Der Weg zu einem guten Programmierer... 429 A.l 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.l Kurzbeschreibung 439 B.2 Anwendung der IOTools-Methoden 440 C Glossar 443 Literaturverzeichnis 453 Stichwortverzeichnis 455
10 Inhaltsverzeichnis 6.2.3 Komponentenzugriff bei Objekten 148 6.2.4 Ein erstes Adressbuch 149 6.2.5 Klassen als Referenzdatentyp 151 6.2.6 Felder von Klassen 154 6.2.7 Vorsicht, Falle: Kopieren von geschachtelten Referenzdatentypen 157 6.2.8 Auslagern von Klassen 158 6.2.9 Zusammenfassung 160 6.2.10 Übungsaufgaben 160 7 Unterprogramme, Methoden 163 7.1 Methoden 164 7.1.1 Was sind Methoden? 164 7.1.2 Deklaration von Methoden 165 7.1.3 Parameterübergabe und-rückgabe 166 7.1.4 Aufruf von Methoden 168 7.1.5 Überladen von Methoden 170 7.1.6 Vorsicht, Falle! 171 7.1.7 Sichtbarkeit und Verdecken von Variablen 174 7.1.8 Zusammenfassung 175 7.1.9 Übungsaufgaben 175 7.2 Rekursiv definierte Methoden 176 7.2.1 Motivation 176 7.2.2 Das Achtdamenproblem 179 7.2.2.1 Aufgabenstellung 179 7.2.2.2 Lösungsidee 179 7.2.2.3 Erste Vorarbeiten: Die Methoden ausgäbe und bedroht 180 7.2.2.4 Die Rekursion 181 7.2.2.5 Die Lösung. 184 7.2.3 Zusammenfassung 186 7.2.4 Übungsaufgaben 186 7.3 Die Methode main 187 7.3.1 Zusammenfassung 189 7.3.2 Übungsaufgaben 189 7.4 Die Methoden der Klasse java. lang.math 191 7.5 Die Methoden der Klasse java. lang. String 191 7.6 Übungsaufgaben 194 8 Praxisbeispiele 199 8.1 Mastermind zum Ersten 199 8.1.1 Aufgabenstellung 199 8.1.2 Analyse des Problems 200 8.1.3 Unterteilen einer Zahl 200
Inhaltsverzeichnis 11 8.1.4 Gültigkeit einer Zahl 201 8.1.5 Finden einer gültigen Zahl 202 8.1.6 Anzahl der Treff er 203 8.1.7 Ein-und Ausgabe 204 8.1.8 Zum Hauptprogramm 205 8.1.9 Das komplette Programm im Überblick 206 8.2 Mastermind zum Zweiten 209 8.2.1 Aufgabenstellung 209 8.2.2 Analyse des Problems 209 8.2.3 Verwendete Datenstrukturen 209 8.2.4 Vergleich der Versuche 210 8.2.5 Zum Hauptprogramm 211 8.2.6 Das komplette Programm im Überblick 212 8.3 Blackjack 214 8.3.1 Aufgabenstellung 214 8.3.2 Analyse des Problems 215 8.3.3 Mischen eines Kartenspiels 217 8.3.4 Die Pflichten des Gebers 218 8.3.5 Zum Hauptprogramm 219 8.3.6 Das komplette Programm im Überblick 222 8.3.7 Übungsaufgaben 225 II Objektorientiertes Programmieren in Java 227 9 Die objektorientierte Philosophie 231 9.1 Die Welt, in der wir leben 231 9.2 Programmierparadigmen - Objektorientierung im Vergleich... 232 9.3 Die vier Grundpfeiler objektorientierter Programmierung 234 9.3.1 Generalisierung 235 9.3.2 Vererbung 236 9.3.3 Kapselung 240 9.3.4 Polymorphismus 242 9.3.5 Weitere wichtige Grundbegriffe 243 9.4 Modellbildung - von der realen Welt in den Computer 244 9.4.1 Grafisches Modellieren mit UML 244 9.4.2 CRC-Karten 245 9.4.3 Entwurfsmuster 245 9.5 Zusammenfassung 246 9.6 Übungsaufgaben 248 10 Der grundlegende Umgang mit Klassen 251 10.1 Vom Referenzdatentyp zur Objektorientierung 251 10.2 Instanzmethoden 253