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
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
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
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
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
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
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