© 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 1.1 Java - mehr als nur kalter Kaffee? 1.2 Java für Anfänger - Das Konzept dieses Buches 1.3 Weitere Infos und Kontakt zu den Autoren 1.4 Verwendete Schreibweisen

17 17 18 19 20

2 Einige Grundbegriffe aus der Welt des Programmierens 2.1 Computer, Software, Informatik und das Internet 2.2 Was heißt Programmieren?

21 21 24

Einstieg in das Programmieren in Java

29

Aller Anfang ist schwer 3.1 Mein erstes Programm 3.2 Formeln, Ausdrücke und Anweisungen 3.3 Zahlenbeispiele 3.4 Verwendung von Variablen 3.5 „Auf den Schirm!" 3.6 Das Programmgerüst 3.7 Eingeben, übersetzen und ausführen 3.8 Übungsaufgaben

31 31 32 33 34 34 35 36 38

Grundlagen der Programmierung in Java 4.1 Grundelemente eines Java-Programms 4.1.1 Kommentare 4.1.2 Bezeichner und Namen 4.1.3 Literale 4.1.4 Reservierte Wörter, Schlüsselwörter 4.1.5 Trennzeichen 4.1.6 Interpunktionszeichen

39 39 41 43 44 45 45 47

Inhaltsverzeichnis

4.2

4.3

4.4

4.5

4.1.7 Operatorsymbole 4.1.8 import-Anweisungen 4.1.9 Zusammenfassung 4.1.10 Übungsaufgaben Erste Schritte in Java 4.2.1 Grundstruktur eines Java-Programms 4.2.2 Ausgaben auf der Konsole 4.2.3 Eingaben von der Konsole 4.2.4 Schöner Programmieren in Java 4.2.5 Zusammenfassung 4.2.6 Übungsaufgaben Einfache Datentypen 4.3.1 Ganzzahlige Datentypen 4.3.2 Gleitkommatypen 4.3.3 Der Datentyp char für Zeichen 4.3.4 Zeichenketten 4.3.5 Der Datentyp boolean für Wahrheitswerte 4.3.6 Implizite und explizite Typumwandlungen 4.3.7 Zusammenfassung 4.3.8 Übungsaufgaben Der Umgang mit einfachen Datentypen 4.4.1 Variablen 4.4.2 Operatoren und Ausdrücke 4.4.2.1 Arithmetische Operatoren 4.4.2.2 Bitoperatoren 4.4.2.3 Zuweisungsoperator 4.4.2.4 Vergleichsoperatoren und Logische Operatoren . . 4.4.2.5 Inkrement- und Dekrementoperatoren 4.4.2.6 Priorität und Auswertungsreihenfolge der Operatoren 4.4.3 Allgemeine Ausdrücke 4AA Ein- und Ausgabe 4.4.5 Zusammenfassung 4.4.6 Übungsaufgaben Anweisungen und Ablaufsteuerung 4.5.1 Anweisungen 4.5.2 Blöcke und ihre Struktur 4.5.3 Entscheidungsanweisung 4.5.3.1 Die if-Anweisung 4.5.3.2 Die switch-Anweisung 4.5.4 Wiederholungsanweisungen, Schleifen 4.5.4.1 Die f or-Anweisung 4.5.4.2 Die while-Anweisung 4.5.4.3 Die do-Anweisung

47 47 48 49 50 50 51 53 54 55 55 55 56 57 59 60 60 61 62 62 63 64 67 68 70 72 73 75 76 77 78 79 80 83 83 84 84 84 86 88 88 89 90

Inhaltsverzeichnis

4.5.5 4.5.6 4.5.7

4.5.4.4 Unendliche Schleifen Sprungbefehle und markierte Anweisungen Zusammenfassung Übungsaufgaben

Praxisbeispiele 5.1 Worum geht es in diesem Kapitel? 5.2 Teilbarkeit zum Ersten 5.2.1 Aufgabenstellung 5.2.2 Analyse des Problems 5.2.3 Algorithmische Beschreibung 5.2.4 Programmierung in Java 5.2.5 Vorsicht Falle 5.2.6 Übungsaufgaben 5.3 Teilbarkeit zum Zweiten 5.3.1 Aufgabenstellung 5.3.2 Analyse des Problems 5.3.3 Algorithmische Beschreibung 5.3.4 Programmierung in Java 5.3.5 Vorsicht, Falle! 5.3.6 Übungsaufgaben 5.4 Dreierlei 5.4.1 Aufgabenstellung 5.4.2 Analyse des Problems 5.4.3 Algorithmische Beschreibung 5.4.4 Programmierung in Java 5.4.5 Vorsicht Falle 5.4.6 Übungsaufgaben

