Java als erste Programmiersprache

Werbung
Cornelia Heinisch, Frank Müller-Hofmann,
Joachim Goll
Java als erste
Programmiersprache
Cornelia Heinisch, Frank Müller-Hofmann,
Joachim Goll
Java als erste
Programmiersprache
Vom Einsteiger zum Profi
5., überarbeitete und erweiterte Auflage
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der
Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über
<http://dnb.d-nb.de> abrufbar.
Dr. Cornelia Heinisch, geb. Weiß, Jahrgang 1976, studierte Softwaretechnik an der
Hochschule Esslingen. Seit ihrem Diplom im Jahre 1999 ist sie Lehrbeauftragte für
Objektorientierte Modellierung an der Hochschule Esslingen. Cornelia Heinisch
arbeitet bei der Firma IT-Designers GmbH als System-Designerin für Verteilte Objektorientierte Systeme.
Frank Müller-Hofmann, MSc, Jahrgang 1969, studierte Softwaretechnik an der
Hochschule Esslingen nach Lehre und Beruf. Herr Müller-Hofmann arbeitet als
System-Designer für Verteilte Objektorientierte Systeme bei IT-Designers. Er ist Lehrbeauftragter für Internettechnologien an der Hochschule Esslingen und für Kommunikation in Verteilten Systemen an der Brunel University of West-London.
Prof. Dr. Joachim Goll, Jahrgang 1947, unterrichtet seit 1991 im Fachbereich
Informationstechnik der Hochschule Esslingen Programmiersprachen, Betriebssysteme,
Software Engineering, Objektorientierte Modellierung und Sichere Systeme.
Während seiner beruflichen Tätigkeit in der Industrie befasste er sich vor allem mit
dem Entwurf von Verteilten Informationssystemen. Prof. Goll ist Leiter des SteinbeisTransferzentrums Softwaretechnik Esslingen.
1. Auflage 2000
5., überarbeitete und erweiterte Auflage März 2007
Alle Rechte vorbehalten
© B. G. Teubner Verlag / GWV Fachverlage GmbH, Wiesbaden 2007
Lektorat: Ulrich Sandten / Kerstin Hoffmann
Der B. G. Teubner Verlag ist ein Unternehmen von Springer Science+Business Media.
www.teubner.de
Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung
des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen,
Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in
elektronischen Systemen.
Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk
berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne
der Waren- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann
benutzt werden dürften.
Umschlaggestaltung: Ulrike Weigel, www.CorporateDesignGroup.de
Druck und buchbinderische Verarbeitung: Strauss Offsetdruck, Mörlenbach
Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier.
Printed in Germany
ISBN 978-3-8351-0147-0
Vorwort
Die Sprache Java ist durch ihre Betriebssystem-Unabhängigkeit ideal für die Realisierung verteilter Systeme, die aus verschiedenartigsten Rechnern vom Handy bis
zum Großrechner aufgebaut sein können. Java wird heute bereits im InformatikUnterricht an den Gymnasien unterrichtet und ist fester Bestandteil des Studiums von
Ingenieuren und Betriebswirten geworden.
Java stellt im Grunde genommen eine einfache Sprache dar. Darüber hinaus werden
jedoch in umfangreichen Klassenbibliotheken wertvolle und weitreichende Hilfsmittel
zur Verfügung gestellt, die den Bau verteilter Systeme mit Parallelität, Oberflächen,
Kommunikationsprotokollen und Datenbanken in erheblichem Maße unterstützen.
Dieses Buch wendet sich an Studierende, Umsteiger und Schüler, welche das
Interesse haben, die Grundlagen von Java fundiert zu erlernen. Es erlaubt, Java
ohne Vorkenntnisse anderer Programmiersprachen zu erlernen. Daher der Titel
„Java als erste Programmiersprache“. Dazu ist aber erforderlich, dass die
Übungsaufgaben am Ende eines Kapitels bearbeitet werden. Wer das Buch nur
lesen möchte, sollte bereits über die Kenntnisse einer anderen Programmiersprache
verfügen.
Dieses Buch hat das ehrgeizige Ziel, dem Neuling die Sprachkonzepte von Java, die
Grundkonzepte der objektorientierten Programmierung und wichtige Teile der
Klassenbibliothek so präzise wie möglich und dennoch in leicht verständlicher Weise
vorzustellen. Aber unterschätzen Sie dennoch den Lernaufwand nicht. Der Buchumfang ist nicht in einer einzigen Vorlesung zu schaffen. Vorlesungen über das
Programmieren verteilter Systeme mit Java oder über Grafische Oberflächen mit
Java machen erst dann Sinn, wenn die Grundlagen des Programmierens erlernt sind.
Die Kapitel 1 bis einschließlich 21 enthalten Übungsaufgaben, die zum selbstständigen Programmieren herausfordern. Dasselbe Ziel hat das Flughafen-Projekt, welches begleitend zu den einzelnen Kapiteln durchgeführt werden kann und zu einem
System führt, das die Fluglotsen bei Start und Landung von Flugzeugen unterstützt.
Unser besonderer Dank bei dieser Auflage gilt Herrn Mathias Altmeyer, der in
monatelanger Arbeit viele Kapitel wesentlich überarbeitet hat. Herrn Daniel Frank
danken wir für die Überarbeitung der Kapitels Servlets und JavaServer Pages, Herrn
Daniel Förster für die Erstellung der Anhänge Annotations und JNDI und Herrn
Marco Hentschel für Rat und Tat beim Kapitel Swing. Herr Carsten Timm und Herr
Norman Walter waren uns bei der Erstellung von Bildern und der CD eine große
Hilfe.
Esslingen, im Februar 2007
C. Heinisch / F. Müller-Hofmann / J. Goll
Wegweiser durch das Buch
„Lernkästchen“, auf die grafisch durch eine kleine Glühlampe aufmerksam gemacht
wird, stellen eine Zusammenfassung eines Kapitels dar. Sie erlauben eine rasche
Wiederholung des Stoffes.
Gerade als Anfänger in einer Programmiersprache macht man gerne den Fehler,
sich beim Lesen an nicht ganz so wesentlichen Einzelheiten festzubeißen. Um zu
erkennen, welche Information grundlegend für das weitere Vorankommen ist und
welche Information nur ein Detailwissen darstellt – und deshalb auch noch zu einem
späteren Zeitpunkt vertieft werden kann – weist dieses Buch Kapitel oder Kapitelteile,
die beim ersten Lesen übersprungen werden können, mit dem Symbol aus.
Generell ist es empfehlenswert, ein oder mehrere Kapitel zu überfliegen, um sich
einen Überblick zu verschaffen, und dann erst mit der Feinarbeit zu beginnen und
gründlicher zu lesen. Dennoch gilt: Eine Vorgehensweise, die sich für den einen
Leser als optimal erweist, muss noch lange nicht für alle Leser das Allheilmittel
darstellen. Wenn Sie zu den Lesern gehören, die es gewohnt sind, von Anfang an
möglichst detailliert zu lesen, um möglichst viel sofort zu verstehen, so sollten Sie
zumindest darauf achten, dass Sie in den Kapiteln mit dem „Überspringe und komm
zurück“-Zeichen beim ersten Durchgang nicht zu lange verweilen.
Bei all den guten Ratschlägen gilt: Programmieren hat man zu allen Zeiten durch
Programmierversuche erlernt. „Do it yourself“ heißt der rote Faden zum Erfolg. So
wie ein Kleinkind beim Erlernen der Muttersprache einfach zu sprechen versucht, so
sollten auch Sie möglichst früh versuchen, in der Programmiersprache zu sprechen –
das heißt, eigene Programme zu schreiben. Gestalten Sie den Lernvorgang abwechslungsreich – lesen Sie einen Teil und versuchen Sie, das Erlernte im
Programmieren gleich umzusetzen. Um die mühsame Tipparbeit am Anfang minimal
zu halten, sind alle Beispielprogramme des Buches auf der CD zu finden. Die CD
enthält auch die Bilder der einzelnen Kapitel, die Übungsaufgaben und Lösungen
sowie das Flughafenprojekt.
Die nachfolgende Tabelle soll es dem Leser erleichtern, einzuordnen, welche Kapitel
zu den Grundlagen (Symbol ) zählen und auf jeden Fall verstanden werden sollten,
welche Kapitel zuerst übersprungen werden können und dann bei Bedarf gelesen
), und welche Kapitel rein fortgeschrittene Themen
werden sollten (Symbol
(Symbol ) behandeln, die unabhängig voneinander gelesen werden können.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Grundbegriffe der Programmierung
Objektorientierte Konzepte
Einführung in die Programmiersprache Java
Einfache Beispielprogramme
Lexikalische Konventionen
Datentypen und Variablen
Ausdrücke und Operatoren
Kontrollstrukturen
Blöcke und Methoden
Klassen und Objekte
Vererbung und Polymorphie
Pakete
Ausnahmebehandlung
Schnittstellen
Geschachtelte Klassen
Ein-/Ausgabe und Streams
Generizität
Collections
Threads
Applets
Oberflächenprogrammierung mit Swing
Servlets
JavaServer Pages
Sockets
Remote Method Invocation
JDBC
Enterprise JavaBeans 3.0
Die folgende Tabelle zeigt die auf der CD enthaltenen Kapitel:
28
29
30
31
32
33
Java Native Interface
Sicherheit
Beans
Reflection
Java-Tools
Java Management Extensions
Schreibweise
In diesem Buch sind der Quellcode und die Ein-/Ausgabe von ganzen Beispielprogrammen sowie einzelne Anweisungen und Ein-/Ausgaben in der Schriftart
Courier New geschrieben. Dasselbe gilt für Programmteile wie Variablennamen,
Methodennamen etc., die im normalen Text erwähnt werden. Wichtige Begriffe im
normalen Text sind fett gedruckt, um sie hervorzuheben.
Ihre Verbesserungsvorschläge und kritischen Hinweise, die wir gerne annehmen,
erreichen uns via E-Mail:
[email protected]
Ihr Partner für
IT-Entwicklungen
Auf der Basis langjähriger Projekterfahrungen
in der Konzeption und Realisierung von
IT-Systemen sind wir besonders auf folgende
Leistungen spezialisiert:
쮿
Konzeption, Entwurf, Implementierung
sowie Integration und Test von
- Informationssystemen
- eingebetteten Systemen
- mobilen Systemen
und deren Kombination
쮿
Betrieb von Web-Applikationen
zur Unterstützung verteilter
Entwicklungsprozesse
쮿
Einsatz geeigneter Vorgehensmodelle,
Methoden und Tools
쮿
Durchführung von Schulungen in
- Software Engineering
- Programmiersprachen
Der ständige Wissenstransfer unserer hoch
qualifizierten Systemarchitekten zu Industriekunden und Hochschulen ermöglicht die
Verwendung aktueller Entwicklungstechniken.
Wir entwickeln für Sie ausbaufähige
maßgeschneiderte IT-Lösungen.
Ihre Aufgabe – unsere Herausforderung.
IT-Designers GmbH
Entennest 2 · 73730 Esslingen
Tel. 0711 / 30 51 11- 50 · Fax 0711 / 30 51 11-12
E-Mail: [email protected] · www.it-designers.de
Inhaltsverzeichnis
1 GRUNDBEGRIFFE DER PROGRAMMIERUNG ................................ 2
1.1
1.2
1.3
1.4
1.5
1.6
1.7
Das erste Programm................................................................................. 2
Vom Problem zum Programm .................................................................. 4
Nassi-Shneiderman-Diagramme ............................................................ 10
Zeichen ................................................................................................... 16
Variablen................................................................................................. 18
Datentypen ............................................................................................. 19
Übungen ................................................................................................. 25
2 OBJEKTORIENTIERTE KONZEPTE................................................ 28
2.1
2.2
2.3
2.4
2.5
2.6
Modellierung mit Klassen und Objekten ................................................. 28
Information Hiding und Kapselung ......................................................... 36
Abstraktion und Brechung der Komplexität ............................................ 37
Erstes Programmbeispiel mit Objekten .................................................. 41
Flughafen-Projekt ................................................................................... 44
Übungen ................................................................................................. 56
3 EINFÜHRUNG IN DIE PROGRAMMIERSPRACHE JAVA ............... 58
3.1
3.2
3.3
3.4
3.5
3.6
3.7
Sprachkonzepte von Java ...................................................................... 58
Eigenschaften von Java ......................................................................... 59
Die Java-Plattform .................................................................................. 60
Programmerzeugung und -ausführung ................................................... 63
Das Java Development Kit ..................................................................... 68
Java-Anwendungen und Internet-Programmierung................................ 71
Übungen ................................................................................................. 72
4 EINFACHE BEISPIELPROGRAMME ............................................... 76
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
Lokale Variablen, Ausdrücke und Schleifen ........................................... 76
Zeichen von der Tastatur einlesen ......................................................... 81
Erzeugen von Objekten .......................................................................... 84
Initialisierung von Objekten mit Konstruktoren ....................................... 85
Schreiben von Instanzmethoden ............................................................ 88
Zusammengesetzte Objekte ................................................................... 92
Selbst definierte Untertypen durch Vererbung ....................................... 96
Die Methode printf() und die Klasse Scanner ......................................... 99
Übungen ............................................................................................... 102
X
Inhaltsverzeichnis
5 LEXIKALISCHE KONVENTIONEN ................................................ 106
5.1
5.2
5.3
5.4
Zeichenvorrat von Java ........................................................................ 106
Der Unicode .......................................................................................... 108
Lexikalische Einheiten .......................................................................... 108
Übungen ............................................................................................... 125
6 DATENTYPEN UND VARIABLEN .................................................. 128
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
6.10
6.11
Abstrakte Datentypen und Klassen .................................................. 128
Die Datentypen von Java ..................................................................... 130
Variablen............................................................................................... 137
Modifikatoren ........................................................................................ 154
Arrays ................................................................................................... 154
Aufzählungstypen ................................................................................. 165
Konstante und variable Zeichenketten ................................................. 173
Wrapper-Klassen .................................................................................. 185
Boxing und Unboxing............................................................................ 189
Verkettung von Strings und Variablen anderer Datentypen ................. 193
Übungen ............................................................................................... 194
7 AUSDRÜCKE UND OPERATOREN ............................................... 204
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
Operatoren und Operanden ................................................................. 204
Ausdrücke und Anweisungen ............................................................... 205
Nebeneffekte ........................................................................................ 207
Auswertungsreihenfolge ....................................................................... 207
L-Werte und R-Werte............................................................................ 209
Zusammenstellung der Operatoren ...................................................... 211
Konvertierung von Datentypen ............................................................. 230
Ausführungszeitpunkt von Nebeneffekten ............................................ 239
Übungen ............................................................................................... 240
8 KONTROLLSTRUKTUREN ............................................................ 244
8.1
8.2
8.3
8.4
8.5
Blöcke – Kontrollstrukturen für die Sequenz ........................................ 244
Selektion ............................................................................................... 244
Iteration ................................................................................................. 251
Sprunganweisungen ............................................................................. 258
Übungen ............................................................................................... 261
9 BLÖCKE UND METHODEN ........................................................... 266
9.1 Blöcke und ihre Besonderheiten ........................................................... 266
9.2 Methodendefinition und -aufruf ............................................................. 271
Inhaltsverzeichnis
9.3
9.4
9.5
9.6
9.7
9.8
XI
Polymorphie von Operationen .............................................................. 282
Überladen von Methoden ..................................................................... 284
Parameterliste variabler Länge ............................................................. 286
Parameterübergabe beim Programmaufruf .......................................... 288
Iteration und Rekursion ........................................................................ 290
Übungen ............................................................................................... 296
10 KLASSEN UND OBJEKTE .......................................................... 302
10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
Information Hiding................................................................................. 302
Klassenvariablen und Klassenmethoden ............................................. 304
Die this-Referenz .................................................................................. 310
Initialisierung von Datenfeldern ............................................................ 317
Instantiierung von Klassen ................................................................... 334
Freigabe von Speicher.......................................................................... 336
Die Klasse Object ................................................................................. 341
Übungen ............................................................................................... 342
11 VERERBUNG UND POLYMORPHIE........................................... 354
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
Das Konzept der Vererbung ................................................................. 354
Erweitern und Überschreiben ............................................................... 359
Besonderheiten bei der Vererbung ....................................................... 364
Polymorphie und das Liskov Substitution Principle .............................. 384
Verträge ................................................................................................ 399
Identifikation der Klasse eines Objektes ............................................... 415
Konsistenzhaltung von Quell- und Bytecode ........................................ 420
Übungen ............................................................................................... 423
12 PAKETE ....................................................................................... 432
12.1
12.2
12.3
12.4
12.5
12.6
12.7
12.8
"Programmierung im Großen" .............................................................. 432
Pakete als Entwurfseinheiten ............................................................... 434
Erstellung von Paketen ......................................................................... 435
Benutzung von Paketen ....................................................................... 436
Paketnamen.......................................................................................... 440
Gültigkeitsbereich von Klassennamen ................................................. 444
Zugriffsmodifikatoren ............................................................................ 447
Übungen ............................................................................................... 454
13 AUSNAHMEBEHANDLUNG ....................................................... 464
13.1 Das Konzept des Exception Handlings ................................................ 464
13.2 Implementierung von Exception-Handlern in Java ............................... 466
XII
13.3
13.4
13.5
13.6
13.7
13.8
Inhaltsverzeichnis
Ausnahmen vereinbaren und auswerfen .............................................. 470
Die Exception-Hierarchie ...................................................................... 472
Ausnahmen behandeln ......................................................................... 475
Vorteile des Exception-Konzeptes ........................................................ 482
Assertions ............................................................................................. 483
Übungen ............................................................................................... 488
14 SCHNITTSTELLEN...................................................................... 496
14.1
14.2
14.3
14.4
14.5
14.6
14.7
Trennung von Spezifikation und Implementierung ............................... 496
Ein weiterführendes Beispiel ................................................................ 498
Aufbau einer Schnittstelle ..................................................................... 502
Verwenden von Schnittstellen .............................................................. 505
Vergleich Schnittstelle und abstrakte Basisklasse ............................... 519
Das Interface Cloneable ....................................................................... 522
Übungen ............................................................................................... 529
15 GESCHACHTELTE KLASSEN .................................................... 538
15.1
15.2
15.3
15.4
15.5
15.6
Elementklassen .................................................................................... 540
Lokale Klassen ..................................................................................... 545
Anonyme Klassen ................................................................................. 549
Statische geschachtelte Klassen und Schnittstellen ............................ 554
Realisierung von geschachtelten Klassen ............................................ 557
Übungen ............................................................................................... 562
16 EIN-/AUSGABE UND STREAMS ................................................ 568
16.1
16.2
16.3
16.4
16.5
16.6
16.7
16.8
Für ganz Eilige ein erstes Beispiel ....................................................... 568
Klassifizierung von Streams ................................................................. 572
Das Stream-Konzept ............................................................................ 575
Bytestream-Klassen.............................................................................. 579
Characterstream-Klassen ..................................................................... 591
Standardeingabe und Standardausgabe .............................................. 598
Ein- und Ausgabe von Objekten ........................................................... 601
Übungen ............................................................................................... 609
17 GENERIZITÄT ............................................................................. 614
17.1
17.2
17.3
17.4
17.5
Generische Klassen.............................................................................. 615
Eigenständig generische Methoden ..................................................... 631
Wildcards .............................................................................................. 635
Generische Schnittstellen ..................................................................... 641
Die Klasse Class<T> ............................................................................ 653
Inhaltsverzeichnis
XIII
17.6 Generizität und Polymorphie ............................................................ 657
17.7 Übungen ............................................................................................... 659
18 COLLECTIONS............................................................................ 668
18.1
18.2
18.3
18.4
18.5
18.6
18.7
18.8
Überblick über die Collection-API ......................................................... 669
Iterieren über Collections ...................................................................... 675
Listen .................................................................................................... 677
Warteschlangen .................................................................................... 695
Mengen ................................................................................................. 705
Verzeichnisse ....................................................................................... 713
Besonderheiten bei der Anwendung von Collections ........................... 718
Übungen ............................................................................................... 720
19 THREADS .................................................................................... 724
19.1
19.2
19.3
19.4
19.5
19.6
19.7
Zustände und Zustandsübergänge von Betriebssystem-Prozessen .... 729
Zustände und Zustandsübergänge von Threads.................................. 730
Programmierung von Threads .............................................................. 733
Scheduling von Threads ....................................................................... 741
Zugriff auf gemeinsame Ressourcen .................................................... 742
Daemon-Threads .................................................................................. 765
Übungen ............................................................................................... 766
20 APPLETS ..................................................................................... 772
20.1
20.2
20.3
20.4
20.5
20.6
20.7
Die Seitenbeschreibungssprache HTML .............................................. 773
Das "Hello, world"-Applet...................................................................... 784
Der Lebenszyklus eines Applets .......................................................... 788
Parameterübernahme aus einer HTML-Seite....................................... 793
Importieren von Bildern......................................................................... 794
Importieren und Abspielen von Audio-Clips ......................................... 796
Übungen ............................................................................................... 797
21 OBERFLÄCHENPROGRAMMIERUNG MIT SWING................... 802
21.1
21.2
21.3
21.4
21.5
21.6
21.7
21.8
Architekturmuster Model-View-Controller ............................................. 802
Die Swing-Architektur ........................................................................... 808
Ereignisbehandlung für Swing .............................................................. 811
Integration von Swing in das Betriebssystem ....................................... 827
Swing-Komponenten ............................................................................ 834
Layout-Management ............................................................................. 875
Weitere Technologien der Ein- und Ausgabe ....................................... 892
Übungen ............................................................................................... 894
XIV
Inhaltsverzeichnis
22 SERVLETS .................................................................................. 900
22.1
22.2
22.3
22.4
22.5
22.6
Das Internet und seine Dienste ............................................................ 900
Dynamische Erzeugung von Seiteninhalten ......................................... 908
Web-Anwendungen erstellen ............................................................... 912
Wichtige Elemente der Servlet-API ...................................................... 917
Der Deployment Deskriptor .................................................................. 922
Das Servlet "Forum" ............................................................................. 924
23 JAVASERVER PAGES................................................................ 934
23.1
23.2
23.3
23.4
23.5
Skriptelemente ...................................................................................... 937
Direktiven .............................................................................................. 942
Aktionen ................................................................................................ 946
Verwendung von JavaBeans ................................................................ 949
Tag-Bibliotheken ................................................................................... 954
24 NETZWERKPROGRAMMIERUNG MIT SOCKETS..................... 964
24.1
24.2
24.3
24.4
Verteilte Systeme.................................................................................. 964
Rechnername, URL und IP-Adresse .................................................... 967
Sockets ................................................................................................. 975
Protokolle .............................................................................................. 996
25 REMOTE METHOD INVOCATION ............................................ 1002
25.1
25.2
25.3
25.4
25.5
25.6
Die Funktionsweise von RMI .............................................................. 1002
Entwicklung einer RMI-Anwendung .................................................... 1004
Ein einfaches Beispiel......................................................................... 1009
Object by Value und Object by Reference ......................................... 1015
Verwendung der RMI-Codebase ........................................................ 1028
Häufig auftretende Fehler und deren Behebung ................................ 1043
26 JDBC ......................................................................................... 1046
26.1
26.2
26.3
26.4
26.5
26.6
26.7
26.8
26.9
Einführung in SQL .............................................................................. 1047
JDBC-Treiber ...................................................................................... 1056
Installation und Konfiguration von MySQL ......................................... 1058
Zugriff auf ein DBMS .......................................................................... 1060
Datentypen ......................................................................................... 1085
Exceptions .......................................................................................... 1086
Metadaten ........................................................................................... 1087
JDBC-Erweiterungspaket ................................................................... 1089
Connection Pooling............................................................................. 1090
Inhaltsverzeichnis
XV
27 ENTERPRISE JAVABEANS 3.0 ................................................ 1098
27.1
27.2
27.3
27.4
27.5
27.6
27.7
27.8
27.9
Idee der Enterprise JavaBeans .......................................................... 1099
Objektorientierte Modellierung ............................................................ 1099
Abbildung von Klassen auf Bean-Typen ............................................ 1105
Überblick über die Enterprise JavaBeans-Architektur ........................ 1106
Konzept der EJB-Typen...................................................................... 1111
Session-Beans.................................................................................... 1112
Der Applikations-Server JBoss ........................................................... 1121
Java Persistence API.......................................................................... 1130
Vollständiges Beispiel: Eine einfache Bankanwendung ..................... 1157
ANHANG A DER ASCII-ZEICHENSATZ .......................................... 1171
ANHANG B GÜLTIGKEITSBEREICHE VON NAMEN ..................... 1174
ANHANG C DIE KLASSE SYSTEM ................................................. 1179
ANHANG D JNDI.............................................................................. 1182
ANHANG E ANNOTATIONS ............................................................ 1199
BEGRIFFSVERZEICHNIS ................................................................ 1207
LITERATURVERZEICHNIS .............................................................. 1216
INDEX ............................................................................................... 1218
Kapitel 1
Grundbegriffe der
Programmierung
1.1
1.2
1.3
1.4
1.5
1.6
1.7
Das erste Programm
Vom Problem zum Programm
Nassi-Shneiderman-Diagramme
Zeichen
Variablen
Datentypen
Übungen
1 Grundbegriffe der Programmierung
Bevor man mit einer Programmiersprache umzugehen lernt, muss man wissen, was
ein Programm prinzipiell ist und wie man Programme konstruiert. Damit wird sich das
erste Kapitel befassen. Leser, die bereits eine höhere Programmiersprache erlernt
haben, können prüfen, ob sie tatsächlich die hier präsentierten Grundbegriffe (noch)
beherrschen und gegebenenfalls dieses Kapitel "überfliegen". Ehe es "zur Sache
geht", zunächst als spielerischen Einstieg in Kapitel 1.1 das Programm "Hello, world".
1.1 Das erste Programm
Seit Kernighan und Ritchie ist es Usus geworden, als erstes Beispiel in einer neuen
Programmiersprache mit dem Programm "Hello, world" zu beginnen. Das Programm
"Hello, world" macht nichts anderes, als den Text "Hello, world!" auf dem Bildschirm
auszugeben. In Java sieht das "Hello, world"-Programm folgendermaßen aus:
// Datei: HelloWorld.java
public class HelloWorld
// Klasse zur Ausgabe von "Hello, world!"
{
public static void main (String[] args) // Methode main() zur
{
// Ausgabe der ZeichenSystem.out.println ("Hello, world!"); // kette
}
}
Die Methode println() – sie wird ausgesprochen als print line – wird über
System.out.println() aufgerufen und schreibt die Zeichenkette "Hello, world!"
auf den Bildschirm. Bitte erstellen Sie dieses Programm mit einem Texteditor, der
Ihnen vertraut ist, und speichern Sie es unter dem Dateinamen HelloWorld.java
in einer Datei ab. Dieses Programm besteht aus einer Klasse mit dem Namen
HelloWorld. Eine Klasse ist dadurch gekennzeichnet, dass sie das Schlüsselwort
class trägt. Beachten Sie, dass alles, was hinter zwei Schrägstrichen in einer Zeile
steht, zusammen mit den beiden Schrägstrichen einen so genannten Kommentar
darstellt. Ein Kommentar dient zur Dokumentation eines Programms und hat keinen
Einfluss auf den Ablauf des Programms.
In Java kann man nur objektorientiert programmieren. Alle Programme in Java basieren von ihrem Aufbau her komplett auf
Klassen.
Bitte achten Sie sowohl beim Eintippen des Programms im Texteditor, als auch bei
der Vergabe des Dateinamens auf die Groß- und Kleinschreibung, da in Java
zwischen Groß- und Kleinbuchstaben unterschieden wird. In anderen Worten: Java
ist case sensitiv.
Grundbegriffe der Programmierung
3
Kompilieren Sie das Programm mit dem javac-Compiler1 des Java Development
Kits2 durch die folgende Eingabe auf der Kommandozeile:
javac HelloWorld.java
Danach drücken Sie die <RETURN>-Taste. Auf der <RETURN>-Taste ist oftmals das
Symbol ↵ zu sehen. Der javac-Compiler übersetzt dann den Java-Quellcode der
Datei HelloWorld.java in so genannten Bytecode und legt diesen in der Datei
HelloWorld.class ab. Durch die Eingabe von
java HelloWorld
und das anschließende Drücken der <RETURN>-Taste wird der Bytecode-Interpreter
java gestartet, der den Bytecode interpretiert, d.h. in Maschinencode übersetzt und
zur Ausführung bringt. Hierbei ist Maschinencode ein spezieller Code, den der
entsprechende Prozessor versteht. Java-Anwendungen können – wie hier gezeigt –
von der Kommandozeile aus gestartet werden. Sie können aber auch aus Entwicklungsumgebungen wie z.B. aus Eclipse aufgerufen werden. Bild 1-1 zeigt die
Ein- und Ausgaben in einer Windows-Konsole.
Bild 1-1 Kompilieren und Starten über Kommandos in der Windows-Konsole
Zu beachten ist, dass der Interpreter java den Klassennamen
HelloWorld und nicht den Dateinamen HelloWorld.class
verlangt!
Die Ausgabe des Programms ist:
Hello, world!
Wie Sie bemerkt haben, werden die Anführungszeichen " nicht mit ausgegeben. Sie
dienen nur dazu, den Anfang und das Ende einer Zeichenkette (eines Strings) zu
markieren. So schnell kann es also gehen. Das erste Programm läuft schon. Sie
hatten "ein Händchen" im Umgang mit Texteditor, Compiler und Interpreter. Da es
hier nur darum geht, ein allererstes Programm zu starten, wird auf eine detaillierte
Erläuterung des Programms verzichtet.
1
2
Der Name javac wurde gewählt als Abkürzung für Java Compiler.
Die Installation des Java Development Kits wird in Kap. 3.5.1 beschrieben.
4
Kapitel 1
1.2 Vom Problem zum Programm
Der Begriff Programm ist eng mit dem Begriff Algorithmus verbunden. Algorithmen
sind Vorschriften für die Lösung eines Problems, welche die Handlungen und ihre
Abfolge – kurz, die Handlungsweise – beschreiben. Im Alltag begegnet man Algorithmen in Form von Bastelanleitungen, Kochrezepten und Gebrauchsanweisungen.
Abstrakt kann man sagen, dass die folgenden Bestandteile und Eigenschaften zu
einem Algorithmus gehören:
•
•
•
•
eine Menge von Objekten, die durch den Algorithmus bearbeitet werden,
eine Menge von Operationen, die auf den Objekten ausgeführt werden,
ein definierter Anfangszustand, in dem sich die Objekte zu Beginn befinden,
und ein gewünschter Endzustand, in dem sich die Objekte nach der Lösung des
Problems befinden sollen.
Dies sei am Beispiel Kochrezept erläutert:
Objekte:
Operationen:
Anfangszustand:
Endzustand:
Zutaten, Geschirr, Herd, ...
waschen, anbraten, schälen, passieren, ...
Zutaten im "Rohzustand", Teller leer, Herd kalt, ...
fantastische Mahlzeit auf dem Teller.
Was dann noch zur Lösung eines Problems gebraucht wird, ist eine Anleitung, ein
Rezept oder eine Folge von Anweisungen und jemand, der es macht. Mit anderen
Worten, man benötigt einen Algorithmus – also eine Rechenvorschrift – und einen
Prozessor.
Während aber bei einem Kochrezept viele Dinge gar nicht explizit gesagt werden
müssen, sondern dem Koch aufgrund seiner Erfahrung implizit klar sind – z.B. dass
er den Kuchen aus dem Backofen holen muss, bevor er schwarz ist –, muss einem
Prozessor alles explizit und eindeutig durch ein Programm, das aus Anweisungen
einer Programmiersprache besteht, gesagt werden. Ein Programm besteht aus
einer Reihe von einzelnen Anweisungen an den Prozessor, die von diesem der
Reihe nach – in anderen Worten sequenziell – ausgeführt werden.
Ein Algorithmus in einer Programmiersprache besteht aus Anweisungen, die von einem Prozessor ausgeführt werden können.
Arbeitsspeicher des Rechners
Anweisung
Anweisung
1
2
3
Anweisung
...
Anweisung
Prozessor des Rechners
Anweisung
Anweisung
Bild 1-2 Der Prozessor bearbeitet eine Anweisung des Programms nach der anderen
Grundbegriffe der Programmierung
5
Bild 1-2 zeigt Anweisungen, die im Arbeitsspeicher des Rechners abgelegt sind und
nacheinander durch den Prozessor des Rechners abgearbeitet werden.
1.2.1 Der Euklid’sche Algorithmus als Beispiel für Algorithmen
Als Beispiel wird der Algorithmus betrachtet, der von Euklid ca. 300 v. Chr. zur
Bestimmung des größten gemeinsamen Teilers (ggT) zweier natürlicher Zahlen
aufgestellt wurde. Der größte gemeinsame Teiler wird zum Kürzen von Brüchen
benötigt:
xungekürzt
yungekürzt
=
xungekürzt /ggT(xungekürzt ,yungekürzt )
yungekürzt /ggT(xungekürzt ,yungekürzt )
=
x gekürzt
y gekürzt
Hierbei ist ggT(xungekürzt, yungekürzt) der größte gemeinsame Teiler der beiden Zahlen
xungekürzt und yungekürzt.
Beispiel:
24 24 /ggT ( 24,9 ) 24 / 3 8
=
=
=
9
9 /ggT ( 24,9 )
9/ 3 3
Der Euklid’sche Algorithmus lautet:
Zur Bestimmung des größten gemeinsamen Teilers zwischen zwei natürlichen
Zahlen x und y tue Folgendes3:
Solange x ungleich y ist, wiederhole:
Wenn x größer als y ist, dann:
Ziehe y von x ab und weise das Ergebnis x zu.
Andernfalls:
Ziehe x von y ab und weise das Ergebnis y zu.
Wenn x gleich y ist, dann:
x (bzw. y) ist der gesuchte größte gemeinsame Teiler.
Man erkennt in diesem Beispiel Folgendes:
• Es gibt eine Menge von Objekten, mit denen etwas passiert: x und y. Diese
Objekte x und y haben am Anfang beliebig vorgegebene Werte, am Schluss
enthalten sie den größten gemeinsamen Teiler.
• Es gibt gewisse Grundoperationen, die hier nicht weiter erläutert werden, da sie
implizit klar sind: vergleichen, abziehen und zuweisen.
• Es handelt sich um eine sequenzielle Folge von Anweisungen (Operationen), d.h.
die Anweisungen werden der Reihe nach hintereinander ausgeführt.
• Es gibt aber auch bestimmte Konstrukte, welche die einfache sequenzielle Folge
(Hintereinanderausführung) gezielt verändern: eine Auswahl zwischen Alternativen (Selektion) und eine Wiederholung von Anweisungen (Iteration).
3
Die Arbeitsweise dieses Algorithmus für die Zahlen
Tabelle 1-1 in Kapitel 1.2.3 verdeutlicht.
x == 24 und y == 9 wird anhand der
6
Kapitel 1
Es gibt auch Algorithmen zur Beschreibung von parallelen Aktivitäten, die zum
gleichen Zeitpunkt nebeneinander ausgeführt werden. Diese Algorithmen werden
unter anderem bei Betriebssystemen oder in der Prozessdatenverarbeitung benötigt.
Im Folgenden werden bewusst nur sequenzielle Abläufe behandelt, bei denen zu
einem Zeitpunkt nur eine einzige Operation durchgeführt wird.
1.2.2 Beschreibung sequenzieller Abläufe
Die Abarbeitungsreihenfolge von Anweisungen wird auch als
Kontrollfluss bezeichnet.
Den Prozessor stört es überhaupt nicht, wenn eine Anweisung einen Sprungbefehl
zu einer anderen Anweisung enthält. Solche Sprungbefehle werden in manchen
Programmiersprachen beispielsweise mit dem Befehl GOTO und Marken wie z.B. 100
realisiert:
100
300
IF(a > b) GOTO 100
Anweisungen2
GOTO 300
Anweisungen1
Anweisungen3
In Worten lauten diese Anweisungen an den Prozessor: "Vergleiche die Werte von a
und b. Wenn4 a größer als b ist, springe an die Stelle mit der Marke 100. Führe an
der Stelle mit der Marke 100 die Anweisungen Anweisungen1 aus. Fahre dann mit
den Anweisungen3 fort. Ist aber die Bedingung a > b nicht erfüllt, so arbeite die
Anweisungen Anweisungen2 ab. Springe dann zu der Marke 300 und führe die
Anweisungen Anweisungen3 aus."
Will jedoch ein Programmierer ein solches Programm lesen, so verliert er durch die
Sprünge sehr leicht den Zusammenhang und damit das Verständnis. Für den
menschlichen Leser ist es am besten, wenn ein Programm einen einfachen und
damit überschaubaren Kontrollfluss hat. Während typische Programme der sechziger
Jahre noch zahlreiche Sprünge enthielten, bemühen sich die Programmierer seit
Dijkstras grundlegendem Artikel "Go To Statement Considered Harmful" [1],
möglichst einen Kontrollfluss ohne Sprünge zu entwerfen. Beispielsweise kann der
oben mit GOTO beschriebene Ablauf auch folgendermaßen realisiert werden:
IF(a > b)
Anweisungen1
ELSE
Anweisungen2
ENDIF
Anweisungen3
4
"Wenn“ wird ausgedrückt durch das Schlüsselwort IF der hier verwendeten Programmiersprache
FORTRAN.
Herunterladen