Einführung in Java mit BlueJ - Objektorientierte Programmierung für Einsteiger
von: Florian Siebler
Galileo Press, 2011
ISBN: 9783836216302
Sprache: Deutsch
659 Seiten, Download: 5836 KB
Format: PDF, auch als Online-Lesen
Liebe Leserin, lieber Leser, | 3 | ||
Auf einen Blick | 4 | ||
Inhalt | 6 | ||
Geleitwort des Fachgutachters | 18 | ||
Vorwort | 20 | ||
Grundlagen | 24 | ||
1 Einführung | 26 | ||
1.1 Was ist ein Algorithmus? | 26 | ||
1.2 Was haben Sie mit Algorithmen zu tun? | 28 | ||
1.3 Beispiele für Algorithmen | 28 | ||
1.4 Wie arbeitet ein Computer? | 30 | ||
1.5 Überblick über Java und den Entwicklungsprozess | 32 | ||
1.6 Ist Java der Weisheit letzter Schluss? | 33 | ||
1.7 Was bedeutet Objektorientierung? | 34 | ||
1.8 Das Wichtigste auf einen Blick | 36 | ||
1.9 Übungen | 37 | ||
2 Installation und Konfiguration von Java und BlueJ | 38 | ||
2.1 Java installieren | 38 | ||
2.2 BlueJ installieren | 40 | ||
2.3 BlueJ konfigurieren | 41 | ||
2.4 Erste Schritte mit BlueJ | 41 | ||
2.4.1 Das erste Projekt anlegen | 41 | ||
2.4.2 Die erste Klasse anlegen | 42 | ||
2.4.3 Quelltext einer Klasse bearbeiten | 43 | ||
2.5 Weitere Features von BlueJ | 46 | ||
2.5.1 Projekte dokumentieren | 46 | ||
2.5.2 Projekte drucken | 47 | ||
2.5.3 Programme weitergeben | 47 | ||
2.6 Übungen | 48 | ||
3 Erste Schritte in Java | 50 | ||
3.1 Der Rahmen einer Klasse | 50 | ||
3.2 Klassen in der Objektorientierung | 52 | ||
3.2.1 Attribute | 52 | ||
3.2.2 Methoden | 53 | ||
3.2.3 Optional: Parameter und Rückgabewert | 55 | ||
3.2.4 Abschließendes zu Methoden | 56 | ||
3.2.5 Blöcke | 57 | ||
3.3 Ein Objekt erzeugen | 58 | ||
3.4 Kommentare | 60 | ||
3.5 Das Wichtigste auf einen Blick | 63 | ||
3.6 Übungen | 64 | ||
4 Variablen, Datentypen und Operatoren | 66 | ||
4.1 Variablen deklarieren | 66 | ||
4.1.1 Bezeichner | 67 | ||
4.1.2 Datentypen | 69 | ||
4.2 Arten von Variablen | 81 | ||
4.2.1 Finale und variable Variablen | 82 | ||
4.2.2 Möglichkeiten der Deklaration | 83 | ||
4.3 Operatoren | 89 | ||
4.4 Arithmetische Operatoren | 90 | ||
4.4.1 Priorität und Assoziativität | 90 | ||
4.4.2 Anweisungen | 92 | ||
4.4.3 Ein Beispiel zur Wiederholung | 93 | ||
4.4.4 Codezeilen testen | 94 | ||
4.4.5 Inkrement und Dekrement | 95 | ||
4.4.6 Division und Rest | 98 | ||
4.5 Datentypen umwandeln | 102 | ||
4.6 Das Wichtigste auf einen Blick | 103 | ||
4.7 Übungen | 104 | ||
5 Bedingungen und Vergleiche | 108 | ||
5.1 Blöcke | 108 | ||
5.2 Die if-Anweisung | 109 | ||
5.3 Vergleichsoperatoren | 110 | ||
5.4 Mögliche Operanden bei Vergleichen | 111 | ||
5.5 Die Handlungsalternative else | 112 | ||
5.6 Logische Operatoren | 113 | ||
5.6.1 Die Und-Verknüpfung | 114 | ||
5.6.2 Die Oder-Verknüpfung | 116 | ||
5.6.3 Logische Negation | 117 | ||
5.7 Der ternäre Operator | 118 | ||
5.8 Die switch-Anweisung | 118 | ||
5.9 Beispiel: Bodymaßindex (BMI) berechnen | 121 | ||
5.10 Objekte vergleichen | 123 | ||
5.10.1 Für welche Objekte gelten die Aussagen? | 123 | ||
5.10.2 Warum können Objekte nicht mit dem Vergleichsoperator verglichen werden? | 126 | ||
5.10.3 Wie man Objekte stattdessen vergleicht | 128 | ||
5.11 Das Wichtigste auf einen Blick | 129 | ||
5.12 Übungen | 130 | ||
6 Schleifen und Wiederholungen | 134 | ||
6.1 Kopfgesteuerte Schleifen - while | 134 | ||
6.2 Fußgesteuerte Schleifen - do … while | 135 | ||
6.3 For-Schleifen | 135 | ||
6.3.1 Schleifen unterbrechen - break und continue | 138 | ||
6.3.2 Ein größeres Beispiel für for-Schleifen | 139 | ||
6.3.3 Schachteln von for-Schleifen | 142 | ||
6.3.4 Erweiterung - die for-each-Schleife | 147 | ||
6.4 Das Wichtigste auf einen Blick | 151 | ||
6.5 Übungen | 152 | ||
7 Anwendungsbeispiel: Geburtstagskalender | 154 | ||
7.1 Der erste Ansatz | 154 | ||
7.2 Der zweite Ansatz | 155 | ||
7.2.1 Die Datenbasis erstellen | 156 | ||
7.2.2 Die Datenbasis initialisieren | 157 | ||
7.2.3 Mehrere Geburtstagskinder an einem Tag | 158 | ||
7.2.4 Kalendereinträge ausgeben | 159 | ||
7.3 Fazit | 162 | ||
Objektorientierte Programmierung | 166 | ||
8 Grundlegende Aspekte der OOP | 168 | ||
8.1 Mit Objekten eigener Klassen arbeiten | 168 | ||
8.2 Inhalt einer Klasse - der Klassenentwurf | 171 | ||
8.3 Bestandteile einer Klasse | 174 | ||
8.3.1 Datenfelder und Referenzdatentypen | 174 | ||
8.3.2 Methoden | 178 | ||
8.3.3 Konstruktoren | 195 | ||
8.4 Das Konto-Projekt zum Abschluss bringen | 200 | ||
8.5 Pakete importieren und statische Importe | 202 | ||
8.5.1 Aufgabe von Paketen | 202 | ||
8.5.2 Klassen importieren | 203 | ||
8.5.3 Statische Importe | 205 | ||
8.5.4 Eine Eingabemöglichkeit schaffen | 209 | ||
8.6 Enumerations | 209 | ||
8.6.1 Lösungsansatz 1 | 210 | ||
8.6.2 Lösungsansatz 2 | 211 | ||
8.6.3 Lösungsansatz 3 | 213 | ||
8.7 UML und die Klassenkarte | 216 | ||
8.8 Annotations | 218 | ||
8.9 Das Wichtigste auf einen Blick | 219 | ||
8.10 Übungen | 221 | ||
9 Vererbung und Polymorphie | 224 | ||
9.1 Ihre Aufgabe in diesem Kapitel | 224 | ||
9.1.1 Der erste Entwurf | 224 | ||
9.1.2 Bewertung des Lösungsansatzes | 226 | ||
9.2 Mit Vererbung arbeiten | 226 | ||
9.2.1 Eine Superklasse entwerfen | 226 | ||
9.2.2 Vererbung testen | 228 | ||
9.2.3 Beziehungen zwischen Klassen | 230 | ||
9.3 Erweiterung der Aufgabe | 232 | ||
9.3.1 Eine neue Superklasse erstellen | 232 | ||
9.3.2 Die neue Superklasse testen | 234 | ||
9.4 Typen zuweisen | 235 | ||
9.4.1 Statischer und dynamischer Typ von Referenzvariablen | 236 | ||
9.4.2 Der Cast-Operator | 238 | ||
9.4.3 Prüfung der Typen | 239 | ||
9.5 Sichtbarkeit | 239 | ||
9.6 Konstruktoren | 241 | ||
9.7 Methoden überschreiben | 244 | ||
9.7.1 Wie Methoden überschrieben werden | 244 | ||
9.7.2 Wirkung des Überschreibens | 245 | ||
9.7.3 Unterschiedliche Typen | 246 | ||
9.7.4 Beispiele für Überschreiben und Überladen | 247 | ||
9.7.5 Zugriff auf Methoden der Superklasse | 249 | ||
9.8 Die letzte Erweiterung der Aufgabe | 250 | ||
9.9 Alle Klassen erben von der Klasse »Object« | 255 | ||
9.9.1 Die Methode »getClass()« | 255 | ||
9.9.2 Die Methode »toString()« | 256 | ||
9.9.3 Die Methode »equals()« | 258 | ||
9.9.4 Die Methode »hashCode()« | 263 | ||
9.10 Das Wichtigste auf einen Blick | 265 | ||
9.11 Übungen | 266 | ||
10 Erweiterte Konzepte der OOP | 268 | ||
10.1 Abstrakte Klassen | 268 | ||
10.1.1 Abstrakte Klassen erzeugen | 269 | ||
10.1.2 Abstrakte Methoden in abstrakten Klassen | 270 | ||
10.1.3 Ein Beispiel für abstrakte Klassen: Zeit- und Datumsfunktionen | 273 | ||
10.2 Schnittstellen | 276 | ||
10.2.1 Definition des Begriffes | 276 | ||
10.2.2 Ein Beispiel für die Arbeit mit Interfaces | 278 | ||
10.3 Wann nehmen Sie was? | 287 | ||
10.4 Entwurfsmuster | 287 | ||
10.4.1 Beispiel 1: das Observer-Pattern | 288 | ||
10.4.2 Beispiel 2: das Singleton-Pattern | 291 | ||
10.4.3 Patterns generieren lassen - der PatternCoder | 292 | ||
10.4.4 Sinn von Entwurfsmustern | 295 | ||
10.5 Innere Klassen | 296 | ||
10.5.1 Der erste Lösungsansatz: mit herkömmlichen Möglichkeiten | 296 | ||
10.5.2 Der zweite Lösungsansatz: statische innere Klasse | 299 | ||
10.5.3 Der dritte Lösungsansatz: nicht-statische Memberklasse | 302 | ||
10.5.4 Der vierte Lösungsansatz: lokale Klasse | 305 | ||
10.6 Exkurs: Fehler finden mit dem Debugger | 311 | ||
10.7 Das Wichtigste auf einen Blick | 315 | ||
10.7.1 Abstrakte Klassen und Schnittstellen | 315 | ||
10.7.2 Innere Klassen | 316 | ||
10.7.3 Entwurfsmuster | 316 | ||
10.7.4 Debugging | 317 | ||
10.8 Übungen | 317 | ||
Grafische Benutzeroberflächen | 318 | ||
11 Einführung in die GUI-Programmierung | 320 | ||
11.1 Von AWT zu Swing | 321 | ||
11.2 Die Vererbungshierarchie von AWT und Swing | 322 | ||
11.3 Das erste Fenster | 323 | ||
11.3.1 Ein Fenster erzeugen | 323 | ||
11.3.2 Ein Menü aufbauen | 324 | ||
11.3.3 Tastenkürzel für das Menü anlegen | 326 | ||
11.3.4 Ein Menü mit Auswahl von Optionen | 328 | ||
11.4 Event-Handling | 330 | ||
11.4.1 Hierarchie der Event-Klassen und Event-Typen | 330 | ||
11.4.2 Event-Empfänger | 334 | ||
11.4.3 Event-Quellen | 334 | ||
11.4.4 Zwei Beispiele für das Zusammenspiel | 335 | ||
11.4.5 Adapterklassen | 339 | ||
11.4.6 So sieht es praktisch aus | 340 | ||
11.5 Das Wichtigste auf einen Blick | 345 | ||
11.6 Übungen | 346 | ||
12 Steuerelemente und Layout | 348 | ||
12.1 Namenskonventionen und ungarische Notation | 348 | ||
12.2 Top-Level-Container | 349 | ||
12.2.1 Die Klasse »JFrame« | 349 | ||
12.2.2 Die Klasse »JDialog« | 351 | ||
12.2.3 Die Klasse »JWindow« | 353 | ||
12.2.4 Fazit zu Top-Level-Containern | 353 | ||
12.3 Weitere Container-Klassen | 354 | ||
12.3.1 Die Klassen »JComponent« und »JPanel« | 355 | ||
12.3.2 Die Klasse »JTabbedPane« | 357 | ||
12.3.3 Die Klasse »JSplitPane« | 358 | ||
12.3.4 Die Klasse »JScrollPane« | 360 | ||
12.4 Interaktionskomponenten (Teil 1) | 361 | ||
12.4.1 Die Klasse »JLabel« | 362 | ||
12.4.2 Die Klasse »AbstractButton« und ein paar ihrer Subklassen | 364 | ||
12.4.3 Die Klasse »JList« | 369 | ||
12.5 Das MVC-Pattern | 373 | ||
12.5.1 Allgemeine Beschreibung | 373 | ||
12.5.2 Wie sieht dieses Prinzip in Swing aus? | 383 | ||
12.5.3 Besonderheit der Swing-Modelle | 390 | ||
12.6 Interaktionskomponenten (Teil 2) | 391 | ||
12.6.1 Die Klasse »JTextField« | 391 | ||
12.6.2 Die Klasse »JComboBox« | 393 | ||
12.6.3 Die Klasse »JPasswordField« | 395 | ||
12.6.4 Die Klasse »JTextArea« | 396 | ||
12.6.5 Die Klasse »JEditorPane« | 397 | ||
12.6.6 Die Klasse »JSlider« | 398 | ||
12.6.7 Die Klasse »JSpinner« | 400 | ||
12.6.8 Die Klasse »JOptionPane« | 402 | ||
12.7 Das Wichtigste auf einen Blick | 405 | ||
12.8 Übungen | 406 | ||
13 Erweiterte Konzepte von Swing | 408 | ||
13.1 Layoutmanager | 409 | ||
13.1.1 Layoutmanager in der Praxis | 409 | ||
13.1.2 Das FlowLayout | 410 | ||
13.1.3 Das BorderLayout | 411 | ||
13.1.4 Das GridLayout | 413 | ||
13.1.5 Das GridBagLayout | 415 | ||
13.2 Look and Feel (LaF) | 420 | ||
13.3 Die Klasse »JTable« | 423 | ||
13.3.1 Umsetzung mit Arrays | 423 | ||
13.3.2 Datenbasis mit »TableModel« verwalten | 424 | ||
13.3.3 Realisierung mit »AbstractTableModel« | 429 | ||
13.3.4 Realisierung mit »DefaultTableModel« | 431 | ||
13.3.5 Darstellung der Daten (Rendering) | 431 | ||
13.3.6 Tabellen sortieren | 435 | ||
13.3.7 Zellen editieren | 438 | ||
13.3.8 Mehr über die Arbeit mit »JTable« | 442 | ||
13.4 Die Klasse »JTree« | 443 | ||
13.4.1 Ein erster Versuch | 443 | ||
13.4.2 Auf Ereignisse lauschen | 445 | ||
13.4.3 Selektionen und die Klasse »TreePath« | 447 | ||
13.4.4 Ein eigenes Modell entwickeln | 449 | ||
13.4.5 Die Anzeige ändern - das Rendering | 454 | ||
13.5 Das Interface »Action« | 456 | ||
13.6 Das Wichtigste auf einen Blick | 458 | ||
Fortgeschrittene Themen | 460 | ||
14 Ausnahmebehandlung - Exceptions | 462 | ||
14.1 Was bedeutet Fehlerbehandlung? | 462 | ||
14.1.1 Wie Fehler abgefangen werden können | 463 | ||
14.1.2 Nachteile des ersten Ansatzes | 463 | ||
14.2 Einführung von Exception-Handling | 464 | ||
14.2.1 Die Exception-Klassen | 465 | ||
14.2.2 Der try- und der catch-Block | 465 | ||
14.2.3 Der finally-Block | 467 | ||
14.3 Fangen oder Weiterreichen (Catch-or-Specify) | 468 | ||
14.4 Differenziert auf Ausnahmesituationen reagieren | 469 | ||
14.4.1 Eigene Exception-Typen definieren | 469 | ||
14.4.2 Exceptions differenziert fangen | 473 | ||
14.5 Runtime-Exceptions | 476 | ||
14.6 Error | 478 | ||
14.7 Die Methode »printStackTrace()« | 478 | ||
14.8 Assertions | 480 | ||
14.9 Neu in Java 7 | 481 | ||
14.10 Zusammenfassendes Beispiel | 482 | ||
14.10.1 Die bisherige Implementierung | 482 | ||
14.10.2 Die neue Implementierung | 483 | ||
14.10.3 Die neue Implementierung testen | 484 | ||
14.11 Das Wichtigste auf einen Blick | 487 | ||
15 Collections und Generics | 488 | ||
15.1 Ein eigenes Array entwickeln | 488 | ||
15.1.1 Die Datenbasis der Klasse »MyArray« | 489 | ||
15.1.2 Methoden der Klasse »MyArray« | 490 | ||
15.1.3 Weitere Methoden der Klasse »MyArray« | 490 | ||
15.2 Primitive Datentypen als Objekte - Wrapper-Klassen | 492 | ||
15.2.1 Autoboxing und Unboxing | 492 | ||
15.2.2 Hinweis zum Umgang mit Wrapper-Klassen | 493 | ||
15.3 Einführung in Generics - Typsicherheit | 494 | ||
15.4 Die Interfaces »List« und »Set« | 497 | ||
15.4.1 Das Interface »List« | 498 | ||
15.4.2 Das Interface »Set« | 504 | ||
15.4.3 Sammlungen mit »Comparable« und »Comparator« sortieren | 509 | ||
15.4.4 Verwendung der Klasse »TreeSet« | 514 | ||
15.5 Das Interface »Map« | 517 | ||
15.5.1 Eine Map erzeugen | 517 | ||
15.5.2 Einer Map Werte übergeben | 518 | ||
15.5.3 Interne Abbildung der Daten und Iteration | 519 | ||
15.6 Das Wichtigste auf einen Blick | 521 | ||
15.7 Übungen | 522 | ||
16 Nebenläufigkeit | 524 | ||
16.1 Ein erstes Beispiel | 524 | ||
16.1.1 Die Quellen des Beispieles | 525 | ||
16.1.2 Auswertung des Beispieles | 526 | ||
16.2 Zustandsänderungen eines Threads | 528 | ||
16.2.1 Zustände, die ein Thread einnehmen kann | 528 | ||
16.2.2 Änderungen des Zustandes | 528 | ||
16.2.3 Einen Thread beenden | 529 | ||
16.2.4 Die Methoden »sleep()« und »interrupt()« | 531 | ||
16.2.5 Prioritäten von Threads festlegen | 532 | ||
16.2.6 Eine Zeitschaltuhr - die Klasse »Timer« | 533 | ||
16.3 Synchronisieren von Threads | 534 | ||
16.3.1 Wo liegt die Fehlerquelle? | 534 | ||
16.3.2 Wie kann dieses Problem umgangen werden? | 538 | ||
16.4 Kommunikation zwischen Threads | 541 | ||
16.5 Das Wichtigste auf einen Blick | 543 | ||
16.6 Übungen | 544 | ||
17 Dateien, Datenströme, Serialisieren | 546 | ||
17.1 Dateibehandlung ab Java 7 | 546 | ||
17.1.1 Einstiegspunkte sind »FileSystem« und »Path« | 546 | ||
17.1.2 Eine Datei oder ein Verzeichnis bearbeiten | 549 | ||
17.2 Exkurs: Dateibehandlung bis Java 7 | 551 | ||
17.3 Was sind Ströme und was kann man damit machen? | 553 | ||
17.3.1 Mit Byte-Streams arbeiten | 554 | ||
17.3.2 Character-Streams und Brückenklassen | 557 | ||
17.3.3 BufferedReader und BufferedWriter einsetzen | 560 | ||
17.4 Kurze Zusammenfassung und Ausblick | 563 | ||
17.5 Objekte serialisieren und deserialisieren | 565 | ||
17.5.1 Die Klasse »Adressbuch« schreiben | 565 | ||
17.5.2 Die Klasse »Freund« schreiben | 566 | ||
17.5.3 Die Klasse »Verwaltung« schreiben | 566 | ||
17.5.4 Das Projekt testen | 569 | ||
17.5.5 Variablen von der Serialisierung ausnehmen | 570 | ||
17.6 Mit dem FileWhisperer das Dateisystem erkunden | 570 | ||
17.6.1 Die Oberfläche gestalten | 571 | ||
17.6.2 Verzeichnisse anzeigen | 572 | ||
17.6.3 Die Datei-Attribute anzeigen | 575 | ||
17.7 Das Wichtigste auf einen Blick | 581 | ||
18 Netzwerke | 584 | ||
18.1 Rechner verbinden | 584 | ||
18.2 Verbindung über Sockets | 585 | ||
18.2.1 IP-Adressen und Domain-Namen | 586 | ||
18.2.2 Ports | 587 | ||
18.3 Der Multifunktionsserver | 588 | ||
18.3.1 Schritt 1 - Grundversion | 588 | ||
18.3.2 Schritt 2 - mehrere Aufgaben an den Server richten | 594 | ||
18.3.3 Schritt 3 - Vorbereitung von Multithreading | 595 | ||
18.3.4 Schritt 4 - Einführung von Multithreading | 598 | ||
18.3.5 Schritt 5 - eigene Objekte statt Strings | 599 | ||
18.3.6 Schritt 6 - Einführung von Services | 604 | ||
18.3.7 Schritt 7 - Funktionen in HashMap speichern | 605 | ||
18.4 Anregung für eigene Projekte | 608 | ||
18.5 Das Wichtigste auf einen Blick | 609 | ||
19 Datenbanken | 610 | ||
19.1 Grundlagen | 610 | ||
19.1.1 Aufbau einer Datenbank | 611 | ||
19.1.2 Wichtige Begriffe | 613 | ||
19.2 Installation einer Datenbank | 613 | ||
19.2.1 Die Serversoftware installieren | 613 | ||
19.2.2 Einen Treiber installieren | 615 | ||
19.3 Eine Datenbank anlegen | 615 | ||
19.3.1 Die Verbindung herstellen | 616 | ||
19.3.2 Befehl an die Datenbank absetzen | 617 | ||
19.3.3 Überblick über den Quelltext | 619 | ||
19.4 Tabellen anlegen | 621 | ||
19.4.1 Treiber laden und Verbindung herstellen | 621 | ||
19.4.2 Tabellen anlegen und Verbindungen schließen | 622 | ||
19.5 Spalten anlegen | 624 | ||
19.5.1 Datentypen von Attributen | 625 | ||
19.5.2 Die Primärschlüssel der Tabellen anlegen | 625 | ||
19.6 Daten in die Tabellen eintragen | 627 | ||
19.7 Daten abfragen, ändern und löschen | 629 | ||
19.7.1 Daten abfragen | 629 | ||
19.7.2 Tabellen verbinden | 632 | ||
19.7.3 Die where-Klausel | 633 | ||
19.7.4 Daten löschen und Subabfragen definieren | 634 | ||
19.7.5 Daten ändern | 635 | ||
19.8 Prepared Statement | 636 | ||
19.9 Exkurs SQL-Injection | 637 | ||
19.10 Weitergehende Konzepte | 641 | ||
19.11 Das Wichtigste auf einen Blick | 642 | ||
A Lösungen | 644 | ||
A.1 Kapitel 1 | 644 | ||
A.2 Kapitel 2 | 645 | ||
A.3 Kapitel 3 | 645 | ||
A.4 Kapitel 4 | 645 | ||
A.5 Kapitel 5 | 646 | ||
A.6 Kapitel 6 | 647 | ||
A.7 Kapitel 8 | 647 | ||
A.8 Kapitel 9 | 648 | ||
A.9 Kapitel 15 | 648 | ||
Index | 650 |