91 92 94 94 99 99 99 99 99 100 101 102 103 103 103 103 104 104 105 106 107 107 108 108 109 112 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.3 10.4

10.5 10.6

10.2.1 Zugriffsrechte 10.2.2 Was sind Instanzmethoden? 10.2.3 Instanzmethoden zur Validierung von Eingaben 10.2.4 Instanzmethoden als erweiterte Funktionalität Statische Komponenten einer Klasse 10.3.1 Klassenvariablen und -methoden 10.3.2 Konstanten Instantiierung und Initialisierung 10.4.1 Konstruktoren 10.4.2 Überladen von Konstruktoren 10.4.3 Der statische Initialisierer 10.4.4 Der Mechanismus der Objekterzeugung Zusammenfassung Übungsaufgaben

253 254 257 259 260 261 263 267 267 269 271 274 279 280

11 Vererbung und Polymorphismus 11.1 Wozu braucht man Vererbung? 11.1.1 Aufgabenstellung 11.1.2 Analyse des Problems 11.1.3 Ein erster Ansatz 11.1.4 Eine Klasse für sich 11.1.5 Stärken der Vererbung 11.1.6 Übungsaufgaben 11.2 Die super-Referenz 11.3 Überschreiben von Methoden und Variablen 11.4 Die Klasse j a v a . l a n g . O b j e c t 11.5 Übungsaufgaben 11.6 Abstrakte Klassen und Interfaces 11.7 Übungsaufgaben 11.8 Weiteres zum Thema Objektorientierung 11.8.1 Erstellen von Paketen 11.8.2 Zugriffsrechte 11.8.3 Innere Klassen 11.8.4 Anonyme Klassen 11.9 Zusammenfassung ll.lOÜbungsaufgaben

301 301 301 302 302 303 304 306 308 309 311 314 315 319 324 324 326 326 332 334 335

12 Praxisbeispiele 12.1 Streng geheim 12.1.1 Aufgabenstellung 12.1.2 Analyse des Problems 12.1.3 Verschlüsselung durch Aufblähen 12.1.4 XOR-Verschlüsselung 12.1.5 Ein einfacher Test

347 347 347 348 349 351 353

Inhaltsverzeichnis 12.1.6 Übungsaufgaben 12.2 Mastermind zum Dritten 12.2.1 Aufgabenstellung 12.2.2 Die Klassen GameModel und GameEngine 12.2.3 Wir bauen ein Modell 12.2.3.1 Grundlegende Datenstruktur 12.2.3.2 Implementierung des Interfaces, Teil 1 12.2.3.3 Implementierung des Interfaces, Teil 2 12.2.4 Programmstart 12.2.5 Fazit 12.2.6 Übungsaufgaben 12.3 Game of Life 12.3.1 Aufgabenstellung 12.3.2 Designphase 12.3.3 Die Klasse Z e l l e 12.3.4 Die Klasse P e t r i s c h a l e 12.3.4.1 Interne Struktur und einfacher Datenzugriff . . . . 12.3.4.2 Erster Konstruktor: Zufällige Belegung der Zellen 12.3.4.3 Zweiter Konstruktor: Die neue Generation 12.3.4.4 Die komplette Klasse im Überblick 12.3.5 Die Klasse Life 12.3.6 Fazit 12.3.7 Übungsaufgaben 13 Exceptions und Errors 13.1 Eine Einführung in Exceptions 13.1.1 Was ist eine Exception? 13.1.2 Übungsaufgaben 13.1.3 Abfangen von Exceptions 13.1.4 Ein Anwendungsbeispiel 13.1.5 Die RuntimeException 13.1.6 Übungsaufgaben 13.2 Exceptions für Fortgeschrittene 13.2.1 Definieren eigener Exceptions 13.2.2 Übungsaufgaben 13.2.3 Vererbung und Exceptions 13.2.4 Vorsicht, Falle! 13.2.5 Der finally-Block 13.2.6 Die Klassen Throwable und E r r o r 13.2.7 Zusammenfassung 13.2.8 Übungsaufgaben

13 355 356 356 356 360 360 361 363 365 365 366 366 366 367 370 372 372 374 376 378 380 382 383 385 386 386 388 389 390 393 396 398 398 400 402 405 407 412 413 414

