Gottfried Wolmeringer Java 6 lernen mit Eclipse
Auf einen Blick TEIL I Grundlagen 1 Grundwissen für Programmierer... 23 2 Werkzeugkunde für Programmierer... 41 3 Unsere Werkbank, die IDE... 53 TEIL II Installation 4 Die Installation von Java... 69 5 Die Installation von Eclipse... 95 6 Mit Eclipse arbeiten... 121 TEIL III OOP Objektorientierte Programmierung 7 Die Installation von objectif... 177 8 Konzepte der OOP... 193 9 Java Baukasten für Objekte... 243 10 OOP in der Praxis... 303 11 Vererbung und ähnliche Dinge... 337 TEIL IV Java-Techniken 12 Java-Oberflächen... 379 13 Ausnahmen und Threads... 453 14 Codekonventionen... 475 TEIL V Datenbanken 15 Datenbanken in Eclipse... 509 16 Datenbanken und Java... 539 17 Der etwas andere Ausblick... 561
Inhalt Danksagung... 15 Vorwort... 17 Hinweise zur Benutzung des Buches... 18 Learning by Doing... 19 TEIL I Grundlagen 1 Grundwissen für Programmierer... 23 1.1 Warum programmieren?... 23 1.2 Was ist eine Programmiersprache?... 25 1.3 Java und andere Programmiersprachen... 29 1.3.1 Die Java-Story... 29 1.3.2 Kann auch ich lernen, mittels Java zu programmieren?... 36 1.4 Zusammenfassung... 38 1.5 Aufgaben zum Kapitel... 38 1.6 Webseiten zum Kapitel... 39 2 Werkzeugkunde für Programmierer... 41 2.1 Wie funktioniert eine Programmiersprache?... 41 2.1.1 Compiler... 42 2.1.2 Interpreter... 43 2.1.3 VM-Sprachen... 45 2.1.4 Imperative und funktionale Sprachen... 46 2.2 Wie erlernt man eine Programmiersprache?... 49 2.3 Zusammenfassung... 51 2.4 Aufgaben zum Kapitel... 51 2.5 Webseiten zum Kapitel... 52 3 Unsere Werkbank, die IDE... 53 3.1 Was ist eine IDE?... 53 3.1.1 Konzepte einer IDE... 54 3.1.2 Die Konzepte von Eclipse... 57 3.1.3 Eclipse ein Framework als IDE... 58 3.2 Weitere Eclipse-Sprachen... 59 3.2.1 Perl... 60 5
Inhalt 3.2.2 Python... 60 3.2.3 C... 60 3.2.4 C++... 61 3.3 So funktioniert eine IDE und so Eclipse... 62 3.4 Zusammenfassung... 65 3.5 Aufgaben zum Kapitel... 66 3.6 Webseiten zum Kapitel... 66 TEIL II Installation 4 Die Installation von Java... 69 4.1 JDK oder JRE?... 69 4.2 Hardwarevoraussetzungen... 70 4.3 Die Installation... 71 4.4 Die Installation der Dokumentation... 79 4.4.1 Aufbau der JDK-Dokumentation... 79 4.4.2 Test und Einsatz der JDK-Dokumentation... 80 4.5 Der Einsatz von Java Web Start... 82 4.6 Demos und Beispiele... 86 4.7 Programmierung ohne Eclipse... 87 4.8 Deinstallation... 90 4.9 Zusammenfassung... 91 4.10 Aufgaben zum Kapitel... 92 4.11 Webseiten zum Kapitel... 93 5 Die Installation von Eclipse... 95 5.1 Versionen und Milestones... 95 5.2 Hardwarevoraussetzungen... 98 5.3 Die Installation... 98 5.3.1 Installation von Filzip 3.06... 99 5.3.2 Eclipse entpacken... 101 5.3.3 Eclipse zum ersten Mal starten... 102 5.4 Das Sprach-Paket installieren... 105 5.5 Den Spickzettel-Lehrgang»Die Sprache Java«installieren... 107 5.6 Callisto oder die Installation von Plugins... 110 5.6.1 Den Visual Editor installieren... 112 5.6.2 Jigloo installieren... 113 5.6.3 Ein Datenbank-Plugin installieren... 114 6
Inhalt 5.7 Übersicht der Plugins... 115 5.7.1 Plugins updaten/deinstallieren... 116 5.8 Zusammenfassung... 119 5.9 Aufgaben zum Kapitel... 119 5.10 Webseiten zum Kapitel... 120 6 Mit Eclipse arbeiten... 121 6.1 Grundkenntnisse Eclipse... 121 6.2 Die Bestandteile... 122 6.2.1 Bausteine in allen Formen... 122 6.2.2 Welt aus Perspektiven... 125 6.2.3 Auf der Suche nach dem verlorenen Editor... 127 6.2.4 Nutzerfreundlichkeit pur... 129 6.3 Die Geburt eines Projekts... 132 6.3.1 Ein neues Projekt anlegen... 133 6.3.2 Arbeitssets... 136 6.3.3 Projekte löschen... 138 6.4 Hilfestellung... 138 6.5 Der Aufbau von Eclipse... 139 6.5.1 Die Perspektiven... 140 6.5.2 Die Menüleiste (Menubar)... 142 6.5.3 Datei... 143 6.5.4 Bearbeiten... 144 6.5.5 Quelle... 145 6.5.6 Refactoring... 147 6.5.7 Navigieren... 153 6.5.8 Suchen... 154 6.5.9 Projekt... 154 6.5.10 Ausführen... 157 6.5.11 Restliche Menüs... 157 6.6 Die Views... 158 6.6.1 Die Navigator-View... 158 6.6.2 Die Editoren... 161 6.7 Projekte übernehmen... 169 6.7.1 JDK-Projekte und einzelne Dateien übernehmen... 170 6.7.2 Ganze Projekte von fremden IDEs übernehmen... 170 6.7.3 Andere Eclipse-Projekte übernehmen... 171 6.7.4 Änderungen an der Paketstruktur bestehender Projekte... 172 7
Inhalt 6.8 Zusammenfassung... 173 6.9 Aufgaben zum Kapitel... 173 6.10 Webseiten zum Kapitel... 174 TEIL III OOP Objektorientierte Programmierung 7 Die Installation von objectif... 177 7.1 Die Personal Edition... 177 7.2 Die Installation... 177 7.3 Adobe Acrobat Reader installieren... 186 7.4 Erste Erfahrungen mit ObjectiF und der Online- Dokumentation... 188 7.5 Zusammenfassung... 191 7.6 Aufgaben zum Kapitel... 191 7.7 Webseiten zum Kapitel... 192 8 Konzepte der OOP... 193 8.1 Eine uralte Idee für moderne Software... 193 8.1.1 Ein neues, altes Paradigma... 195 8.1.2 Das Objekt und seine Klasse... 196 8.1.3 Ein Baum voller Autos... 198 8.2 Ein Eclipse-Projekt... 199 8.2.1 Ein Projekt und seine Pakete... 201 8.3 UML-Zeichnen statt Programmieren... 204 8.3.1 ObjectiF mit neuem System starten... 205 8.3.2 Attribute für unsere Autos... 212 8.3.3 Auch Autos erben... 217 8.3.4 Aus konkret wird abstrakt... 221 8.3.5 Identität der Software in Objekten... 222 8.3.6 Klassifizierung... 228 8.3.7 Vererbung... 229 8.3.8 Polymorphismus... 232 8.4 Zum Beispiel... 237 8.5 Zusammenfassung... 240 8.6 Aufgaben zum Kapitel... 241 8.7 Webseiten zum Kapitel... 242 8
Inhalt 9 Java Baukasten für Objekte... 243 9.1 Java und OOP... 243 9.1.1 Vom Umgang mit Objekten... 244 9.1.2 Die API-Dokumentation als Quelle allen Seins... 246 9.1.3 Von abstrakten und konkreten Klassen bis zu den Schnittstellen... 251 9.2 Zum Innenleben der Objekte... 255 9.2.1 Primitive Datentypen... 259 9.2.2 Komplexe Datentypen... 262 9.2.3 Ein paar Worte zu Arrays, Listen und Stacks... 264 9.2.4 Übungen zu den primitiven Datentypen... 264 9.2.5 Die Sichtbarkeit in der Praxis... 275 9.2.6 Die main-methode... 282 9.2.7 Die Steuerung des Programmflusses... 288 9.3 Zusammenfassung... 298 9.4 Aufgaben zum Kapitel... 300 9.5 Webseiten zum Kapitel... 301 10 OOP in der Praxis... 303 10.1 Unser Projekt Carlipso... 303 10.1.1 Projektdesign ad hoc... 304 10.1.2 Die Geschäftsobjekte... 306 10.1.3 Innere Klassen... 308 10.2 Zusammenfassung... 333 10.3 Aufgaben zum Kapitel... 334 10.4 Webseiten zum Kapitel... 336 11 Vererbung und ähnliche Dinge... 337 11.1 Von Vererbung und Polymorphie... 337 11.1.1 Java-Klassen im Besonderen... 338 11.1.2 Die Syntax bei Java-Klassen... 341 11.2 Vom Umgang mit Objekten... 345 11.2.1 Das Zusammenspiel von Klassen, Objekten und Methoden... 347 11.3 ArrayList, auch ein komplexer Typ?... 354 11.3.1 Namensraum in Java... 362 11.4 Im Anfang war das Bild... 364 9
Inhalt 11.5 Zusammenfassung... 373 11.6 Aufgaben zum Kapitel... 374 11.7 Webseiten zum Kapitel... 374 TEIL IV Java-Techniken 12 Java-Oberflächen... 379 12.1 Mit AWT lernte Java»fensterln«... 380 12.1.1 Der Ast, an dem der Frame hängt... 383 12.1.2 Swing... 394 12.2 Oberflächen zeichnen... 396 12.2.1 Viele Werkzeuge ein Ergebnis... 396 12.2.2 Visual Editor, der Alleskönner... 397 12.2.3 Jigloo, ein Werkzeug für Swing-Oberflächen... 406 12.2.4 Zwischen Feld und Label... 421 12.2.5 Das Ereignismodell... 429 12.2.6 Modifizierungen an Ereignissen... 433 12.3 Für Meldungen aller Art... 434 12.3.1 Frame im Frame und interne Dialoge... 439 12.3.2 Faschingskostüme für Oberflächen... 441 12.4 SWT, das Standard Widget Toolkit... 444 12.5 Zusammenfassung... 448 12.6 Aufgaben zum Kapitel... 449 12.7 Webseiten zum Kapitel... 450 13 Ausnahmen und Threads... 453 13.1 Wo Ausnahmen zur Regel werden... 453 13.2 Multithreading mit Java... 460 13.3 Dämonen, die»dunkle Seite«in Java?... 465 13.4 Instanz-Initiatoren... 469 13.5 Zusammenfassung... 471 13.6 Aufgaben zum Kapitel... 472 13.7 Webseiten zum Kapitel... 474 14 Codekonventionen... 475 14.1 Ordnung ist das halbe Leben... 475 14.1.1 Weshalb sind Codekonventionen unverzichtbar?... 475 14.1.2 Umsetzung der Codekonventionen... 477 10
Inhalt 14.2 Dateiaufbau... 477 14.2.1 Dateinamen... 478 14.2.2 Der Klassenname... 478 14.2.3 Dateiendungen... 479 14.3 Innerer Dateiaufbau... 480 14.3.1 Die Bestandteile einer Datei... 480 14.3.2 Der Dateikommentar... 481 14.3.3 Klassen und Interfaces... 482 14.4 Einrücken... 483 14.5 Die Zeilenlänge... 483 14.6 Kommentare... 484 14.6.1 Quellcodekommentare... 485 14.7 Javadoc-Kommentare... 487 14.7.1 Methodenkommentar... 488 14.8 Deklarationen... 489 14.8.1 Eine Deklaration pro Zeile... 490 14.8.2 Position von Deklarationen... 491 14.9 Klassen- und Interface-Definitionen... 492 14.10 Anweisungen... 492 14.10.1 Einfache Anweisungen... 492 14.10.2 Blöcke oder gebündelte Anweisungen... 493 14.10.3 Die if- und if-else-anweisungen... 493 14.10.4 Die for-schleife... 494 14.10.5 Die while-schleife... 495 14.10.6 Die do-while-schleife... 495 14.10.7 Die switch-anweisung... 495 14.10.8 Die try-/catch-anweisung... 496 14.10.9 Die return-anweisung... 496 14.11 Leerräume... 496 14.11.1 Leerzeilen... 496 14.11.2 Leerzeichen... 498 14.12 Namenskonventionen... 499 14.12.1 Anwendungen... 499 14.12.2 Packages... 499 14.12.3 Klassenbibliothek... 500 14.13 Programmierpraktiken... 502 14.13.1 Zugriff auf Instanz- und Klassenvariablen... 502 14.13.2 Zugriff auf Klassenvariablen und -methoden... 502 14.13.3 Zuweisungen... 502 14.13.4 Instanziierung... 503 14.13.5 Rückgabewerte... 503 11
Inhalt 14.14 Zusammenfassung... 505 14.15 Aufgaben zum Kapitel... 505 14.16 Webseiten zum Kapitel... 506 TEIL V Datenbanken 15 Datenbanken in Eclipse... 509 15.1 Einstieg in das Thema... 509 15.2 Spielereien mit Access... 510 15.3 Die Einrichtung von SQL Explorer... 517 15.4 Allgemeine Betrachtungen zu Datenbanken... 520 15.4.1 Zugriffssysteme und Datenbank-Server... 521 15.5 MySQL... 523 15.5.1 MySQL installieren... 523 15.5.2 Die ersten Experimente mit einem Datenbank-Server... 527 15.5.3 Datenbanken erzeugen... 530 15.6 Eclipse und MySQL... 531 15.7 Zusammenfassung... 535 15.8 Aufgaben zum Kapitel... 536 15.9 Webseiten zum Kapitel... 537 16 Datenbanken und Java... 539 16.1 Java und die Datenbankanbindung... 539 16.2 Vom Treiber zur Verbindung... 542 16.3 Daten aus der Datenbank lesen... 544 16.4 Carlipso goes DB... 545 16.5 Daten in die Datenbank schreiben... 552 16.5.1 Die Reflection-API... 554 16.6 Zusammenfassung... 557 16.7 Aufgaben zum Kapitel... 558 16.8 Webseiten zum Kapitel... 560 17 Der etwas andere Ausblick... 561 17.1 Das Wichtigste zuerst... 561 17.2 Ausblick zum Einblick... 562 17.3 Die Zukunft der EDV... 563 17.4 Java-Techniken... 563 17.4.1 EJBs... 564 12
Inhalt 17.5 Datenbanken... 565 17.6 Eclipse... 565 17.7 Softwaredesign und Entwurf... 566 17.8 Vorgehensweisen und Vorgehensmodelle... 566 17.9 Steuerungsaufgaben während der Softwareentwicklung... 567 17.10 Andere Programmiersprachen... 567 17.11 Die Testphase... 568 17.11.1 Programmierertests mit JUnit... 568 17.12 Die Qualitätssicherung... 569 17.13 Zusammenfassung... 569 17.14 Webseiten zum Kapitel... 570 Anhang... 573 A Tipps... 575 A.1 Kommentare und andere Hilfen... 575 A.2 Mehr Übersicht schaffen... 576 A.2.1 Code minimieren... 576 A.2.2 Variablen markieren... 576 A.2.3 Views entnehmen... 576 A.2.4 Editoren automatisch schließen... 576 A.3 Einfachere Handhabung... 577 A.3.1 Inkrementelle Suche... 577 A.3.2 Zeilen verschieben... 577 A.3.3 Zeilen einfügen... 577 A.3.4 Groß- und Kleinschreibung... 577 A.3.5 Aktuelle Änderungen... 578 A.3.6 Code oder Dokument öffnen... 578 A.3.7 Methoden separiert anzeigen... 578 A.3.8 View minimiert ablegen... 578 A.3.9 Aktuelle Methode im Navigator oder Paket-Explorer suchen... 578 A.3.10 Andere Perspektive öffnen... 578 B Literatur und Webseiten... 579 Literaturverzeichnis... 579 Webseiten... 579 C Glossar... 581 Index... 589 13
Inhalt Video-Training auf der Buch-DVD 1 Das Java-Projekt in Eclipse...[51:29 min.] 1.1 Der Workspace...[07:07 min.] 1.2 Projekte anlegen...[07:50 min.] 1.3 Arbeitssets...[06:10 min.] 1.4 Dateien anlegen...[08:06 min.] 1.5 Die Java-Perspektive...[10:08 min.] 1.6 Java-Code ausführen...[06:54 min.] 1.7 Java-Code debuggen...[05:14 min.] 14
Natürlich wollen Sie gleich in die Praxis, wollen Ihr erstes Java-Programm laufen sehen. Das werden wir auch so bald als möglich tun. Ein wenig Theorie gehört jedoch vor jede Praxis. So wird in diesem Kapitel erläutert, welche Arten von Programmen es gibt und wie aus einem vom Programmierer geschriebenem Programm, dem Quellcode, ausführbare Software wird. 2 Werkzeugkunde für Programmierer 2.1 Wie funktioniert eine Programmiersprache? Im vorigen Kapitel haben wir gesehen, wie ein kleines Java-Programm im Prinzip aussehen könnte, und dass man es als Programmierer fast so lesen kann wie einen Roman oder wenigstens wie eine mathematische Formelsammlung. Aber wie liest der Computer so ein Programm und wie führt er es aus? Zunächst einmal sollte klar sein, dass ein Computer mit einer Anweisung wie Kunde aktkunde = new Kunde("Petra Müller"); nicht das Geringste anfangen kann. Wie wir später noch lernen werden, muss zunächst einmal eine Klasse Kunde existieren, bevor man mit new ein neues Objekt aus dieser Klasse erzeugen kann. Der Computer wird nicht einmal das erkennen. Er kann rein gar nichts mit den obigen Worten und dem Gleichheitszeichen anfangen. Computer arbeiten mit binären Werten, also mit Nullen und Einsen. Aber selbst das ist eine Metapher für Menschen, die sich mit Computern auseinandersetzen. Denn Computer arbeiten mit den beiden Zuständen»spannungsführend«und»spannungslos«und nicht wirklich mit den Zahlen Null und Eins. Diese Zustände lassen sich in Speicherbausteinen konservieren, um Transistoren wie kleine Schalter an- und auszuschalten. Heutige Prozessoren bestehen aus vielen Millionen von solchen Schaltern.So kann beispielsweise 1 GByte Arbeitsspeicher genau 8.589.934.592 Strom- und Kein-Strom-Zustände speichern. Keine Angst man muss nicht im Detail verstehen, wie ein so gewaltiges Regelwerk wie ein Mikroprozessor funktioniert, um Programmieren zu lernen. Man sollte nur wissen, dass ein Computer intern nur mit Folgen von Nullen und Einsen gesteuert, also programmiert, wird. Auf irgendeine Weise muss eine Programmzeile in Java nun in Nullen und Einsen umgesetzt werden, damit der Computer sie ausführen kann. Dazu gibt es sogenannte Compiler. Das sind einfach 41
2 Werkzeugkunde für Programmierer»Übersetzer«, die aus einem Java-Programm, das ein Mensch geschrieben hat, einen Code erzeugen, den der Computer ausführen kann. Daneben existieren noch sogenannte Interpreter, die Programme zeilenweise vom Rechner ausführen lassen. Bevor wir uns Compiler und Interpreter näher betrachten, bleibt noch zu sagen, dass man heutige Personalcomputer zu den Von-Neumann-Rechnern zählt. Das sind Rechner, die Programme und Daten in einem modifizierbaren Hauptspeicher ablegen. Deshalb können die Daten, aber auch der Code, mit dem die Daten bearbeitet werden, vom Prozessor abgeändert oder verlagert werden. Zeitweise hat man Sprachen auch in Compiler- und Interpretersprachen eingeteilt. Dabei hängt das in keiner Weise von der Sprache ab. Im Grunde lässt sich jede Computersprache nutzen, um Programme zu erstellen, die sowohl von einem Interpreter als auch von einem Compiler übersetzt werden können. Früher galt C als typische Compilersprache und Basic als Interpretersprache. Es dürfte vielleicht verwundern, dass Java im Grunde aus einer Mischung von Interpreter und Compiler abgearbeitet wird. Denn sowohl Compiler als auch Interpreter haben ganz spezifische Vor- und Nachteile, die man auf diese Weise geschickt ausgleicht. Einen Compiler kann man als eine Art Übersetzer ansehen. Im europäischen Parlament in Brüssel arbeiten Hunderte von Dolmetschern, die gesprochenes Wort direkt in einer anderen Sprache nachsprechen, die sogenannten Simultanübersetzer. Genau das wäre aber ein Interpreter. Ein Compiler nimmt vielmehr das gesamte niedergeschriebene Java-Programm und erstellt daraus ein Programm, das sich vom Nutzer starten lässt. Das ist im Grunde wie ein Übersetzer, der in monatelanger Arbeit ein ganzes Buch aus dem Englischen ins Deutsche überträgt. Computer arbeiten extrem schnell, sodass sie dafür meist nur Sekunden brauchen, obwohl ein großes Programm oft mehr Text umfasst als die längsten Beststeller. 2.1.1 Compiler Mit dem Compiler erzeugte Programme können direkt vom Rechner ausgeführt werden. Im Gegensatz zum Interpreter benötigen sie dazu kein zusätzliches Programm. Der Compiler übersetzt einmal nach der Fertigstellung des Quellcodes das gesamte Programm in Maschinensprache; das hat u. a. den Vorteil, dass damit eine schnelle Ausführung erreicht wird. Die Kompilierung braucht nur einmal durchgeführt zu werden, und das Programm kann als lauffähige Binärcode-Datei auf alle Rechner kopiert und gestartet werden, auf denen es genutzt werden soll (Abbildung 2.1). Außerdem ist eine Binär-Datei wesentlich kleiner als der Quell- 42
Wie funktioniert eine Programmiersprache? 2.1 code des Programmierers. Man spart also auch Speicherplatz. Dadurch hat man zwar ein schnelles Programm, aber es sind eine ganze Reihe von Nachteilen damit verbunden: Das Anwendungsprogramm, das man erhält, läuft nur unter dem Betriebssystem, für das es erstellt wurde. Und die Rechner müssen je nach Art des Anwendungsprogramms auch die gleiche Hardwareausstattung aufweisen. Wechselt man also die Hardware oder das Betriebssystem, benötigt man eine neue Version des Anwendungsprogramms, was oft mit hohem Aufwand verbunden ist. Abbildung 2.1 Vereinfachte Darstellung der Kompilierung Änderungen am Programm kann ein Programmierer nur durchführen, wenn er den Quellcode des Programms besitzt. Eine Umkehrung der Kompilierung, um aus der Binärcode-Datei wieder den Quellcode zu erhalten, gibt es eigentlich nicht. Es existieren zwar sogenannte Decompiler, aber ihre Ergebnisse sind meist unbrauchbar. Einen Vorteil hat der Binärcode allerdings: Er kann nicht missbraucht werden, um eigene Änderungen am Programm durchzuführen oder es gar unter anderem Namen zu verkaufen. Im Zeitalter des offenen Quellcodes (OpenSource) wird dies eher als Nachteil angesehen. 2.1.2 Interpreter Ein Interpreter führt die Programme direkt im Quellcode aus. Er wandelt die Programme vorher nicht in eine andere Dateiform um. Um Programme mit einem Interpreter auszuführen, muss zunächst der Interpreter und in ihm das auszuführende Programm gestartet werden. Ein Interpreter arbeitet direkt den Code ab, den der Programmierer in der Programmiersprache erstellt hat. Das bedeutet zunächst einmal, dass auf jedem Rechner und jedem Betriebssystem, auf dem es einen Interpreter für diese Sprache gibt, das Programm ohne Änderungen ablaufen kann (Abbildung 2.2). Interpretersprachen sind also zunächst einmal systemunabhängig. Dies ist ein unge- 43
2 Werkzeugkunde für Programmierer heurer Vorteil, durch den man auch die Weiterentwicklung von Hardware und Betriebssystem im Griff hat. Man benötigt also nicht ständig eine neue Version des Programms, sondern nur eine neue Version des Interpreters. Änderungen und Beseitigungen von Fehlern kann man somit selbst durchführen, sofern man die verwendete Programmiersprache halbwegs beherrscht. Abbildung 2.2 Schematische Darstellung eines Interpreters Ein weiterer Vorteil zeigt sich beim Programmieren selbst. Ein Interpreter kann ein Programm stückweise ausführen und immer wieder anhalten und weiterlaufen lassen, ganz so, wie der Programmierer es für nötig hält. Änderungen kann man sogleich ausprobieren, ohne den langen Compilerprozess wieder und wieder durchführen zu müssen. Interpretersprachen erleichtern also dem Programmierer das Leben ungemein. Ein Vorteil kann aber auch ein Nachteil sein. Interpreter bedingen natürlich einen langsameren Ablauf als ein kompiliertes Programm. Falls man den Quellcode statt lauffähiger Binärprogramme verkauft, so kann jeder den Code beliebig abändern und eigene Programme daraus machen. Interpretersprachen benötigen mehr Speicherplatz, da der Quellcode umfangreicher als der Binärcode der Programme ist. Außerdem muss zum Ausführen immer erst der Interpreter gestartet sein, der ebenfalls Platz im Speicher benötigt. Genau dieser Effekt, dass für jedes auszuführende Programm ein Interpreter gestartet werden muss, führte zur Entwicklung der Applikations-Server (wie z. B. JBoss). Bei EJB und Webapplikationen allgemein geht es nämlich darum, dass Tausende von Nutzer auf einen Datenbestand (beispielsweise den Inhalt einer Datenbank) zugreifen können. Würde jeder Nutzer auf dem Server einen eignen Interpreter in Gang setzen, wäre der Server schnell überlastet. Mit dem Applikations-Server läuft im Grunde nur ein»interpreter«, der alle zu startenden Programme ausführt und so alle Nutzer»bedient«. 44
Wie funktioniert eine Programmiersprache? 2.1 2.1.3 VM-Sprachen Das Dilemma zwischen Interpreter- und Compilersprachen spaltet die EDV schon Jahrzehnte. Von daher ist es nicht verwunderlich, dass man schon vor 30 Jahren daran dachte, beide Welten zu vereinigen. Man erfand das Konzept der virtuellen Maschine. Dies ist quasi ein Rechner im Rechner, der immer die gleiche Programmierschnittstelle darstellt, egal wie der Rechnerhersteller heißt oder aus welchem Haus das Betriebssystem kommt. Für diese virtuelle Maschine (unabhängig von der Plattform) kann man Software kompilieren und auf jedem Rechner, auf dem die virtuelle Maschine läuft, starten. Natürlich»versteht«die virtuelle Maschine keinen Maschinencode, sondern den sogenannten Bytecode. Er wird sozusagen von der virtuellen Maschine interpretiert (Abbildung 2.3). Dadurch vereint man beide Konzepte auf ideale Weise. Es heißt aber auch, dass man immer beides benötigt, den Java-Compiler (javac.exe) und den Interpreter (java.exe). Das mag einem am Anfang etwas umständlich vorkommen. Aber dies ist der Preis, den man für die Plattformunabhängigkeit und die hohe Flexibilität zahlen muss. Arbeitet man mit Eclipse, stört es ohnehin wenig, weil Eclipse die Kompilierung automatisch durchführt. Um es kurz zu machen: Java sollte man zu dieser Sprachfamilie zählen, die ohnehin nicht viele Mitglieder zählt. Smalltalk war eine der ersten Sprachen, die mit einer VM realisiert wurde. Seit dem Erfolg von Java denkt man etwas anders über Programmiersprachen und virtuelle Maschinen. Theoretisch kann man jede Programmiersprache dazu nutzen, Bytecode für eine VM zu erstellen. Man benötigt nur einen Compiler für die Sprache und die virtuelle Maschine. Durch den Erfolg der Java Virtual Machine (JVM) wurden einige Entwickler angespornt und haben auch Compiler für andere Sprachen geschrieben, die Bytecode für die JVM erzeugen. Einen Überblick bietet die Webseite: http://www.robert-tolksdorf.de/vmlanguages.html. Inzwischen hat auch die Firma Sun den Wunsch nach anderen Sprachen auf Basis der JVM erkannt und unterstützt Entwicklungen in diese Richtung. Abbildung 2.3 Schaubild der Softwareerstellung mit Java 45
Index 3-Tier-Modell 541 A abstrakt 221, 253 abstrakte Klassen 236, 251 abstrakte Methode 251 Alan Turing 26 Algol 60 26 Amigos 205 Analyse 304 Anekdote 23 Anwendungsfall 304 Anwendungsobjekte 208, 305 anzeigen 328 API 203, 246 API-Doku 356 API-Dokumentation 70, 485 APL 50 Apple imac 23 Applikation 303 Arbeitsset 130, 136 Archivart 101 ArrayList 320 Arrays 264 ASCI 351 Assembler 26 Ast 198 atomare Typen 262 AtomicInteger 263 AtomicLong 263 Attribute 196, 306, 342 Aufbau 139 auflösen 250 Aufrufstelle 234 Auslieferung 65 Ausnahmefälle 453 AWT 58 AWT-Oberfläche 252 B Basisklassen 198 Baum 198 Bauplan 195 Bausteine 122 Bedingungen 293 Bertrand Russell 193 Betriebssystemebene 122 Bezeichnungen 198 Beziehungen 198 Bibliotheken 135 BigDecimal 263 BigInteger 263 Blöcke 493 Booch 205 boolean 259 Build-Vorgang 136 Businessobjekte 208, 305 byte 260 Bytecode-Datei 98 C C 55, 60 C# 60 C++ 59, 61 CAD 59 CAD-System 122 CASE 54 Castings 24 catch 369 CDT 61 CeBIT 24 Chain of Responsibility 478 char 259 Child 131 class 196 ClassNotFoundException 456 Cobol 24, 59 Code Assistant 367 Codekomplettierung 64 Codekonventionen 475 Combobox 76 Compiler 53, 269 Component 252, 253 Computer 25 connect 543 Constructor Summary 270 Custom Setup-Dialog 79 589
Index CVS 65, 96 CVS-Sichten 131 D daemon 465 Dämon 47, 465 Darwin 195 Datei 144 Dateiaufbau 477 Dateiendungen 479 Dateiname 478 Datenbank 64, 509 Datenbank-Server 521 Datenbankzugriffe 539 Datendefinitionsabfrage 511 Datenkapselung 341 Datenkonstrukte 480 Datenquellenname 515 Datentypen 261 DbEdit 509 DBMS 521 DDL 512 Deaktivierung 116 debuggen 458 Debugger 55, 65, 127, 284 Dechriffrierung 26 Decompiler 43 default 273 Define 62 definiert 267 Definition 230 Deinstallation 90, 119 Deklarationen 490 deklariert 267 Design 62 Designpattern 479 Deutsch 105 Develop 62 Dialog 326 Dialogbox 46, 133, 208 Dialogfeld 249 DML 512 do-schleife 289 double 260 do-while 495 Drag-and-Drop 172 DVD-Player 25 E Early Binding 234 Ebenen 158 Eclipse starten 102 Editor verlinken 158 Editoren 123, 140 Eiffel 59 Eigenschaften 104, 196, 216, 248 Eingabeaufforderung 88 Einrückung 483 einzeiliger Kommentar 485 Emacs 53 Embeded System 29 Endemarke 485 Enigma 26 Enterprice Java Beans 73 entkoppeln 252 Entwicklerwerkzeug 122 Entwurfsansicht 510 Entwurfsmuster 326, 479, 546 Entzipper 99 erben 217, 253 erfassen 328 error-handling 368 Erscheinungen 193 erweitern 348, 352 EVA 328 Event-Behandlung 453 Exception 453, 455 Exception-Handling 456 exist 279, 282 External JARs 136 F Fachliteratur 37 Fall-Throughs 496 Fallunterscheidung 234 Fehlermeldung 249, 267, 458 Fehlersymbol 219, 250 Fenster 142 Fernsteuerung 29 Festplatte 99 Fields 255 final 269, 281 finalize 362 Flag 463 float 260 590
Index Formatierprogramm 476 for-schleifen 289, 494 Forth 50 Frame 365 Framework 49, 59, 122 frühe Bindung 234 funktionale Sprache 46 G Ganzzahl 46 Garbage-Collection 345 GByte 41 Gebäudesteuerung 25 gecastet 357 gelistete Attribute 314 Generalisation 219 Geschäftsobjekte 208, 209 getlength 46 getter-methoden 146, 453, 555 Green 29 Griechenland 193 Grundausstattung 306 Grundsystem 107 GUI 19 GUI-Applikationen 48 GUI-Builder 54 GUI-Klassen 252 H Hardware 98 Hardwarevoraussetzungen 70 Hauptteil 481 Haupt-Thread 461 Header-Datei 33 Hersteller 199 Hilfedatei 271 Hinweise 18 Historie 65, 482 Homepage 106 HotJava 30 HTML 25 I IBM 106 IDE 19, 53 Ideenlehre 193 IllegalThreadStateException 465 imperative Sprache 46 implementieren 253 importieren/exportieren 160 Index 246, 356 inner class 306 innere Klassen 308 Installation 69, 98 Installation von Plugins 110 Installationsprogramm 74 instanceof 557 Instanz 199 Instanziierung 34, 199, 222, 312, 338 Instanz-Initiatoren 469 int 258, 260 Interface 226, 251, 253, 500 InterruptedException 368 invoke 555 isdaemon 467 J J++ 60 Jacobson 205 Jar-Dateien 245 Java Web Start 70 Java-Compiler 45 Javadoc-Kommentar 481 Java-Handy 24 Java-Lebenslauf 30 Java-Oberflächen 252 Java-Pakete 203 Java-Perspektive 123, 539 Java-Story 29 Java-Trainer 89 JBuilder 54, 63 JDBC 539 JDBC-Aufrufe 541 JDK 69 JDK EE 71 JFace 58 JRE 69 JSP-Anwendungen 131 JVM 23 K Kaffeesorte 23 Key 264 591
Index Kfz 198 Klassen 258 Klassenbezeichnung 197 Klassendiagramm 303 Klassenkopf 257 Klassenkörper 313 Klassennamen 367, 478 Klassifizierung 228 Kommandozeilen-Programme 48 Kommentare 276, 307, 481 Kommunikation 286 komplexe Datentypen 258, 262 Komprimierung 307 Konfiguration 526 konkret 221 konkrete Klassen 251 Konsole 99 Konsolen-Ansicht 268 Konsortium 58 Konstanten 269, 501 Konstruktor 196, 214, 312, 551 Konstruktormethode 271 Konsumelektronik 29 Konventionen 475 Kunden 243 L Language-Pack 105 Late Binding 234 Latest Release 96 Laufvariablen 491 Lebenszyklus 477 Leerzeichen 498 Leerzeilen 496 Lesbarkeit 477 Libraries 69 Library 246 Linné 195 Linux 23, 263 Liste 264, 357 Literale 33 Lizenz 75 LMT 19 long 260 M main-methode 282, 309 Manage 62 Markierung 267 Maschinencode 27 Mathematik 35 mehrdeutig 543 mehrzeiliger Kommentar 485 Meldung 455 Menubar 142 Menüleiste 142 Menüs 125 Methoden 215, 251, 307, 501 Methodenkörper 236, 271 Methodik 132 Micro-Edition 73 Middleware 540 Mikroprozessor 41 Milestones 95 Millisekunden 463 Modell 199, 545 Model-View-Controller 326 Müllbeseitigung 345 Multithreading 460 MVC-Prinzip 478 MySQL 524, 525 N Nachrichten 216, 255 Namenskonventionen 499 Navigatorview 158 navigieren 153 neuronale Netze 47 new 310 Nomenklatur 195 null 311 NumberFormatException 454 O Oak 29 Oberklassen 198 Object 331 Object-relational mapping 541 Objekt 194, 196 objektorientierte Sprache 28 Objektvariablen 232 592
Index ODBC-Bridge 543 ODBC-Verbindung 515 offene Attribute 314 Office-System 122 OMG 205 OOP 19, 232, 326 Open Source 37, 58 Operationen 198, 216 Operatoren 34 Ordner 202 OTI 56 P Package Explorer 337, 356 Paket 246, 363 Paket-Explorer 202 Paketstrukturen 245 Paradigma 195 Parameter 343 parseint 454 PDA 73 Perl 59, 60 Perspectives 123 Perspektive öffnen 140 schließen 142 zurücksetzen 142 Perspektiven 123 Pfade 136 Phasenmodell 303 PHP 59 PL/1 24 Plato 193 Plattformunabhängigkeit 45 Plugin 47, 56 Polymorphie 337 Polymorphismus 232 PowerPC 23 primitive Datentypen 258, 259 println 33, 361 private 212, 229, 273, 329 Programmautoren 342 Programmiersprache erlernen 49 Programmierung ohne Eclipse 87 Projekt 64, 133, 154 Projektdesign 304 Projekte löschen 138 Projektname 128, 245 Projektverwaltung 64 proprietäre Sprache 28 protected 273 Protokollname 543 Prozedur 234 prozedurale Programmierung 244 prozedurale Sprache 28 public 273 Python 59 Q QNX 59 Qualifizierung 311 Quellcode 27, 53, 306, 486 Quelle 146 Quelle-Registerkarte 135 Quick C 55 R rational 57 Rechenoperationen 351 Redundanzen 227, 341 Refactoring 147 Refection-Klassen 341 referenzieren 343, 350 Registerleisten 169 relationale Datenbanken 509 Relationen 513 resume 463 RMT 19 Ruby 60 Rückgabewerte 503 Rumbaugh 205 run 461 Runnable 461 Runtime Environment 90 S SAP 58 Schleife 288, 357 schließende Klammer 255 Schlüsselwörter 33 Scrapbook-Page 309 Scrapbook-Seite 127, 264 screensize 367 SE 71 593
Index Seiteneffekte 488 Semantik 33 Semikolon 236 SEQUEL 509 Serializable 226 Servlets 131 setlength 46 setlocation 367 Setter 146, 453 Setup 74 SGML 25 short 260 Shortcuts 124 Sicht 327 Sichtbarkeit 274 Sichten 123 Signal 454 Signalwerfen 454 Signatur 271, 345 Singleton 546 sleep 368 Smalltalk 56, 127 Smalltalk 80 32 Snippet-Editor 127, 264 Softwareobjekt 196, 243 Softwarewelt 24 Sonderausstattung 306 Spaltennamen 510, 556 späte Bindung 234 Speicher 256 Speicherbereinigung 345 Spezialisierung 219 Splash-Screen 339, 364 Sprachinstallation 106 SQL 509 SQL-Befehle 529 SQL-Statements 541 Squeak 32 Stacks 264 Standardkonstruktor 349 Startmarke 485 static 270, 281 Statusbar 169 steuern 328 Steuerung 326 stop 463 Stream Stable Builds 96 String 128, 262 Subjekte 194 Subklassen 198 Sun 23 Sun World 30 Sun-Workstation 23 super 220 Superklasse 198, 248, 313, 348 suspend 463 Swing 58 switch 495 Symbole 204 Symbolleiste 125 synchron 327 Syntax 30 Sysouts 455 T Tabelle 510, 556 Tabellenkalkulation 122 Tastenkürzel 123, 162 Team 160 Test 62, 309 Texteditor 162, 246 Textverarbeitung 59, 122 Thread 263, 368 throw 455 throwable 455 tostring 261 Treiber 542 try 369 try-catch 453 Try-catch-Block 147, 456 Turing-Maschine 26 Turing-Test 26 Tutorials 104 Typstrenge 340 U überladen 348, 350, 361 überschreiben 252, 348 UML 19, 243 UML-Diagramme 199 Umwandlung in eine Zahl 453 Undo 65 UNICODE 351 Unified Modeling Language 204 Unikat 194 Unterfenster 131 594
Index Unterklasse 233, 348 untersuchen 277 URL 19 usecases 205 V Variablen 255, 501 VBA-Routinen 47 Verbindung 544 Vererbung 195, 229, 337 Vererbungspfeil 230 Verknüpfungslinie 515 Versionen 95, 190 Verteilte Anwendungen 48 Verzeichnisse 136 Verzeichnisstruktur 203 Views 123 View-Verzeichnis 135 visibility 276 VM 19 void 282 Von-Neumann-Rechner 42 Vorgehensmodell 304 W wapperklassen 261 Wartung 477 Webseite 79 Werkbank 123 while-schleife 289, 495 Windows 122 Windows 2000 23 Workbench 123 Workspace 104 Wrapperklassen 35 X XML 25, 69 Z Zahlenformatausnahme 454 Zeichenkette 35 Zugriff 349 Zusicherungen 217 Zuständigkeitskette 478 Zuweisungen 502 595