Dies ist das erste deutschsprachige Lehrbuch, das die Lernumgebung BlueJ vollständig in seinen didaktischen Aufbau integriert. Es behandelt umfassend die wichtigsten Prinzipien und Grundlagen der objektorientierten Programmierung, indem es nach dem Ansatz "Objects First" vorgeht. Die dritte Auflage enthält neue Kapitel zum GUI-Entwurf und zum Testen mit JUnit sowie viele neue Übungsaufgaben zu allen Kapiteln. Diese Auflage wurde außerdem für die aktuelle Java-Version 5.0 überarbeitet und berücksichtigt die neuen Eigenschaften der Sprache wie generische Klassen und Aufzählungstypen. Auf der buchbegleitenden Website stehen ergänzende Lehr- und Lernmaterialien zur Verfügung. Zum Buch:
BlueJ ist eine neue Entwicklungsumgebung für die objektorientierte Programmierung mit Java. Eigens für die Lehre entwickelt ermöglicht BlueJ einfachen und schnellen Programmiererfolg, auch bei anspruchsvollen Konzepten. Besonderer Wert wurde auf Visualisierungs- und Interaktionstechniken gelegt, mit deren Hilfe z.B. Klassenstrukturen leicht verständlich und übersichtlich dargestellt werden können. Die Möglichkeiten wurden mit der aktuellen Version von BlueJ weiter verbessert und ausgebaut.
Das vorliegende Buch wurde von einem der Entwickler von BlueJ mitverfasst und integriert BlueJ vollständig in den didaktischen Aufbau. Der ausgezeichnete didaktische Aufbau des Buches garantiert schnellen Lernerfolg, indem z.B. anspruchsvolle Themen immer wieder aufgegriffen und weiter vertieft werden. Der Leser soll von Anfang an mit Objekten umgehen und mit den Methoden interagieren. Die Lernziele werden nicht nur theoretisch erklärt, sondern anhand von insgesamt 22 Projekten praxisnah veranschaulicht. Den Lehrenden wird mit diesem Buch ein Hilfsmittel zur Hand gegeben, das ihnen schnellen Lehrerfolg bei der traditionellerweise schwierigen Vermittlung der Konzepte von Objekten und Klassen ermöglicht.
Aus dem Inhalt:
Objekte und Klassen
Klassendefinitionen
Objektinteraktion
Objektsammlungen
Objektverhalten
Benutzen von Bibliotheksklassen
Vermeiden von Fehlern
Klassenentwurf
Bessere Struktur durch Vererbung
Mehr über Vererbung
Weitere Techniken zur Abstraktion
Entwicklung von GUIs
Fehlerbehandlung
Entwurf von Anwendungen
Über die Autoren:
DAVID J. BARNES unterrichtet Informatik an der University of Kent in Canterbury und ist Experte für objektorientierte Programmierung. MICHAEL KÖLLING ist einer der Entwickler von BlueJ. Er lehrt an der University of Southern Denmark in Odense.
Companion Website unter www.pearson-studium.de
Auf der Companion Website:
Abbildungen aus dem Buch
Folien
Weitere Lehr- und Lernmaterialien
Durchschnittliche Produktbewertung:
Anzahl der Produktbewertungen: 7
'>Klicken Sie hier und schreiben Sie Ihre Meinung zu diesem Produkt!
Super Ansatz zum Erlernen der Objectorientierung
von:
WagnerJ aus Würzburg
Datum:
14.9.2008
Ich arbeite als IT Leiter im Mittelstand. Wir müssen unsere Softwareentwicklung auf aktuelle Technik (Prozedural ==> Objektorientierung) umstellen. Für das Erlernen und Verstehen objektorientierter Konzepte mit Java ist das Buch auf der Basis BlueJ super. Ich habe ca. 15 andere Titel zum Thema Java (lernen), die ich mehr oder weniger gut finde. Keines ist hat ein ähnlich gutes Konzept... Für Umsteiger von prozeduralen Sprachen oder Neueinsteiger finde ich das Buch wirklich hervorragend geeignet. Kann und werde ich nur weiterempfehlen. Die negativen Ratings verstehe ich nicht. Ich kenne keine Alternative.... Auf der Seite 126 gibt es einen kleinen Fehler: statt: "private ArrayList notizen" sollte es "private ArrayList notizen" heissen (denke ich). Gibt es Training Center / Online Kurse auf Basis des Buches??? (Wäre für Firmen interessant).
Super Buch, gute Beispielprogrammme- für Anfänger ideal
von:
Dagmar Grünberger aus Wien
Datum:
21.6.2006
Das Buch ist ideal für Anfänger, die noch keine Ahnung von Java überhaupt haben, es fängt bei den Grundlagen an und arbeitet sich Stück für Stück vor. Es gibt zu jedem Kapitel gut Beispielprogramme, was einem das Verstehen des Codes erleichtert. Am Rand der Seiten sind oft Merkkästchen die einem helfen nicht den Überlick zu verlieren und sich auf die wirklich wensentlichen Dinge zu konzentrieren. Ebenfalls befindet sich am Ende der Kapitel eine Zusammenfassung, sollte man also etwas vergessen haben und man will nicht wieder ewig danach suchen, einfach die Zusammenfassungen durchsehen- hier wird man meist schnell fündig. Die erste Entwicklungsumgebung wird gleich mitgeliefert, BlueJ - erleichtert die Anfänge muss nicht für alles eigene main Methoden schreiben, einfach mit der rechten Maustaste "programmieren". Ich kann dieses Buch nur weiterempfehlen und jedem raten einfach die Übungen aus dem Buch zu machen, dann kann nichts schief gehen! Der Umstieg am Ende des Buches auf eine höhere Entwicklungsumgebung (Netbeans, Eclipse,...) war auch kein Problem! Wie gesagt meine Empfehlung bekommt das Buch! :)
Alle Produktbewertungen anzeigen...
Diese Auflage wurde für die aktuelle Java Version 5.0 mit komplett überarbeitet und berücksichtigt die verbesserten Möglichkeiten der Software in den Bereichen Fehlerbehebung und Testen. Es behandelt umfassend die wichtigsten Prinzipien und Grundlagen und enthält neue Kapitel zum GUI-Entwurf und zum Testen mit JUnit sowie viele neue Übungsaufgaben zu allen Kapiteln. Auf der Website stehen Lehr- und Lernmaterialien zu Verfügung.
BlueJ ist eine neue Entwicklungsumgebung für die objektorientierte Programmierung mit Java. Eigens für die Lehre entwickelt ermöglicht BlueJ einfachen und schnellen Programmiererfolg, auch bei anspruchsvollen Konzepten. Besonderer Wert wurde auf Visualisierungs- und Interaktionstechniken gelegt, mit deren Hilfe z.B. Klassenstrukturen leicht verständlich und übersichtlich dargestellt werden können. Die Möglichkeiten wurden mit der aktuellen Version von BlueJ weiter verbessert und ausgebaut.
Das vorliegende Buch wurde von einem der Entwickler von BlueJ mitverfasst und integriert BlueJ vollständig in den didaktischen Aufbau. Der ausgezeichnete didaktische Aufbau des Buches garantiert schnellen Lernerfolg, indem z.B. anspruchsvolle Themen immer wieder aufgegriffen und weiter vertieft werden. Der Leser soll von Anfang an mit Objekten umgehen und mit den Methoden interagieren. Die Lernziele werden nicht nur theoretisch erklärt, sondern anhand von insgesamt 22 Projekten praxisnah veranschaulicht. Den Lehrenden wird mit diesem Buch ein Hilfsmittel zur Hand gegeben, das ihnen schnellen Lehrerfolg bei der traditionellerweise schwierigen Vermittlung der Konzepte von Objekten und Klassen ermöglicht.
Inhaltsverzeichnis:
Objekte und Klassen
Klassendefinitionen
Objektinteraktion
Objektsammlungen
Objektverhalten
Benutzen von Bibliotheksklassen
Vermeiden von Fehlern
Klassenentwurf
Bessere Struktur durch Vererbung
Mehr über Vererbung
Weitere Techniken zur Abstraktion
Entwicklung von GUIs
Fehlerbehandlung
Entwurf von Anwendungen
Vorwort:
Es war eine schmerzhafte Erfahrung für mich, meine Tochter Kate und die anderen Kinder in ihrer Mittelstufenklasse mit einem Java-Kurs kämpfen zu sehen, in dem eine kommerzielle Entwicklungsumgebung benutzt wurde. Die Leistungsfähigkeit des Werkzeugs hat die Komplexität des Lernprozesses erheblich erhöht. Ich wünschte, ich hätte früher begriffen, was da passierte. Leider konnte ich mit dem Lehrer erst über das Problem sprechen, als es schon zu spät war. Dies ist eine Situation, für die BlueJ ideal geeignet ist.
BlueJ ist eine interaktive Entwicklungsumgebung mit einem Auftrag: Sie wurde speziell für Studenten entwickelt, die Programmieren lernen. Sie wurde entworfen von Dozenten, die seit vielen Jahren Tag für Tag Objektorientierung lehren. Es war erfrischend, mit den Entwicklern von BlueJ zu sprechen: Sie haben eine sehr klare Vorstellung von ihrem Ziel. Unsere Diskussionen handelten meist eher davon, welche Dinge weggelassen werden sollten, und weniger davon, welche noch hinzugenommen werden sollten. BlueJ ist sehr klar strukturiert und ausgesprochen zielgerichtet.
Aber dies ist kein Buch über BlueJ. Es geht ums Programmieren.
In Java.
In den letzten Jahren hat Java in der Programmierausbildung eine immer größere Bedeutung bekommen. Dafür gibt es mehrere Gründe. Einer ist, dass Java viele Eigenschaften besitzt, die die Sprache für die Lehre geeignet machen: eine relativ klare Definition; ausführliche Prüfungen zur Übersetzungszeit durch den Compiler, die den Studenten frühes Feedback bei Problemen geben; und ein sehr robustes Speichermodell, das viele "mysteriöse" Fehler von vornherein ausschaltet, die durch das Überschreiten von Objektgrenzen oder Typregeln auftreten können. Ein weiterer Grund ist, dass Java inzwischen kommerziell sehr interessant geworden ist.
Dieses Buch geht direkt das am schwierigsten zu vermittelnde Konzept an: Objekte. Es führt die Studenten von den allerersten Schritten hin zu sehr anspruchsvollen Konzepten.
Und es löst eines der schwierigsten Probleme für Lehrbücher über Programmierung: Es thematisiert explizit auch das Schreiben und Ausführen von Programmen. Die meisten Lehrbücher gehen über diese Punkte stillschweigend hinweg oder streifen sie nur kurz und überlassen es dem Dozenten, diese Aspekte zu klären. Dieser wird somit mit dem Problem allein gelassen, das zu vermittelnde Material in Beziehung zu setzen zu den Schritten, die zur Lösung der Übungen gemacht werden müssen. Stattdessen setzt dieses Buch den Einsatz von BlueJ voraus und kann deshalb das Verstehen der Konzepte auf die Mechanismen, die ihre Erforschung ermöglichen, abstimmen.
Ich wünschte, für meine Tochter hätte BlueJ schon im letzten Jahr zur Verfügung gestanden. Vielleicht im nächsten Jahr...
Vorwort an Kursleiter
Dieses Buch ist eine Einführung in die objektorientierte Programmierung für Programmieranfänger. Der Fokus dieses Buches liegt auf allgemeinen objektorientierten Programmierkonzepten aus der Sicht der Softwaretechnik.
Während die ersten Kapitel auf Studenten ohne jegliche Programmiererfahrung abzielen, sind spätere Kapitel auch für fortgeschrittene oder professionelle Programmierer interessant. Insbesondere sollten auch Programmierer von diesem Buch profitieren können, die Erfahrung in einer nicht objektorientierten Sprache haben und ihre Fähigkeiten in Richtung Objektorientierung ausbauen möchten.
Wir verwenden das gesamte Buch hindurch zwei Werkzeuge, um die vorgestellten Konzepte in die Praxis umzusetzen: die Programmiersprache Java und die Java-Entwicklungsumgebung BlueJ.
Java
Zwei Gründe haben zur Wahl der Sprache Java geführt: ihr Sprachentwurf und ihre Popularität. Die Programmiersprache Java selbst bietet eine sehr saubere Umsetzung der meisten wichtigen objektorientierten Konzepte und eignet sich gut als einführende Sprache. Ihre Popularität garantiert einen enormen Vorrat an unterstützendem Material.
Aul jedem Lehrgebiet ist eine große Menge unterschiedlicher Quellen sowohl für Lehrende als auch für Studenten hilfreich. Für Java gibt es zahllose Bücher, Beschreibungen, Übungen, Compiler, Entwicklungsumgebungen und Fragenkataloge in den unterschiedlichsten Arten und Stilen. Viele sind online verfügbar und viele sind kostenlos. Die große Menge und die gute Qualität an Zusatzmaterial machen Java zu einer exzellenten Wahl als Einführung in die objektorientierte Programmierung.
Wenn so viel Java-Material bereits verfügbar ist, gibt es dann überhaupt noch etwas Neues dazu zu sagen? Wir denken ja, und das zweite Werkzeug ist einer der Gründe dafür...
BlueJ
Das zweite Werkzeug, BlueJ, erfordert etwas mehr Erläuterung. Dieses Buch ist einzigartig in seiner kompletten Integration der BlueJ-Umgebung.
BlueJ ist eine Java-Entwicklungsumgebung, die an der University of Southern Denmark, der Deakin University, Australien, und der University of Kent in Canterbury, England, ausdrücklich mit dem Ziel entwickelt wurde, für die Einführung in die objektorientierte Programmierung zu dienen. Sie eignet sich aus mehreren Gründen für diese Lehrsituation besser als andere Umgebungen:
• Die Benutzungsschnittstelle ist sehr viel einfacher. Programmieranfänger können die BlueJ-Umgebung typischerweise bereits nach 20 Minuten Einführung kompetent benutzen. Von diesem Zeitpunkt an kann sich die Darstellung auf die wichtigen Konzepte konzentrieren - Objektorientierung und Java -, statt wertvolle Zeit mit der Diskussion über Umgebungen, Dateisysteme, Klassenpfade, DOS-Kommandos oder DLL-Konflikte zu vergeuden.
• BlueJ bietet wichtige Lehrwerkzeuge, die in anderen Umgebungen nicht zur Verfügung stehen. Eines davon ist die Visualisierung der Klassenstruktur. BlueJ zeigt automatisch ein UML-ähnliches Diagramm der Klassen und Beziehungen in einem Projekt. Die Visualisierung dieser wichtigen Konzepte ist eine große Hilfe für Lehrende und Studierende. Es ist nicht leicht, das Konzept von Objekten zu verstehen, wenn auf dem Bildschirm ausschließlich Programmtext zu sehen ist! Die Notation der Diagramme ist eine einfache Untermenge der UML, zugeschnitten auf den Bedarf von Programmieranfängern. Dies macht es leicht verständlich, erlaubt aber gleichzeitig die Migration auf die volle UML in späteren Kursen.
• Eine der wichtigsten Stärken der BlueJ-Umgebung ist die Möglichkeit für den Benutzer, direkt Objekte von beliebigen Klassen erzeugen und die Methoden dieser Objekte aufrufen zu können. Dies gibt die Möglichkeit zum unmittelbaren Umgang mit Objekten ohne großen Aufwand durch die Umgebung. Studenten bekommen förmlich ein "Gefühl" dafür, wie Objekte erzeugt, Methoden aufgerufen, Parameter übergeben und Ergebnisse zurückgeliefert werden. Sie können eine Methode ausprobieren, unmittelbar nachdem sie sie geschrieben haben, ohne Testklassen schreiben zu müssen. Diese Möglichkeit ist eine unschätzbare Hilfe beim Verstehen der zugrunde liegenden Konzepte und Sprachdetails.
BlueJ ist eine vollständige Java-Entwicklungsumgebung. Es ist keine zurechtgestutzte, vereinfachte Version von Java für die Lehre. Sie läuft auf dem Java Development Kit von Sun Microsystems und benutzt den Standardcompiler und die zugehörige virtuelle Maschine. Dies garantiert, dass sie immer mit der offiziellen und aktuellsten Java-Spezifikation übereinstimmt.
Die Autoren dieses Buches haben mehrere Jahre Lehrerfahrung mit der BlueJ-Umgebung (und viele Jahre mehr aus der Zeit vor BlueJ). Wir haben beide festgestellt, dass die Verwendung von BlueJ bei den Studenten in unseren Kursen zu größerem Engagement, besserem Verständnis und gesteigerter Aktivität geführt hat. Einer der Autoren dieses Buches ist auch ein Entwickler des BlueJ-Systems.
Objekte wirklich zuerst
Unsere Wahl ist unter anderem deshalb auf BlueJ gefallen, weil mit dieser Umgebung wirklich die wichtigen Konzepte zuerst vorgestellt werden können. "Objects First" war lange Zeit der Schlachtruf vieler Buchautoren und Lehrer. Leider macht die Sprache Java die Umsetzung dieses hehren Ansatzes nicht leicht. Zahlreiche Hürden in Syntax und anderen Details müssen überwunden werden, bevor die ersten "lebenden" Objekte sichtbar werden. Der minimale Ablauf zum Erzeugen und Aufrufen eines Objekts in Java schließt typischerweise folgende Schritte ein:
• das Schreiben einer Klasse
• das Schreiben einer main-Methode unter Benutzung der Konzepte von statischen Methoden, Parametern und Arrays in der Signatur
• eine Anweisung zur Objekterzeugung (mit new)
• eine Zuweisung an eine Variable
• eine Variablendeklaration, inklusive Typ
• einen Methodenaufruf mit der Punktnotation
• möglicherweise eine Parameterliste
Aus diesem Grund müssen Lehrbücher entweder
• diese Liste zuerst durcharbeiten und können deshalb erst einige Kapitel später auf Objekte zu sprechen kommen oder
• ein Programm im Stil von "Hello, World" mit einer einzelnen statischen Methode als erstes Beispiel wählen und damit gar keine Objekte erzeugen.
Mit BlueJ ist das kein Problem. Ein Student kann als erste Aktivität ein Objekt erzeugen und seine Methoden aufrufen! Weil Benutzer Objekte direkt erzeugen und manipulieren können, können Konzepte wie Klassen, Objekte, Methoden und Parameter ohne weiteres direkt diskutiert werden, bevor die erste Zeile Java-Quelltext betrachtet werden muss. Statt an dieser Stelle weitere Details zu beschreiben, empfehlen wir dem neugierigen Leser einen schnellen Blick in Kapitel 1 - dort werden die hier gemachten Aussagen schnell deutlich.
Iteratives Vorgehen
Ein weiterer wichtiger Aspekt an diesem Buch ist das iterative Vorgehen. Ein in Kreisen der Informatikpädagogik bekanntes Lehrmuster (aus dem "pedagogical patterns project") besagt, dass wichtige Konzepte früh und häufig geschult werden sollten. 1 Es ist eine große Versuchung für den Autor eines Lehrbuches, bei der Vorstellung eines Konzepts alle seine Aspekte darzustellen. Beispielsweise ist es üblich, bei der Einführung des Typkonzepts eine vollständige Liste der vordefinierten Datentypen anzugeben oder bei der Vorstellung von Schleifen alle Schleifenarten zu diskutieren.
Diese beiden Ansätze stehen im Konflikt miteinander: Wir können uns nicht einerseits auf die wichtigen Konzepte konzentrieren und gleichzeitig Vollständigkeit fordern. Unsere Erfahrung mit Lehrbüchern ist, dass durch zu viele Details zu Anfang die wichtigen Konzepte untergehen und damit schwerer erfassbar werden.
In diesem Buch werden wir wichtige Punkte immer wieder ansprechen, sowohl innerhalb eines Kapitels als auch über die Kapitel hinweg. Konzepte werden üblicherweise so eingeführt, dass sie das vorliegende Problem lösen. Sie werden dann später aus einem anderen Blickwinkel erneut betrachtet, so dass das Verständnis in den späteren Kapiteln immer weiter vertieft wird. Dieser Ansatz erleichtert auch ein Verständnis der Konzepte, die gegenseitig voneinander abhängen.
Einige Dozenten sind möglicherweise mit einem solchen iterativen Vorgehen nicht vertraut. Beim Blick auf die ersten Kapitel könnten Dozenten, die mit einer eher sequentiellen Vorgehensweise vertraut sind, über die Fülle der angesprochenen Konzepte überrascht sein. Sie scheint eine sehr steile Lernkurve zu implizieren.
Aber die Geschichte endet nicht an dieser Stelle. Von den Studenten wird nicht erwartet, dass sie alle Details dieser Konzepte unmittelbar verstehen. Stattdessen werden die fundamentalen Konzepte im Laufe des Buches immer wieder angesprochen, so dass die Studenten ein immer besseres Verständnis bekommen. Da sich ihr Wissensstand während der Beschäftigung mit diesen Themen stetig verändert, können sie durch die Wiederholung wichtiger Konzepte ein tieferes Verständnis erlangen.
Wir haben dieses Vorgehen viele Male mit Studenten erprobt. Es scheint oft, dass die Studenten mit diesem Vorgehen weniger Probleme haben als die Lehrenden. Und bedenken Sie: Eine steile Lernkurve ist nicht problematisch, solange Sie sicherstellen, dass Ihre Studenten den Anstieg schaffen können!
Keine komplette Abdeckung der Sprache Java
Verbunden mit unserem iterativen Vorgehen ist die Entscheidung, dass wir nicht versuchen wollen, die Sprache Java in diesem Buch komplett zu behandeln.
Der Fokus dieses Buches liegt auf der Vermittlung allgemeiner objektorientierter Programmierprinzipien, nicht von Details der Sprache Java. Studenten, die mit diesem Buch Programmieren lernen, können leicht 30 bis 40 Jahre als professionelle Softwareentwickler arbeiten - da ist es eine ziemlich sichere Wette, dass der Großteil ihrer Arbeit nicht in Java stattfinden wird. Natürlich sollte jedes Lehrbuch den Anspruch haben, mehr Fundamentales zu vermitteln als nur die Programmiersprache, die gerade in Mode ist.
Auf der anderen Seite sind viele Details von Java wichtig, um die praktischen Aufgaben erledigen zu können. In diesem Buch besprechen wir die Java-Konstrukte so detailliert wie notwendig, um die Konzepte verstehen und die praktischen Aufgaben lösen zu können. Einige Java-spezifische Konstrukte hingegen wurden bewusst ausgelassen.
Uns ist klar, dass einige Dozenten Themen behandeln werden, die wir nicht im Detail besprechen. Das ist erwartet und auch notwendig. Statt zu versuchen, alle Themen selbst abzudecken (und damit den Umfang dieses Buches auf 1500 Seiten aufzublähen), versuchen wir "Aufhänger" anzubieten. Solche Aufhänger sind Verweise, häufig in Form einer Frage, die ein Thema anspricht und einen Hinweis auf einen Anhang oder externes Material gibt. So wird sichergestellt, dass bestimmte Themen zum passenden Zeitpunkt angesprochen werden, und es bleibt dem Leser oder dem Lehrenden überlassen, wie weit dem Verweis gefolgt werden sollte. Die Aufhänger dienen als Erinnerung an ein Thema und als Platzhalter, an denen eine vertiefende Diskussion vorgenommen werden kann.
Lehrende können dem von uns vorgegebenen Pfad im Buch folgen oder an entsprechenden Stellen in Seitenpfade verzweigen.
In den Kapiteln sind häufig auch Fragen enthalten, die verwandte Themen ansprechen, ohne dass diese im Buch diskutiert werden. Wir empfehlen Lehrenden, einige dieser Fragen im Kurs zu besprechen, bzw. den Studierenden, diese Übungsaufgaben zu bearbeiten.
Projektorientiertes Vorgehen
Die Einführung von neuen Themen in diesem Buch orientiert sich an Projekten. Das Buch diskutiert zahlreiche Programmierprojekte und bietet viele Übungen. Statt ein neues Konzept vorzustellen und es dann anhand einer Übungsaufgabe zur Lösung anwenden zu lassen, stellen wir zuerst ein Ziel auf und formulieren eine Aufgabe. Beim Analysieren der Aufgabe stellen wir fest, welche Lösungen wir benötigen. Als Konsequenz werden neue Konstrukte dann vorgestellt, wenn sie uns bei der Lösung einer Aufgabenstellung unterstützen können.
Die ersten Kapitel enthalten mindestens zwei Diskussionsbeispiele. Das sind Projekte, die detailliert besprochen werden, um die wichtigen Konzepte in jedem Kapitel zu illustrieren. Die Verwendung zweier unterschiedlicher Beispiele unterstützt das iterative Vorgehen: Jedes Konzept wird nach seiner Einführung noch einmal in einem anderen Kontext wiederholt.
Beim Entwurf dieses Buches haben wir versucht, eine große Anzahl und Bandbreite an Beispielprojekten zu finden. Dies weckt hoffentlich die Neugierde des Lesers, illustriert aber auch die Bandbreite der Bereiche, in denen die Konzepte angewendet werden können. Das Finden guter Projekte ist nicht einfach. Wir hoffen, dass unsere Projekte den Lehrenden gute Startpunkte liefern und viele Ideen für vielfältige und spannende Aufgaben bieten.
Die Implementierung aller Projekte wurde sehr sorgfältig vorgenommen, so dass beim Lesen des Quelltextes auch viele Nebenaspekte betrachtet werden können. Wir glauben sehr stark an die Vorteile des Lernens durch Lesen und des Nachahmens guter Beispiele. Damit dies funktioniert, muss allerdings sichergestellt sein, dass die Beispiele, die die Studenten lesen, gut und nachahmenswert geschrieben sind. Wir haben dies versucht.
Alle Projekte sind als offene Problemstellungen entworfen. Auch wenn eine oder mehrere Versionen jedes Problems ausführlich im Buch dargestellt werden, sind alle Projekte so entworfen, dass zusätzliche Erweiterungen und Verbesserungen in Studentenprojekten vorgenommen werden können. Der komplette Quelltext aller Projekte ist beigefügt. Eine Liste der Projekte, die in diesem Buch diskutiert werden, ist auf Seite 23/24 zu finden.
Konzepte statt Sprachkonstrukte
Ein weiterer Aspekt, der dieses Buch von vielen anderen unterscheidet, ist die Orientierung an fundamentalen Aufgaben der Softwareentwicklung und nicht notwendigerweise an spezifischen Java-Konstrukten. Ein Hinweis darauf sind die Kapitelüberschriften. In diesem Buch werden Sie keine klassischen Kapitelüberschriften wie "Primitive Datentypen" oder "Kontrollstrukturen" finden. Die Strukturierung nach fundamentalen Entwicklungsaufgaben ermöglicht uns eine sehr viel allgemeinere Einführung, die sich nicht an den Besonderheiten einer speziellen Programmiersprache orientiert. Wir glauben auch, dass es den Studenten leichter fällt, der Motivation der jeweiligen Einleitung zu folgen und die Lektüre dadurch interessanter wird.
Ein Resultat dieses Vorgehens ist, dass sich dieses Buch weniger als eine Referenz eignet. Einführende Lehrbücher und Referenzbücher haben unterschiedliche und teilweise konkurrierende Ziele. Bis zu einem gewissen Grad kann ein Lehrbuch versuchen, beides zu bieten, aber irgendwann muss ein Kompromiss eingegangen werden. Unser Buch ist deutlich als ein Lehrbuch entworfen, und immer, wenn es zu einem Konflikt kam, haben wir den Stil eines Lehrbuches dem eines Referenzbuches vorgezogen.
Dennoch haben wir Unterstützung für die Verwendung als Referenzbuch geboten, indem wir die Java-Konstrukte, die in den einzelnen Kapiteln angesprochen werden, in der Einführung jedes Kapitels aufgeführt haben.
Übersicht der Kapitel
Kapitel 1 beschäftigt sich mit den fundamentalen Konzepten der Objektorientierung: Objekte, Klassen und Methoden. Es liefert eine solide, pragmatische Einführung in diese Konzepte, ohne auf Details der Java-Syntax einzugehen. Es wird auch ein erster Blick auf Quelltext geworfen. Zwei Projekte beschäftigen sich mit grafischen Figuren, die interaktiv gezeichnet werden können, ein weiteres Projekt behandelt das Anmelden von Studenten für Laborkurse.
Kapitel 2 öffnet Klassendefinitionen und untersucht, wie mit Quelltext das Verhalten von Objekten definiert wird. Wir diskutieren, wie Datenfelder definiert und Methoden implementiert werden. Hier führen wir auch die ersten Anweisungen ein. Das Hauptbeispiel ist die Implementierung eines Ticketautomaten. Wir werfen auch einen erneuten Blick auf das Beispiel mit den Laborkursen aus Kapitel 1, um es genauer zu untersuchen.
Kapitel 3 geht einen Schritt weiter, indem die Interaktion zwischen mehreren Objekten diskutiert wird. Wir sehen, wie Objekte zusammenarbeiten können, indem sie gegenseitig ihre Methoden aufrufen, um eine gemeinsame Aufgabe zu lösen. Wir diskutieren auch, wie ein Objekt weitere Objekte erzeugen kann. Die Anzeige einer digitalen Uhr wird diskutiert, die zwei Objekte zur Anzeige von Stunden und Minuten benutzt. Als zweites größeres Beispiel untersuchen wir die Simulation eines E-Mail-Systems, in dem Nachrichten zwischen E-Mail-Clients verschickt werden können.
In Kapitel 4 fahren wir fort mit der Konstruktion größerer Objektstrukturen. Vor allem beginnen wir hier, Sammlungen von Objekten zu benutzen. Wir betrachten ein elektronisches Notizbuch und ein Auktionssystem, um Sammlungen einzuführen. Gleichzeitig diskutieren wir das Iterieren über Sammlungen und werfen einen ersten Blick auf Schleifen. Die erste Sammlung, die benutzt wird, ist die ArrayList. Im zweiten Teil des Kapitels untersuchen wir Arrays als eine spezielle Form von Sammlung und die for-Schleife als eine weitere Schleifenform. Als Beispiel für die Benutzung von Arrays zeigen wir, wie die Auswertung einer Logdatei für Webzugriffe implementiert werden kann.
Kapitel 5 behandelt Bibliotheken und Schnittstellen. Wir stellen die Standardbibliothek von Java vor und diskutieren einige wichtige Bibliotheksklassen. Am wichtigsten ist hier die Darstellung, wie die Dokumentation der Bibliothek gelesen und verstanden werden kann. Es wird diskutiert, wie wichtig das Schreiben von Dokumentationen für Softwareentwicklungsprojekte ist, und schließlich üben wir das Erstellen einer angemessenen Dokumentation für unsere eigenen Klassen. Random, Set und Map sind Beispiele von Klassen, die wir in diesem Kapitel untersuchen. Wir implementieren ein Eliza-ähnliches Dialogsystem und eine grafische Simulation von springenden Bällen, um diese Klassen anzuwenden.
Kapitel 6 beschäftigt sich mit Konzepten, mit denen korrekte, verständliche und wartbare Klassen geschrieben werden können. Es behandelt Aspekte, die vom Schreiben verständlichen Quelltextes - einschließlich Stil und Kommentierung - bis hin zum Testen und zur Fehlerbeseitigung reichen. Es werden Teststrategien vorgestellt und einige Methoden zur Fehlerbeseitigung ausführlich diskutiert. Wir benutzen das Beispiel eines Terminkalenders für Verabredungen und die Implementierung eines Taschenrechners für die Diskussion dieser Konzepte.
In Kapitel 7 diskutieren wir etwas formaler die Probleme beim Aufteilen eines Problems in geeignete Klassen für die Implementierung. Wir stellen Konzepte für guten Klassenentwurf vor, einschließlich Entwurf nach Verantwortlichkeiten, Kopplung, Kohäsion und Refactoring. Für diese Diskussion verwenden wir ein interaktives, textbasiertes Adventure-Game (Die Welt von Zuul). Wir verbessern in mehreren Iterationen den internen Entwurf des Spiels und erweitern seine Funktionalität, bis wir schließlich mit einer umfangreichen Liste von Erweiterungsmöglichkeiten Anregungen für weiterführende Studentenprojekte geben.
Kapitel 8 und 9 führen Vererbung, Polymorphie und damit verbundene Konzepte ein. Wir untersuchen eine Datenbank für CDs und Videos, um die Konzepte darzustellen. Fragen der Quelltextvererbung, des Subtypings, der polymorphen Methodenaufrufe und des Überschreibens von Methoden werden ausführlich diskutiert.
In Kapitel 10 implementieren wir eine Jäger-Beute-Simulation. Sie dient als Ausgangspunkt für die Diskussion weiterer Abstraktionsmechanismen, die auf Vererbung aufsetzen, insbesondere Interfaces und abstrakte Klassen.
Kapitel 11 behandelt zwei neue Beispiele: einen Bildbetrachter und einen Sound-Player. Anhand dieser Beispiele wird dargestellt, wie grafische Benutzungsoberflächen (GUIs) konstruiert werden.
Kapitel 12 beschäftigt sich dann mit der schwierigen Frage, wie mit Fehlern zur Laufzeit umgegangen werden soll. Einige Probleme und Lösungen werden diskutiert, und der Exception-Mechanismus von Java wird ausführlich vorgestellt. Wir erweitern und verbessern eine Adressbuch-Anwendung, um diese Konzepte darzustellen.
Kapitel 13 macht einen Schritt zurück, um ausführlicher die nächste Abstraktionsstufe zu beleuchten: wie man zu einem vage beschriebenen Problem passende Klassen und Methoden findet. In den vorigen Kapiteln haben wir angenommen, dass große Teile der Anwendung bereits existieren und wir Verbesserungen vornehmen. Hier untersuchen wir den Start "von der grünen Wiese". Dies schließt eine detaillierte Darstellung von Vorgehensweisen ein, wie wir die passenden Klassen für eine Anwendung finden, wie diese interagieren und wie die Zuständigkeiten verteilt sein sollten. Wir benutzen CRC-Karten als Herangehensweise, um ein Kinobuchungssystem zu entwerfen.
In Kapitel 14 versuchen wir alles bis dahin Dargestellte zusammenzuführen. Es enthält eine komplette Fallstudie, die mit einem Anwendungsentwurf beginnt und über den Entwurf von Klassenschnittstellen und die Diskussion vieler wichtiger funktionaler und nichtfunktionaler Aspekte bis hin zu Details der Implementierung reicht. Themen aus früheren Kapiteln (wie Zuverlässigkeit, Datenstrukturen, Klassenentwurf, Testen und Erweiterbarkeit) werden erneut in einem neuen Kontext dargestellt.
Dritte Auflage
Vor Ihnen liegt die Übersetzung der dritten Auflage dieses Buches. Einige Dinge haben sich gegenüber der Übersetzung der ersten englischen Auflage verändert: In der zweiten englischen Auflage wurden JUnit und ein Kapitel über grafische Benutzungsoberflächen hinzu genommen. In der dritten Auflage ist die auffälligste Änderung die Verwendung von Java 5 als Programmiersprache. Java 5 hat neue Sprachkonstrukte eingeführt, wie beispielsweise generische Klassen und Aufzählungstypen, und praktisch alle Projekte zu diesem Buch wurden angepasst, um von den neuen Konstrukten Gebrauch zu machen. Entsprechend wurden natürlich auch die erläuternden Texte im Buch überarbeitet. Insgesamt sind jedoch das Konzept und der Stil dieses Buches unverändert geblieben.
Das Feedback von Lesern der vorigen Auflagen war überwältigend positiv, und viele Menschen haben bei der Verbesserung dieses Buches geholfen, indem sie uns Kommentare und Verbesserungsvorschläge geschickt, Fehler gefunden und uns über diese informiert, Zusatzmaterial zur Website des Buches geliefert, an den Diskussionen auf der Mailing-Liste teilgenommen oder das Buch in andere Sprachen übersetzt haben. Insgesamt scheint das Buch jedoch zu "funktionieren". Deshalb versucht auch diese dritte Auflage eher Dinge zu verbessern, anstatt eine radikale Änderung vorzunehmen.
Zusatzmaterial
Alle Projekte, die für die Diskussionen und Übungen in diesem Buch verwendet werden, stehen auf der beiliegenden CD zur Verfügung. Die CD enthält außerdem ein Java Development Environment (JDK) und BlueJ für verschiedene Betriebssysteme.
Die Webseite zur Unterstützung dieses Buches ist zu finden unter http://www.bluej.org/objects-first oder http://www.pearson-studium.de Unter der letztgenannten Adresse steht Ihnen unsere Companion Website (CWS) zur Verfügung, der kostenlose Online-Service für unsere Leser. Sie enthält, getrennt für Dozenten und Studenten, zahlreiche attraktive, den Buchinhalt ergänzende und erweiternde Inhalte. Folgen Sie einfach der Benutzerführung, um sich anzumelden.
Auf diesen Seiten können Updates zu den Beispielen gefunden werden und es wird weiteres Zusatzmaterial zur Verfügung gestellt. Beispielsweise steht dort auch der Style Guide, der für die Beispiele in diesem Buch eingehalten wurde, in elektronischer Form zur Verfügung, damit Kursleiter ihn für ihre eigenen Zwecke anpassen können.
Diskussionslisten
Die Autoren pflegen zwei aktive Email-Diskussionslisten (in englischer Sprache), um den Austausch von Ideen und Hilfestellungen zwischen den Lesern dieses Buches und anderen BlueJ-Benutzern zu erleichtern.
Die erste Liste, bluej-discuss, ist öffentlich (jeder kann sich eintragen) und das zugehörige Archiv ist frei zugänglich. Interessierte können unter folgender Adresse der Liste beitreten oder das Archiv durchsuchen:
http://lists.bluej.org/mailman/listinfo/bluej-discuss
Die zweite Liste, objects-first, ist eine geschlossene Liste ausschließlich für Kursleiter. Auf ihr können Lösungen, Lehrtipps, Prüfungen und andere Lehrthemen diskutiert werden. Informationen über die Möglichkeit, dieser Liste beizutreten, finden sich auf der Website zum Buch (siehe oben).
Vorwort des Übersetzers
Ich mag BlueJ. Das kann daran liegen, dass ich selbst einige Zeit während eines Stipendienaufenthaltes 1999/2000 in Australien an der Monash University an BlueJ mitarbeiten durfte. Viel eher aber liegt es daran, dass BlueJ die Kernkonzepte der Objektorientierung so schlicht und elegant herausschält, dass ein intuitives Verständnis sich fast von selbst ergibt. So war ich schnell bereit, die Übersetzung dieses Buchs zu übernehmen.
Der Mut, Dinge wegzulassen, der BlueJ so erfolgreich gemacht hat, setzt sich in diesem Buch fort, denn der Sprachumfang von Java wird nicht vollständig abgedeckt. Stattdessen schafft das Buch Inseln in der "Programmierlandschaft". Mit dem gründlichen Fundament dieser Inseln wird das Erforschen der restlichen Umgebung zu einem Vergnügen. Diese Orientierung am exemplarischen Lernen spricht mich sehr an. Der Text "fließt" in weiten Teilen so angenehm, dass das Selbststudium zur Freude werden sollte. Mein persönlicher Favorit ist Kapitel 7, in dem, ausgehend von einem schlechten Entwurf, die Begriffe Kopplung, Kohäsion, Kapselung und Refactoring sehr anschaulich eingeführt und durch schrittweise Verbesserungen am Entwurf verdeutlicht werden.
Für die deutsche Ausgabe habe ich alle BlueJ-Projekte des Begleitmaterials ebenfalls übersetzt. Das Übersetzen von Quelltexten ist eine gefährliche Sache. Möglicherweise wird mancher mit einigen der von mir gewählten Bezeichner nicht so glücklich sein. Methodennamen, die im Englischen noch angenehm flexibel interpretiert werden können (printMessage kann als Imperativ verstanden werden, also gibNachrichtAus, oder als Infinitiv, also nachrichtAusgeben), werden durch die Wahl einer Übersetzung häufig einseitig festgelegt oder wirken kantig. Zusätzlich ist der Übergang in der Benutzung eigener Klassen hin zu Bibliotheksklassen gesprenkelt mit hybriden Konstrukten wie adressen.get(schluessel). Ich bin allerdings überzeugt, dass eine Übersetzung der Projekte zu diesem Buch unumgänglich war. Die Stärke der Objektorientierung ist, dass sie fachliche Konzepte des zu modellierenden Ausschnitts der Realität unmittelbar in Klassen abbilden kann. Ausgehend von deutschen Problembeschreibungen hätte ein Wechsel zu englischen Bezeichnern, egal an welchem Punkt, sonst immer zu einem Bruch geführt.
Mein Dank geht an Christiane Floyd und Heinz Züllighoven, die es mir leicht gemacht haben, mich auf diese Übersetzung konzentrieren zu können, und an meine Kolleginnen und Kollegen im Arbeitsbereich Softwaretechnik der Universität Hamburg, die mich in meinem Vorhaben bestärkt haben. Arnd Müller-Judith, Helge Sturmfels, Isabel Schneider, Rainer Fuchs und Marc-Boris Rode vom Verlag Pearson Studium haben den Prozess angestoßen bzw. auf angenehme Weise fortgeführt. Das Fachlektorat mit Michael Kölling war trotz des hohen Zeitdrucks eine Freude. Michael hat die Übersetzung gefallen, sie ist somit durch einen der Autoren autorisiert.
Fragen zur deutschen Ausgabe können unter schmolit@informatik.uni-hamburg.de an mich gerichtet werden.
Axel Schmolitzky
Hamburg, im März 2006
BlueJ ist eine neue Entwicklungsumgebung für die objektorientierte Programmierung mit Java. Eigens für die Lehre entwickelt ermöglicht BlueJ einfachen und schnellen Programmiererfolg, auch bei anspruchsvollen Konzepten. Besonderer Wert wurde auf Visualisierungs- und Interaktionstechniken gelegt, mit deren Hilfe z.B. Klassenstrukturen leicht verständlich und übersichtlich dargestellt werden können. Die Möglichkeiten wurden mit der aktuellen Version von BlueJ weiter verbessert und ausgebaut.
Das vorliegende Buch wurde von einem der Entwickler von BlueJ mitverfasst und integriert BlueJ vollständig in den didaktischen Aufbau. Der ausgezeichnete didaktische Aufbau des Buches garantiert schnellen Lernerfolg, indem z.B. anspruchsvolle Themen immer wieder aufgegriffen und weiter vertieft werden. Der Leser soll von Anfang an mit Objekten umgehen und mit den Methoden interagieren. Die Lernziele werden nicht nur theoretisch erklärt, sondern anhand von insgesamt 22 Projekten praxisnah veranschaulicht. Den Lehrenden wird mit diesem Buch ein Hilfsmittel zur Hand gegeben, das ihnen schnellen Lehrerfolg bei der traditionellerweise schwierigen Vermittlung der Konzepte von Objekten und Klassen ermöglicht.
Aus dem Inhalt:
Objekte und Klassen
Klassendefinitionen
Objektinteraktion
Objektsammlungen
Objektverhalten
Benutzen von Bibliotheksklassen
Vermeiden von Fehlern
Klassenentwurf
Bessere Struktur durch Vererbung
Mehr über Vererbung
Weitere Techniken zur Abstraktion
Entwicklung von GUIs
Fehlerbehandlung
Entwurf von Anwendungen
Über die Autoren:
DAVID J. BARNES unterrichtet Informatik an der University of Kent in Canterbury und ist Experte für objektorientierte Programmierung. MICHAEL KÖLLING ist einer der Entwickler von BlueJ. Er lehrt an der University of Southern Denmark in Odense.
Companion Website unter www.pearson-studium.de
Auf der Companion Website:
Abbildungen aus dem Buch
Folien
Weitere Lehr- und Lernmaterialien
Durchschnittliche Produktbewertung:
Anzahl der Produktbewertungen: 7
'>Klicken Sie hier und schreiben Sie Ihre Meinung zu diesem Produkt!
Super Ansatz zum Erlernen der Objectorientierung
von:
WagnerJ aus Würzburg
Datum:
14.9.2008
Ich arbeite als IT Leiter im Mittelstand. Wir müssen unsere Softwareentwicklung auf aktuelle Technik (Prozedural ==> Objektorientierung) umstellen. Für das Erlernen und Verstehen objektorientierter Konzepte mit Java ist das Buch auf der Basis BlueJ super. Ich habe ca. 15 andere Titel zum Thema Java (lernen), die ich mehr oder weniger gut finde. Keines ist hat ein ähnlich gutes Konzept... Für Umsteiger von prozeduralen Sprachen oder Neueinsteiger finde ich das Buch wirklich hervorragend geeignet. Kann und werde ich nur weiterempfehlen. Die negativen Ratings verstehe ich nicht. Ich kenne keine Alternative.... Auf der Seite 126 gibt es einen kleinen Fehler: statt: "private ArrayList notizen" sollte es "private ArrayList notizen" heissen (denke ich). Gibt es Training Center / Online Kurse auf Basis des Buches??? (Wäre für Firmen interessant).
Super Buch, gute Beispielprogrammme- für Anfänger ideal
von:
Dagmar Grünberger aus Wien
Datum:
21.6.2006
Das Buch ist ideal für Anfänger, die noch keine Ahnung von Java überhaupt haben, es fängt bei den Grundlagen an und arbeitet sich Stück für Stück vor. Es gibt zu jedem Kapitel gut Beispielprogramme, was einem das Verstehen des Codes erleichtert. Am Rand der Seiten sind oft Merkkästchen die einem helfen nicht den Überlick zu verlieren und sich auf die wirklich wensentlichen Dinge zu konzentrieren. Ebenfalls befindet sich am Ende der Kapitel eine Zusammenfassung, sollte man also etwas vergessen haben und man will nicht wieder ewig danach suchen, einfach die Zusammenfassungen durchsehen- hier wird man meist schnell fündig. Die erste Entwicklungsumgebung wird gleich mitgeliefert, BlueJ - erleichtert die Anfänge muss nicht für alles eigene main Methoden schreiben, einfach mit der rechten Maustaste "programmieren". Ich kann dieses Buch nur weiterempfehlen und jedem raten einfach die Übungen aus dem Buch zu machen, dann kann nichts schief gehen! Der Umstieg am Ende des Buches auf eine höhere Entwicklungsumgebung (Netbeans, Eclipse,...) war auch kein Problem! Wie gesagt meine Empfehlung bekommt das Buch! :)
Alle Produktbewertungen anzeigen...
Diese Auflage wurde für die aktuelle Java Version 5.0 mit komplett überarbeitet und berücksichtigt die verbesserten Möglichkeiten der Software in den Bereichen Fehlerbehebung und Testen. Es behandelt umfassend die wichtigsten Prinzipien und Grundlagen und enthält neue Kapitel zum GUI-Entwurf und zum Testen mit JUnit sowie viele neue Übungsaufgaben zu allen Kapiteln. Auf der Website stehen Lehr- und Lernmaterialien zu Verfügung.
BlueJ ist eine neue Entwicklungsumgebung für die objektorientierte Programmierung mit Java. Eigens für die Lehre entwickelt ermöglicht BlueJ einfachen und schnellen Programmiererfolg, auch bei anspruchsvollen Konzepten. Besonderer Wert wurde auf Visualisierungs- und Interaktionstechniken gelegt, mit deren Hilfe z.B. Klassenstrukturen leicht verständlich und übersichtlich dargestellt werden können. Die Möglichkeiten wurden mit der aktuellen Version von BlueJ weiter verbessert und ausgebaut.
Das vorliegende Buch wurde von einem der Entwickler von BlueJ mitverfasst und integriert BlueJ vollständig in den didaktischen Aufbau. Der ausgezeichnete didaktische Aufbau des Buches garantiert schnellen Lernerfolg, indem z.B. anspruchsvolle Themen immer wieder aufgegriffen und weiter vertieft werden. Der Leser soll von Anfang an mit Objekten umgehen und mit den Methoden interagieren. Die Lernziele werden nicht nur theoretisch erklärt, sondern anhand von insgesamt 22 Projekten praxisnah veranschaulicht. Den Lehrenden wird mit diesem Buch ein Hilfsmittel zur Hand gegeben, das ihnen schnellen Lehrerfolg bei der traditionellerweise schwierigen Vermittlung der Konzepte von Objekten und Klassen ermöglicht.
Inhaltsverzeichnis:
Objekte und Klassen
Klassendefinitionen
Objektinteraktion
Objektsammlungen
Objektverhalten
Benutzen von Bibliotheksklassen
Vermeiden von Fehlern
Klassenentwurf
Bessere Struktur durch Vererbung
Mehr über Vererbung
Weitere Techniken zur Abstraktion
Entwicklung von GUIs
Fehlerbehandlung
Entwurf von Anwendungen
Vorwort:
Es war eine schmerzhafte Erfahrung für mich, meine Tochter Kate und die anderen Kinder in ihrer Mittelstufenklasse mit einem Java-Kurs kämpfen zu sehen, in dem eine kommerzielle Entwicklungsumgebung benutzt wurde. Die Leistungsfähigkeit des Werkzeugs hat die Komplexität des Lernprozesses erheblich erhöht. Ich wünschte, ich hätte früher begriffen, was da passierte. Leider konnte ich mit dem Lehrer erst über das Problem sprechen, als es schon zu spät war. Dies ist eine Situation, für die BlueJ ideal geeignet ist.
BlueJ ist eine interaktive Entwicklungsumgebung mit einem Auftrag: Sie wurde speziell für Studenten entwickelt, die Programmieren lernen. Sie wurde entworfen von Dozenten, die seit vielen Jahren Tag für Tag Objektorientierung lehren. Es war erfrischend, mit den Entwicklern von BlueJ zu sprechen: Sie haben eine sehr klare Vorstellung von ihrem Ziel. Unsere Diskussionen handelten meist eher davon, welche Dinge weggelassen werden sollten, und weniger davon, welche noch hinzugenommen werden sollten. BlueJ ist sehr klar strukturiert und ausgesprochen zielgerichtet.
Aber dies ist kein Buch über BlueJ. Es geht ums Programmieren.
In Java.
In den letzten Jahren hat Java in der Programmierausbildung eine immer größere Bedeutung bekommen. Dafür gibt es mehrere Gründe. Einer ist, dass Java viele Eigenschaften besitzt, die die Sprache für die Lehre geeignet machen: eine relativ klare Definition; ausführliche Prüfungen zur Übersetzungszeit durch den Compiler, die den Studenten frühes Feedback bei Problemen geben; und ein sehr robustes Speichermodell, das viele "mysteriöse" Fehler von vornherein ausschaltet, die durch das Überschreiten von Objektgrenzen oder Typregeln auftreten können. Ein weiterer Grund ist, dass Java inzwischen kommerziell sehr interessant geworden ist.
Dieses Buch geht direkt das am schwierigsten zu vermittelnde Konzept an: Objekte. Es führt die Studenten von den allerersten Schritten hin zu sehr anspruchsvollen Konzepten.
Und es löst eines der schwierigsten Probleme für Lehrbücher über Programmierung: Es thematisiert explizit auch das Schreiben und Ausführen von Programmen. Die meisten Lehrbücher gehen über diese Punkte stillschweigend hinweg oder streifen sie nur kurz und überlassen es dem Dozenten, diese Aspekte zu klären. Dieser wird somit mit dem Problem allein gelassen, das zu vermittelnde Material in Beziehung zu setzen zu den Schritten, die zur Lösung der Übungen gemacht werden müssen. Stattdessen setzt dieses Buch den Einsatz von BlueJ voraus und kann deshalb das Verstehen der Konzepte auf die Mechanismen, die ihre Erforschung ermöglichen, abstimmen.
Ich wünschte, für meine Tochter hätte BlueJ schon im letzten Jahr zur Verfügung gestanden. Vielleicht im nächsten Jahr...
Vorwort an Kursleiter
Dieses Buch ist eine Einführung in die objektorientierte Programmierung für Programmieranfänger. Der Fokus dieses Buches liegt auf allgemeinen objektorientierten Programmierkonzepten aus der Sicht der Softwaretechnik.
Während die ersten Kapitel auf Studenten ohne jegliche Programmiererfahrung abzielen, sind spätere Kapitel auch für fortgeschrittene oder professionelle Programmierer interessant. Insbesondere sollten auch Programmierer von diesem Buch profitieren können, die Erfahrung in einer nicht objektorientierten Sprache haben und ihre Fähigkeiten in Richtung Objektorientierung ausbauen möchten.
Wir verwenden das gesamte Buch hindurch zwei Werkzeuge, um die vorgestellten Konzepte in die Praxis umzusetzen: die Programmiersprache Java und die Java-Entwicklungsumgebung BlueJ.
Java
Zwei Gründe haben zur Wahl der Sprache Java geführt: ihr Sprachentwurf und ihre Popularität. Die Programmiersprache Java selbst bietet eine sehr saubere Umsetzung der meisten wichtigen objektorientierten Konzepte und eignet sich gut als einführende Sprache. Ihre Popularität garantiert einen enormen Vorrat an unterstützendem Material.
Aul jedem Lehrgebiet ist eine große Menge unterschiedlicher Quellen sowohl für Lehrende als auch für Studenten hilfreich. Für Java gibt es zahllose Bücher, Beschreibungen, Übungen, Compiler, Entwicklungsumgebungen und Fragenkataloge in den unterschiedlichsten Arten und Stilen. Viele sind online verfügbar und viele sind kostenlos. Die große Menge und die gute Qualität an Zusatzmaterial machen Java zu einer exzellenten Wahl als Einführung in die objektorientierte Programmierung.
Wenn so viel Java-Material bereits verfügbar ist, gibt es dann überhaupt noch etwas Neues dazu zu sagen? Wir denken ja, und das zweite Werkzeug ist einer der Gründe dafür...
BlueJ
Das zweite Werkzeug, BlueJ, erfordert etwas mehr Erläuterung. Dieses Buch ist einzigartig in seiner kompletten Integration der BlueJ-Umgebung.
BlueJ ist eine Java-Entwicklungsumgebung, die an der University of Southern Denmark, der Deakin University, Australien, und der University of Kent in Canterbury, England, ausdrücklich mit dem Ziel entwickelt wurde, für die Einführung in die objektorientierte Programmierung zu dienen. Sie eignet sich aus mehreren Gründen für diese Lehrsituation besser als andere Umgebungen:
• Die Benutzungsschnittstelle ist sehr viel einfacher. Programmieranfänger können die BlueJ-Umgebung typischerweise bereits nach 20 Minuten Einführung kompetent benutzen. Von diesem Zeitpunkt an kann sich die Darstellung auf die wichtigen Konzepte konzentrieren - Objektorientierung und Java -, statt wertvolle Zeit mit der Diskussion über Umgebungen, Dateisysteme, Klassenpfade, DOS-Kommandos oder DLL-Konflikte zu vergeuden.
• BlueJ bietet wichtige Lehrwerkzeuge, die in anderen Umgebungen nicht zur Verfügung stehen. Eines davon ist die Visualisierung der Klassenstruktur. BlueJ zeigt automatisch ein UML-ähnliches Diagramm der Klassen und Beziehungen in einem Projekt. Die Visualisierung dieser wichtigen Konzepte ist eine große Hilfe für Lehrende und Studierende. Es ist nicht leicht, das Konzept von Objekten zu verstehen, wenn auf dem Bildschirm ausschließlich Programmtext zu sehen ist! Die Notation der Diagramme ist eine einfache Untermenge der UML, zugeschnitten auf den Bedarf von Programmieranfängern. Dies macht es leicht verständlich, erlaubt aber gleichzeitig die Migration auf die volle UML in späteren Kursen.
• Eine der wichtigsten Stärken der BlueJ-Umgebung ist die Möglichkeit für den Benutzer, direkt Objekte von beliebigen Klassen erzeugen und die Methoden dieser Objekte aufrufen zu können. Dies gibt die Möglichkeit zum unmittelbaren Umgang mit Objekten ohne großen Aufwand durch die Umgebung. Studenten bekommen förmlich ein "Gefühl" dafür, wie Objekte erzeugt, Methoden aufgerufen, Parameter übergeben und Ergebnisse zurückgeliefert werden. Sie können eine Methode ausprobieren, unmittelbar nachdem sie sie geschrieben haben, ohne Testklassen schreiben zu müssen. Diese Möglichkeit ist eine unschätzbare Hilfe beim Verstehen der zugrunde liegenden Konzepte und Sprachdetails.
BlueJ ist eine vollständige Java-Entwicklungsumgebung. Es ist keine zurechtgestutzte, vereinfachte Version von Java für die Lehre. Sie läuft auf dem Java Development Kit von Sun Microsystems und benutzt den Standardcompiler und die zugehörige virtuelle Maschine. Dies garantiert, dass sie immer mit der offiziellen und aktuellsten Java-Spezifikation übereinstimmt.
Die Autoren dieses Buches haben mehrere Jahre Lehrerfahrung mit der BlueJ-Umgebung (und viele Jahre mehr aus der Zeit vor BlueJ). Wir haben beide festgestellt, dass die Verwendung von BlueJ bei den Studenten in unseren Kursen zu größerem Engagement, besserem Verständnis und gesteigerter Aktivität geführt hat. Einer der Autoren dieses Buches ist auch ein Entwickler des BlueJ-Systems.
Objekte wirklich zuerst
Unsere Wahl ist unter anderem deshalb auf BlueJ gefallen, weil mit dieser Umgebung wirklich die wichtigen Konzepte zuerst vorgestellt werden können. "Objects First" war lange Zeit der Schlachtruf vieler Buchautoren und Lehrer. Leider macht die Sprache Java die Umsetzung dieses hehren Ansatzes nicht leicht. Zahlreiche Hürden in Syntax und anderen Details müssen überwunden werden, bevor die ersten "lebenden" Objekte sichtbar werden. Der minimale Ablauf zum Erzeugen und Aufrufen eines Objekts in Java schließt typischerweise folgende Schritte ein:
• das Schreiben einer Klasse
• das Schreiben einer main-Methode unter Benutzung der Konzepte von statischen Methoden, Parametern und Arrays in der Signatur
• eine Anweisung zur Objekterzeugung (mit new)
• eine Zuweisung an eine Variable
• eine Variablendeklaration, inklusive Typ
• einen Methodenaufruf mit der Punktnotation
• möglicherweise eine Parameterliste
Aus diesem Grund müssen Lehrbücher entweder
• diese Liste zuerst durcharbeiten und können deshalb erst einige Kapitel später auf Objekte zu sprechen kommen oder
• ein Programm im Stil von "Hello, World" mit einer einzelnen statischen Methode als erstes Beispiel wählen und damit gar keine Objekte erzeugen.
Mit BlueJ ist das kein Problem. Ein Student kann als erste Aktivität ein Objekt erzeugen und seine Methoden aufrufen! Weil Benutzer Objekte direkt erzeugen und manipulieren können, können Konzepte wie Klassen, Objekte, Methoden und Parameter ohne weiteres direkt diskutiert werden, bevor die erste Zeile Java-Quelltext betrachtet werden muss. Statt an dieser Stelle weitere Details zu beschreiben, empfehlen wir dem neugierigen Leser einen schnellen Blick in Kapitel 1 - dort werden die hier gemachten Aussagen schnell deutlich.
Iteratives Vorgehen
Ein weiterer wichtiger Aspekt an diesem Buch ist das iterative Vorgehen. Ein in Kreisen der Informatikpädagogik bekanntes Lehrmuster (aus dem "pedagogical patterns project") besagt, dass wichtige Konzepte früh und häufig geschult werden sollten. 1 Es ist eine große Versuchung für den Autor eines Lehrbuches, bei der Vorstellung eines Konzepts alle seine Aspekte darzustellen. Beispielsweise ist es üblich, bei der Einführung des Typkonzepts eine vollständige Liste der vordefinierten Datentypen anzugeben oder bei der Vorstellung von Schleifen alle Schleifenarten zu diskutieren.
Diese beiden Ansätze stehen im Konflikt miteinander: Wir können uns nicht einerseits auf die wichtigen Konzepte konzentrieren und gleichzeitig Vollständigkeit fordern. Unsere Erfahrung mit Lehrbüchern ist, dass durch zu viele Details zu Anfang die wichtigen Konzepte untergehen und damit schwerer erfassbar werden.
In diesem Buch werden wir wichtige Punkte immer wieder ansprechen, sowohl innerhalb eines Kapitels als auch über die Kapitel hinweg. Konzepte werden üblicherweise so eingeführt, dass sie das vorliegende Problem lösen. Sie werden dann später aus einem anderen Blickwinkel erneut betrachtet, so dass das Verständnis in den späteren Kapiteln immer weiter vertieft wird. Dieser Ansatz erleichtert auch ein Verständnis der Konzepte, die gegenseitig voneinander abhängen.
Einige Dozenten sind möglicherweise mit einem solchen iterativen Vorgehen nicht vertraut. Beim Blick auf die ersten Kapitel könnten Dozenten, die mit einer eher sequentiellen Vorgehensweise vertraut sind, über die Fülle der angesprochenen Konzepte überrascht sein. Sie scheint eine sehr steile Lernkurve zu implizieren.
Aber die Geschichte endet nicht an dieser Stelle. Von den Studenten wird nicht erwartet, dass sie alle Details dieser Konzepte unmittelbar verstehen. Stattdessen werden die fundamentalen Konzepte im Laufe des Buches immer wieder angesprochen, so dass die Studenten ein immer besseres Verständnis bekommen. Da sich ihr Wissensstand während der Beschäftigung mit diesen Themen stetig verändert, können sie durch die Wiederholung wichtiger Konzepte ein tieferes Verständnis erlangen.
Wir haben dieses Vorgehen viele Male mit Studenten erprobt. Es scheint oft, dass die Studenten mit diesem Vorgehen weniger Probleme haben als die Lehrenden. Und bedenken Sie: Eine steile Lernkurve ist nicht problematisch, solange Sie sicherstellen, dass Ihre Studenten den Anstieg schaffen können!
Keine komplette Abdeckung der Sprache Java
Verbunden mit unserem iterativen Vorgehen ist die Entscheidung, dass wir nicht versuchen wollen, die Sprache Java in diesem Buch komplett zu behandeln.
Der Fokus dieses Buches liegt auf der Vermittlung allgemeiner objektorientierter Programmierprinzipien, nicht von Details der Sprache Java. Studenten, die mit diesem Buch Programmieren lernen, können leicht 30 bis 40 Jahre als professionelle Softwareentwickler arbeiten - da ist es eine ziemlich sichere Wette, dass der Großteil ihrer Arbeit nicht in Java stattfinden wird. Natürlich sollte jedes Lehrbuch den Anspruch haben, mehr Fundamentales zu vermitteln als nur die Programmiersprache, die gerade in Mode ist.
Auf der anderen Seite sind viele Details von Java wichtig, um die praktischen Aufgaben erledigen zu können. In diesem Buch besprechen wir die Java-Konstrukte so detailliert wie notwendig, um die Konzepte verstehen und die praktischen Aufgaben lösen zu können. Einige Java-spezifische Konstrukte hingegen wurden bewusst ausgelassen.
Uns ist klar, dass einige Dozenten Themen behandeln werden, die wir nicht im Detail besprechen. Das ist erwartet und auch notwendig. Statt zu versuchen, alle Themen selbst abzudecken (und damit den Umfang dieses Buches auf 1500 Seiten aufzublähen), versuchen wir "Aufhänger" anzubieten. Solche Aufhänger sind Verweise, häufig in Form einer Frage, die ein Thema anspricht und einen Hinweis auf einen Anhang oder externes Material gibt. So wird sichergestellt, dass bestimmte Themen zum passenden Zeitpunkt angesprochen werden, und es bleibt dem Leser oder dem Lehrenden überlassen, wie weit dem Verweis gefolgt werden sollte. Die Aufhänger dienen als Erinnerung an ein Thema und als Platzhalter, an denen eine vertiefende Diskussion vorgenommen werden kann.
Lehrende können dem von uns vorgegebenen Pfad im Buch folgen oder an entsprechenden Stellen in Seitenpfade verzweigen.
In den Kapiteln sind häufig auch Fragen enthalten, die verwandte Themen ansprechen, ohne dass diese im Buch diskutiert werden. Wir empfehlen Lehrenden, einige dieser Fragen im Kurs zu besprechen, bzw. den Studierenden, diese Übungsaufgaben zu bearbeiten.
Projektorientiertes Vorgehen
Die Einführung von neuen Themen in diesem Buch orientiert sich an Projekten. Das Buch diskutiert zahlreiche Programmierprojekte und bietet viele Übungen. Statt ein neues Konzept vorzustellen und es dann anhand einer Übungsaufgabe zur Lösung anwenden zu lassen, stellen wir zuerst ein Ziel auf und formulieren eine Aufgabe. Beim Analysieren der Aufgabe stellen wir fest, welche Lösungen wir benötigen. Als Konsequenz werden neue Konstrukte dann vorgestellt, wenn sie uns bei der Lösung einer Aufgabenstellung unterstützen können.
Die ersten Kapitel enthalten mindestens zwei Diskussionsbeispiele. Das sind Projekte, die detailliert besprochen werden, um die wichtigen Konzepte in jedem Kapitel zu illustrieren. Die Verwendung zweier unterschiedlicher Beispiele unterstützt das iterative Vorgehen: Jedes Konzept wird nach seiner Einführung noch einmal in einem anderen Kontext wiederholt.
Beim Entwurf dieses Buches haben wir versucht, eine große Anzahl und Bandbreite an Beispielprojekten zu finden. Dies weckt hoffentlich die Neugierde des Lesers, illustriert aber auch die Bandbreite der Bereiche, in denen die Konzepte angewendet werden können. Das Finden guter Projekte ist nicht einfach. Wir hoffen, dass unsere Projekte den Lehrenden gute Startpunkte liefern und viele Ideen für vielfältige und spannende Aufgaben bieten.
Die Implementierung aller Projekte wurde sehr sorgfältig vorgenommen, so dass beim Lesen des Quelltextes auch viele Nebenaspekte betrachtet werden können. Wir glauben sehr stark an die Vorteile des Lernens durch Lesen und des Nachahmens guter Beispiele. Damit dies funktioniert, muss allerdings sichergestellt sein, dass die Beispiele, die die Studenten lesen, gut und nachahmenswert geschrieben sind. Wir haben dies versucht.
Alle Projekte sind als offene Problemstellungen entworfen. Auch wenn eine oder mehrere Versionen jedes Problems ausführlich im Buch dargestellt werden, sind alle Projekte so entworfen, dass zusätzliche Erweiterungen und Verbesserungen in Studentenprojekten vorgenommen werden können. Der komplette Quelltext aller Projekte ist beigefügt. Eine Liste der Projekte, die in diesem Buch diskutiert werden, ist auf Seite 23/24 zu finden.
Konzepte statt Sprachkonstrukte
Ein weiterer Aspekt, der dieses Buch von vielen anderen unterscheidet, ist die Orientierung an fundamentalen Aufgaben der Softwareentwicklung und nicht notwendigerweise an spezifischen Java-Konstrukten. Ein Hinweis darauf sind die Kapitelüberschriften. In diesem Buch werden Sie keine klassischen Kapitelüberschriften wie "Primitive Datentypen" oder "Kontrollstrukturen" finden. Die Strukturierung nach fundamentalen Entwicklungsaufgaben ermöglicht uns eine sehr viel allgemeinere Einführung, die sich nicht an den Besonderheiten einer speziellen Programmiersprache orientiert. Wir glauben auch, dass es den Studenten leichter fällt, der Motivation der jeweiligen Einleitung zu folgen und die Lektüre dadurch interessanter wird.
Ein Resultat dieses Vorgehens ist, dass sich dieses Buch weniger als eine Referenz eignet. Einführende Lehrbücher und Referenzbücher haben unterschiedliche und teilweise konkurrierende Ziele. Bis zu einem gewissen Grad kann ein Lehrbuch versuchen, beides zu bieten, aber irgendwann muss ein Kompromiss eingegangen werden. Unser Buch ist deutlich als ein Lehrbuch entworfen, und immer, wenn es zu einem Konflikt kam, haben wir den Stil eines Lehrbuches dem eines Referenzbuches vorgezogen.
Dennoch haben wir Unterstützung für die Verwendung als Referenzbuch geboten, indem wir die Java-Konstrukte, die in den einzelnen Kapiteln angesprochen werden, in der Einführung jedes Kapitels aufgeführt haben.
Übersicht der Kapitel
Kapitel 1 beschäftigt sich mit den fundamentalen Konzepten der Objektorientierung: Objekte, Klassen und Methoden. Es liefert eine solide, pragmatische Einführung in diese Konzepte, ohne auf Details der Java-Syntax einzugehen. Es wird auch ein erster Blick auf Quelltext geworfen. Zwei Projekte beschäftigen sich mit grafischen Figuren, die interaktiv gezeichnet werden können, ein weiteres Projekt behandelt das Anmelden von Studenten für Laborkurse.
Kapitel 2 öffnet Klassendefinitionen und untersucht, wie mit Quelltext das Verhalten von Objekten definiert wird. Wir diskutieren, wie Datenfelder definiert und Methoden implementiert werden. Hier führen wir auch die ersten Anweisungen ein. Das Hauptbeispiel ist die Implementierung eines Ticketautomaten. Wir werfen auch einen erneuten Blick auf das Beispiel mit den Laborkursen aus Kapitel 1, um es genauer zu untersuchen.
Kapitel 3 geht einen Schritt weiter, indem die Interaktion zwischen mehreren Objekten diskutiert wird. Wir sehen, wie Objekte zusammenarbeiten können, indem sie gegenseitig ihre Methoden aufrufen, um eine gemeinsame Aufgabe zu lösen. Wir diskutieren auch, wie ein Objekt weitere Objekte erzeugen kann. Die Anzeige einer digitalen Uhr wird diskutiert, die zwei Objekte zur Anzeige von Stunden und Minuten benutzt. Als zweites größeres Beispiel untersuchen wir die Simulation eines E-Mail-Systems, in dem Nachrichten zwischen E-Mail-Clients verschickt werden können.
In Kapitel 4 fahren wir fort mit der Konstruktion größerer Objektstrukturen. Vor allem beginnen wir hier, Sammlungen von Objekten zu benutzen. Wir betrachten ein elektronisches Notizbuch und ein Auktionssystem, um Sammlungen einzuführen. Gleichzeitig diskutieren wir das Iterieren über Sammlungen und werfen einen ersten Blick auf Schleifen. Die erste Sammlung, die benutzt wird, ist die ArrayList. Im zweiten Teil des Kapitels untersuchen wir Arrays als eine spezielle Form von Sammlung und die for-Schleife als eine weitere Schleifenform. Als Beispiel für die Benutzung von Arrays zeigen wir, wie die Auswertung einer Logdatei für Webzugriffe implementiert werden kann.
Kapitel 5 behandelt Bibliotheken und Schnittstellen. Wir stellen die Standardbibliothek von Java vor und diskutieren einige wichtige Bibliotheksklassen. Am wichtigsten ist hier die Darstellung, wie die Dokumentation der Bibliothek gelesen und verstanden werden kann. Es wird diskutiert, wie wichtig das Schreiben von Dokumentationen für Softwareentwicklungsprojekte ist, und schließlich üben wir das Erstellen einer angemessenen Dokumentation für unsere eigenen Klassen. Random, Set und Map sind Beispiele von Klassen, die wir in diesem Kapitel untersuchen. Wir implementieren ein Eliza-ähnliches Dialogsystem und eine grafische Simulation von springenden Bällen, um diese Klassen anzuwenden.
Kapitel 6 beschäftigt sich mit Konzepten, mit denen korrekte, verständliche und wartbare Klassen geschrieben werden können. Es behandelt Aspekte, die vom Schreiben verständlichen Quelltextes - einschließlich Stil und Kommentierung - bis hin zum Testen und zur Fehlerbeseitigung reichen. Es werden Teststrategien vorgestellt und einige Methoden zur Fehlerbeseitigung ausführlich diskutiert. Wir benutzen das Beispiel eines Terminkalenders für Verabredungen und die Implementierung eines Taschenrechners für die Diskussion dieser Konzepte.
In Kapitel 7 diskutieren wir etwas formaler die Probleme beim Aufteilen eines Problems in geeignete Klassen für die Implementierung. Wir stellen Konzepte für guten Klassenentwurf vor, einschließlich Entwurf nach Verantwortlichkeiten, Kopplung, Kohäsion und Refactoring. Für diese Diskussion verwenden wir ein interaktives, textbasiertes Adventure-Game (Die Welt von Zuul). Wir verbessern in mehreren Iterationen den internen Entwurf des Spiels und erweitern seine Funktionalität, bis wir schließlich mit einer umfangreichen Liste von Erweiterungsmöglichkeiten Anregungen für weiterführende Studentenprojekte geben.
Kapitel 8 und 9 führen Vererbung, Polymorphie und damit verbundene Konzepte ein. Wir untersuchen eine Datenbank für CDs und Videos, um die Konzepte darzustellen. Fragen der Quelltextvererbung, des Subtypings, der polymorphen Methodenaufrufe und des Überschreibens von Methoden werden ausführlich diskutiert.
In Kapitel 10 implementieren wir eine Jäger-Beute-Simulation. Sie dient als Ausgangspunkt für die Diskussion weiterer Abstraktionsmechanismen, die auf Vererbung aufsetzen, insbesondere Interfaces und abstrakte Klassen.
Kapitel 11 behandelt zwei neue Beispiele: einen Bildbetrachter und einen Sound-Player. Anhand dieser Beispiele wird dargestellt, wie grafische Benutzungsoberflächen (GUIs) konstruiert werden.
Kapitel 12 beschäftigt sich dann mit der schwierigen Frage, wie mit Fehlern zur Laufzeit umgegangen werden soll. Einige Probleme und Lösungen werden diskutiert, und der Exception-Mechanismus von Java wird ausführlich vorgestellt. Wir erweitern und verbessern eine Adressbuch-Anwendung, um diese Konzepte darzustellen.
Kapitel 13 macht einen Schritt zurück, um ausführlicher die nächste Abstraktionsstufe zu beleuchten: wie man zu einem vage beschriebenen Problem passende Klassen und Methoden findet. In den vorigen Kapiteln haben wir angenommen, dass große Teile der Anwendung bereits existieren und wir Verbesserungen vornehmen. Hier untersuchen wir den Start "von der grünen Wiese". Dies schließt eine detaillierte Darstellung von Vorgehensweisen ein, wie wir die passenden Klassen für eine Anwendung finden, wie diese interagieren und wie die Zuständigkeiten verteilt sein sollten. Wir benutzen CRC-Karten als Herangehensweise, um ein Kinobuchungssystem zu entwerfen.
In Kapitel 14 versuchen wir alles bis dahin Dargestellte zusammenzuführen. Es enthält eine komplette Fallstudie, die mit einem Anwendungsentwurf beginnt und über den Entwurf von Klassenschnittstellen und die Diskussion vieler wichtiger funktionaler und nichtfunktionaler Aspekte bis hin zu Details der Implementierung reicht. Themen aus früheren Kapiteln (wie Zuverlässigkeit, Datenstrukturen, Klassenentwurf, Testen und Erweiterbarkeit) werden erneut in einem neuen Kontext dargestellt.
Dritte Auflage
Vor Ihnen liegt die Übersetzung der dritten Auflage dieses Buches. Einige Dinge haben sich gegenüber der Übersetzung der ersten englischen Auflage verändert: In der zweiten englischen Auflage wurden JUnit und ein Kapitel über grafische Benutzungsoberflächen hinzu genommen. In der dritten Auflage ist die auffälligste Änderung die Verwendung von Java 5 als Programmiersprache. Java 5 hat neue Sprachkonstrukte eingeführt, wie beispielsweise generische Klassen und Aufzählungstypen, und praktisch alle Projekte zu diesem Buch wurden angepasst, um von den neuen Konstrukten Gebrauch zu machen. Entsprechend wurden natürlich auch die erläuternden Texte im Buch überarbeitet. Insgesamt sind jedoch das Konzept und der Stil dieses Buches unverändert geblieben.
Das Feedback von Lesern der vorigen Auflagen war überwältigend positiv, und viele Menschen haben bei der Verbesserung dieses Buches geholfen, indem sie uns Kommentare und Verbesserungsvorschläge geschickt, Fehler gefunden und uns über diese informiert, Zusatzmaterial zur Website des Buches geliefert, an den Diskussionen auf der Mailing-Liste teilgenommen oder das Buch in andere Sprachen übersetzt haben. Insgesamt scheint das Buch jedoch zu "funktionieren". Deshalb versucht auch diese dritte Auflage eher Dinge zu verbessern, anstatt eine radikale Änderung vorzunehmen.
Zusatzmaterial
Alle Projekte, die für die Diskussionen und Übungen in diesem Buch verwendet werden, stehen auf der beiliegenden CD zur Verfügung. Die CD enthält außerdem ein Java Development Environment (JDK) und BlueJ für verschiedene Betriebssysteme.
Die Webseite zur Unterstützung dieses Buches ist zu finden unter http://www.bluej.org/objects-first oder http://www.pearson-studium.de Unter der letztgenannten Adresse steht Ihnen unsere Companion Website (CWS) zur Verfügung, der kostenlose Online-Service für unsere Leser. Sie enthält, getrennt für Dozenten und Studenten, zahlreiche attraktive, den Buchinhalt ergänzende und erweiternde Inhalte. Folgen Sie einfach der Benutzerführung, um sich anzumelden.
Auf diesen Seiten können Updates zu den Beispielen gefunden werden und es wird weiteres Zusatzmaterial zur Verfügung gestellt. Beispielsweise steht dort auch der Style Guide, der für die Beispiele in diesem Buch eingehalten wurde, in elektronischer Form zur Verfügung, damit Kursleiter ihn für ihre eigenen Zwecke anpassen können.
Diskussionslisten
Die Autoren pflegen zwei aktive Email-Diskussionslisten (in englischer Sprache), um den Austausch von Ideen und Hilfestellungen zwischen den Lesern dieses Buches und anderen BlueJ-Benutzern zu erleichtern.
Die erste Liste, bluej-discuss, ist öffentlich (jeder kann sich eintragen) und das zugehörige Archiv ist frei zugänglich. Interessierte können unter folgender Adresse der Liste beitreten oder das Archiv durchsuchen:
http://lists.bluej.org/mailman/listinfo/bluej-discuss
Die zweite Liste, objects-first, ist eine geschlossene Liste ausschließlich für Kursleiter. Auf ihr können Lösungen, Lehrtipps, Prüfungen und andere Lehrthemen diskutiert werden. Informationen über die Möglichkeit, dieser Liste beizutreten, finden sich auf der Website zum Buch (siehe oben).
Vorwort des Übersetzers
Ich mag BlueJ. Das kann daran liegen, dass ich selbst einige Zeit während eines Stipendienaufenthaltes 1999/2000 in Australien an der Monash University an BlueJ mitarbeiten durfte. Viel eher aber liegt es daran, dass BlueJ die Kernkonzepte der Objektorientierung so schlicht und elegant herausschält, dass ein intuitives Verständnis sich fast von selbst ergibt. So war ich schnell bereit, die Übersetzung dieses Buchs zu übernehmen.
Der Mut, Dinge wegzulassen, der BlueJ so erfolgreich gemacht hat, setzt sich in diesem Buch fort, denn der Sprachumfang von Java wird nicht vollständig abgedeckt. Stattdessen schafft das Buch Inseln in der "Programmierlandschaft". Mit dem gründlichen Fundament dieser Inseln wird das Erforschen der restlichen Umgebung zu einem Vergnügen. Diese Orientierung am exemplarischen Lernen spricht mich sehr an. Der Text "fließt" in weiten Teilen so angenehm, dass das Selbststudium zur Freude werden sollte. Mein persönlicher Favorit ist Kapitel 7, in dem, ausgehend von einem schlechten Entwurf, die Begriffe Kopplung, Kohäsion, Kapselung und Refactoring sehr anschaulich eingeführt und durch schrittweise Verbesserungen am Entwurf verdeutlicht werden.
Für die deutsche Ausgabe habe ich alle BlueJ-Projekte des Begleitmaterials ebenfalls übersetzt. Das Übersetzen von Quelltexten ist eine gefährliche Sache. Möglicherweise wird mancher mit einigen der von mir gewählten Bezeichner nicht so glücklich sein. Methodennamen, die im Englischen noch angenehm flexibel interpretiert werden können (printMessage kann als Imperativ verstanden werden, also gibNachrichtAus, oder als Infinitiv, also nachrichtAusgeben), werden durch die Wahl einer Übersetzung häufig einseitig festgelegt oder wirken kantig. Zusätzlich ist der Übergang in der Benutzung eigener Klassen hin zu Bibliotheksklassen gesprenkelt mit hybriden Konstrukten wie adressen.get(schluessel). Ich bin allerdings überzeugt, dass eine Übersetzung der Projekte zu diesem Buch unumgänglich war. Die Stärke der Objektorientierung ist, dass sie fachliche Konzepte des zu modellierenden Ausschnitts der Realität unmittelbar in Klassen abbilden kann. Ausgehend von deutschen Problembeschreibungen hätte ein Wechsel zu englischen Bezeichnern, egal an welchem Punkt, sonst immer zu einem Bruch geführt.
Mein Dank geht an Christiane Floyd und Heinz Züllighoven, die es mir leicht gemacht haben, mich auf diese Übersetzung konzentrieren zu können, und an meine Kolleginnen und Kollegen im Arbeitsbereich Softwaretechnik der Universität Hamburg, die mich in meinem Vorhaben bestärkt haben. Arnd Müller-Judith, Helge Sturmfels, Isabel Schneider, Rainer Fuchs und Marc-Boris Rode vom Verlag Pearson Studium haben den Prozess angestoßen bzw. auf angenehme Weise fortgeführt. Das Fachlektorat mit Michael Kölling war trotz des hohen Zeitdrucks eine Freude. Michael hat die Übersetzung gefallen, sie ist somit durch einen der Autoren autorisiert.
Fragen zur deutschen Ausgabe können unter schmolit@informatik.uni-hamburg.de an mich gerichtet werden.
Axel Schmolitzky
Hamburg, im März 2006