14

Inhaltsverzeichnis

14 Zu guter Letzt... 14.1 Collections 14.2 Sortieren von Feldern 14.3 Grafische Oberflächen in Java

417 418 420 423

A Der Weg zu einem guten Programmierer... A.l Die goldenen Regeln der Code-Formatierung A.2 Die goldenen Regeln der Namensgebung A.3 Zusammenfassung

429 430 433 435

B Die iOTools-Tastatureingaben in Java B.l Kurzbeschreibung B.2 Anwendung der IOTools-Methoden

439 439 440

C Glossar

443

Literaturverzeichnis

453

Stichwortverzeichnis

455

10

Inhaltsverzeichnis 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7

Komponentenzugriff bei Objekten 148 Ein erstes Adressbuch 149 Klassen als Referenzdatentyp 151 Felder von Klassen 154 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 7.1 Methoden 7.1.1 Was sind Methoden? 7.1.2 Deklaration von Methoden 7.1.3 Parameterübergabe und-rückgabe 7.1.4 Aufruf von Methoden 7.1.5 Überladen von Methoden 7.1.6 Vorsicht, Falle! 7.1.7 Sichtbarkeit und Verdecken von Variablen 7.1.8 Zusammenfassung 7.1.9 Übungsaufgaben 7.2 Rekursiv definierte Methoden 7.2.1 Motivation 7.2.2 Das Achtdamenproblem 7.2.2.1 Aufgabenstellung 7.2.2.2 Lösungsidee 7.2.2.3 Erste Vorarbeiten: Die Methoden ausgäbe und bedroht 7.2.2.4 Die Rekursion 7.2.2.5 Die Lösung . 7.2.3 Zusammenfassung 7.2.4 Übungsaufgaben 7.3 Die Methode main 7.3.1 Zusammenfassung 7.3.2 Übungsaufgaben 7.4 Die Methoden der Klasse j a v a . lang.Math 7.5 Die Methoden der Klasse j a v a . l a n g . S t r i n g 7.6 Übungsaufgaben

163 164 164 165 166 168 170 171 174 175 175 176 176 179 179 179

8

199 199 199 200 200

Praxisbeispiele 8.1 Mastermind zum Ersten 8.1.1 Aufgabenstellung 8.1.2 Analyse des Problems 8.1.3 Unterteilen einer Zahl

180 181 184 186 186 187 189 189 191 191 194

Inhaltsverzeichnis

11

8.1.4 Gültigkeit einer Zahl 8.1.5 Finden einer gültigen Zahl 8.1.6 Anzahl der Treff er 8.1.7 Ein-und Ausgabe 8.1.8 Zum Hauptprogramm 8.1.9 Das komplette Programm im Überblick 8.2 Mastermind zum Zweiten 8.2.1 Aufgabenstellung 8.2.2 Analyse des Problems 8.2.3 Verwendete Datenstrukturen 8.2.4 Vergleich der Versuche 8.2.5 Zum Hauptprogramm 8.2.6 Das komplette Programm im Überblick 8.3 Blackjack 8.3.1 Aufgabenstellung 8.3.2 Analyse des Problems 8.3.3 Mischen eines Kartenspiels 8.3.4 Die Pflichten des Gebers 8.3.5 Zum Hauptprogramm 8.3.6 Das komplette Programm im Überblick 8.3.7 Übungsaufgaben

201 202 203 204 205 206 209 209 209 209 210 211 212 214 214 215 217 218 219 222 225

II Objektorientiertes Programmieren in Java

227

9

Die 9.1 9.2 9.3

objektorientierte Philosophie Die Welt, in der wir leben Programmierparadigmen - Objektorientierung im Vergleich Die vier Grundpfeiler objektorientierter Programmierung 9.3.1 Generalisierung 9.3.2 Vererbung 9.3.3 Kapselung 9.3.4 Polymorphismus 9.3.5 Weitere wichtige Grundbegriffe 9.4 Modellbildung - von der realen Welt in den Computer 9.4.1 Grafisches Modellieren mit UML 9.4.2 CRC-Karten 9.4.3 Entwurfsmuster 9.5 Zusammenfassung 9.6 Übungsaufgaben

10 Der grundlegende Umgang mit Klassen 10.1 Vom Referenzdatentyp zur Objektorientierung 10.2 Instanzmethoden

231 231 . . . . 232 234 235 236 240 242 243 244 244 245 245 246 248 251 251 253