Dietrich Boles Programmieren spielend gelernt mit dem Java-Hamster-Modell 2., durchgesehene Auflage Im Teubner B. G. Teubner Stuttgart· Leipzig· Wiesbaden Die Deutsche Bibliothek - CIP-Einheitsaufnahme Ein Titeldatensatz für diese Publikation ist bei der Deutschen Bibliothek erhältlich. Dipl.-Inform. Dietrich Boles Geboren 1963 in Altena (Westf.). Studium der Informatik von 1988 bis 1994 an der Universität Oldenburg. Seit 1994 wiss. Mitarbeiter des Fachbereichs Informatik der Universität Oldenburg. Regelmäßige Durch führung der Vorlesung" Programmierkurs Java" mit Übungen. Arbeitsschwerpunkte: Objektorientierte Soft wareentwicklung, Multimedia-Systeme und Digitale Bibliotheken. 1. Auflage 1999 2., durchgesehene Auflage Mai 2002 Alle Rechte vorbehalten © B. G. Teubner GmbH, Stuttgart/Leipzig/Wiesbaden, 2002 Der Verlag Teubner ist ein Unternehmen der Fachverlagsgruppe BertelsmannSpringer. www.teubner.de Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Ver lags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzun gen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Umschlaggestaltung: Ulrike Weigel, www.CorporateDesignGroup.de Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. ISBN 978-3-519-12297-5 ISBN 978-3-322-96757-2 (eBook) DOI 10.1007/978-3-322-96757-2 Vorwort Programmieranfänger1 leiden häufig darunter, dass sie beim Programmieren ihre normale Gedankenwelt verlassen und in eher technisch-orientierten Kategorien den ken müssen, die ihnen von den Programmiersprachen vorgegeben werden. Gerade am Anfang strömen häufig so viele Neuigkeiten inhaltlicher und methodischer Art auf sie ein, dass sie leicht das Wesentliche der Programmierung, nämlich das Lösen von Problemen, aus den Augen verlieren und sich in syntaktischen und technischen Ein zelheiten verirren. Der "Kampf" mit dem Compiler bekommt somit höhere Priorität als der Programmentwurf an sich und kann frühzeitig zur Frustration führen. Das Hamster-Modell ist mit dem Ziel entwickelt worden, dieses Problem zu lösen. Mit dem Hamster-Modell wird dem Programmieranfänger ein einfaches aber mächti ges Modell zur Verfügung gestellt, mit dessen Hilfe er Grundkonzepte der Program mierung auf spielerische Art und Weise erlernen kann. Der Programmierer steuert einen virtuellen Hamster durch eine virtuelle Landschaft und lässt ihn bestimmte Aufgaben lösen. Die Anzahl der gleichzeitig zu berücksichtigenden Konzepte wird im Hamster-Modell stark eingeschränkt und nach und nach erweitert. Mit einer ähnlichen Motivation wurde in den 70er und 80er Jahren die Schild kröten-Graphik der Programmiersprache LOGO entwickelt bzw. erprobt [Ros83, Men85]. Problem der Sprache LOGO war allerdings, dass sie sich - wenn über haupt - nur im Ausbildungssektor nicht aber beispielsweise im industriellen Be reich durchsetzen konnte. Dem "MuttersprachenefIekt" kommt jedoch auch beim Programmieranfänger eine wichtige Bedeutung zu: Die Muttersprache beherrscht man wesentlich besser als jede später erlernte Sprache. Aus diesem Grund wur de für das Hamster-Modell keine neue Programmiersprache entwickelt. Vielmehr wurde das Modell in die Konzepte und die Syntax der Programmiersprache Java [AGHOl, GJSBOO] eingebettet. Die Sprache Java, die auch als "Sprache des Inter net" bezeichnet wird, ist eine (relativ) einfache Sprache, die viele wichtige Program mierkonzepte enthält und sich - insbesondere im Zusammenhang mit dem rapiden Wachstum des Internet - auch im industriellen Bereich immer mehr durchzusetzen beginnt. Das Hamster-Modell wurde in einer einfachen Version zu Beginn der 80er Jahre in der GMD (Gesellschaft für Mathematik und Datenverarbeitung) entwickelt [Opp83, Amb87]. Zielsprache war damals die imperative Programmiersprache ELAN [KL83, KL85]. Vorlage für das Hamster-Modell war dabei "Karel der Roboter" [PRS95, BSRP97]. Ich habe das imperative Hamster-Modell an die Programmiersprache Java angepasst und um Konzepte der objektorientierten und parallelen Programmierung 1 Lediglich aufgrund der besseren Lesbarkeit wird in diesem Buch ausschließlich die maskuline Form verwendet. 4 erweitert. Dabei werden nicht der gesamte Sprachschatz der Programmiersprache Java, sondern lediglich die grundlegenden Konstrukte behandelt. Dieses Werk besteht aus insgesamt vier Teilen. Teil 1 und 2 befinden sich in diesem ersten Band; die Teile 3 und 4 sind zur Zeit in Bearbeitung und werden in einem zwei ten Band erscheinen. Der erste Teil gibt eine allgemeine Einführung in die Grund lagen der Programmierung. Im zweiten Teil werden die Konzepte der imperativen Programmierung vorgestellt. Im einzelnen werden im zweiten Teil Anweisungen und Programme, Prozeduren, Kontrollstrukturen, der Top-Down-Programmentwurf, Va riablen und Ausdrücke, Funktionen und Parameter sowie das Prinzip der Rekursion behandelt. Auf den imperativen Programmierkonzepten aufbauend wird im dritten Teil in die objektorientierte Programmierung eingeführt. Konzepte, die im dritten Teil erläutert werden, sind Objekte, Klassen, Arrays, Vererbungsmechanismen, Po lymorphismus und dynamisches Binden sowie Zugriffsrechte. Im dritten Teil werden die Grundlagen gelegt für die Vorstellung paralleler Programmierkonzepte im vierten Teil des Buches, in dem Prozesse bzw. Threads, die Inter-Prozess-Kommunikation, die Synchronisation sowie Schedulingmechanismen behandelt werden. Beim Hamster-Modell steht nicht so sehr das "Learning-by-Listening" bzw. "Lear ning-by-Reading" im Vordergrund, sondern vielmehr das "Learning-by-Doing". Aus diesem Grund enthalten die einzelnen Kapitel jeweils viele Beispielprogramme und Übungsaufgaben, die Sie intensiv bearbeiten sollten. Des Weiteren möchte ich den Lesern bzw. Übenden ans Herz legen, sich selbst weitere Aufgaben auszudenken. Programmieren lernt man am besten durch Üben, Üben, Üben. Zu diesem Buch existiert auch unter folgendem URL eine spezielle WWW-Seite: http://www-is . informatik. uni -oldenburg . der dibo/hamster. Auf dieser Sei te finden Sie ergänzende Informationen, Korrekturen, weitere Beispielprogramme, Aufgaben, Musterlösungen, ein Diskussionsforum und vieles mehr. Über die WWW Seite können Sie auch mit mir Kontakt aufnehmen. Ich freue mich über jede Anre gung, die zur Verbesserung des Hamster-Modells und des Buches beiträgt. Für das Erstellen und Ausführen von Hamster-Programmen wurde ein spezielles Java-Programm, der so genannte "Hamster-Simulator" entwickelt. Um das Buch möglichst kostengünstig anbieten zu können, wurde auf eine beigelegte CD-ROM mit diesem Programm verzichtet. Stattdessen steht der Hamster-Simulator auf der oben angegebenen WWW-Seite zum kostenlosen Download bereit. Sollten Sie keinen Internet-Zugang besitzen, können Sie den Hamster-Simulator auf CD-ROM auch ge gen einen Unkostenbeitrag von 5,- EURO (inkl. Versandkosten) bei mir anfordern (Briefmarken oder Verrechnungsscheck beilegen). Meine Anschrift lautet: Dietrich Boles, Universität Oldenburg, Fachbereich Informatik, Escherweg 2, D-26121 Olden burg, Email: [email protected] Eine elektronische Version dieses Buches befindet sich im eVerlage-System, einer di gitalen Bibliothek mit Informatik-Fachliteratur: http://www.eVerlage.de. In diese 5 Version ist in Form eines Java-Applets der Hamster-Simulator eingebettet, über den Sie die im Text vorhandenen Beispielprogramme direkt ausführen können. Das in diesem Buch beschriebene Java-Hamster-Modell ist bereits seit fünf Jahren integraler Bestandteil des "Programmierkurs Java", der in jedem Wintersemester vom Fachbereich Informatik der Universität Oldenburg angeboten wird. Ich möchte mich hiermit bei den Studierenden ganz herzlich für die zahlreichen Anregungen, Tipps und Verbesserungsvorschläge bedanken. Ebenfalls Dank gebühren Prof. Dr. Hans-Jürgen Appelrath für seine freundliche Unterstützung bei der Erstellung des Buches sowie Markus Siegmann und Tammo Freese für das sorgfältige Korrekturle sen. Mein besonderer Dank gilt aber Daniel Jasper für die mit großem Engagement durchgeführte Entwicklung und Implementierung des Hamster-Simulators, Ricarda Freundl für die Anfertigung der mich immer wieder aufs Neue motivierenden niedli chen Hamster-Zeichnungen, die Sie durch das gesamte Buch begleiten werden, und bei meiner Lebensgefährtin Cornelia Haber für die Erstellung der Syntaxdiagramme in diesem Buch und für ihre Geduld, wenn ich mich mal wieder ein ganzes Wochen ende mit "dem Hamster" beschäftigt habe. Hinweisen möchte ich an dieser Stelle noch auf ein ergänzendes Buch: die "Start hilfe Informatik" von H.-J. Appelrath, D. Boles, V. Claus und 1. Wegener, eben falls erschienen im Teubner-Verlag. Während das vorliegende "Hamster-Buch" eine Einführung in die Programmierung im Speziellen darstellt, hilft die Starthilfe beim Einstieg in die Informatik im Allgemeinen. Ausführlich behandelt werden in der Starthilfe die zentralen Begriffe "Algorithmus" und "Datenstrukturen" . Weiterhin werden dort eine Einführung in die objektorientierte Softwareentwicklung und ein Überblick über die Kerngebiete der Praktischen Informatik (Compilerbau, Betriebs systeme, Datenbanken, Rechnernetze) gegeben. In der Hand halten Sie nun die zweite Auflage des "Hamster-Buches". Sie unter scheidet sich von der ersten Auflage durch die Anpassung an die neue deutsche Rechtschreibung sowie die Beseitigung von Fehlern, die sich in die erste Auflage eingeschlichen hatten. Ganz besonders bedanken möchte ich mich für die vielen positiven Rückmeldungen, die mich in den vergangenen Monaten erreicht haben. Zahlreiche Anfragen betrafen den genauen Erscheinungstermin des zweiten Bandes. Dieser wird sich aber aufg rund meiner derzeitig hohen beruflichen Belastung leider noch ein wenig verzögern. Alle, die schon jetzt auch ohne Hamster die objektorien tierte Programmierung mit Java erlernen möchten, verweise ich auf das ebenfalls im Teubner-Verlag erschienene Buch "Java als erste Programmiersprache" von Joachim Goll, Cornelia Weiß und Peter Rothländer. Nun wünsche ich aber allen Lesern viel Spaß beim "Programmieren Lernen mit dem Hamster". Oldenburg, im September 2001 Dietrich Boles Inhaltsverzeichnis I Grundlagen 19 . . . . . . . . .. . . . . . . . . . . 1 Programmierung 23 1.1 Ziele der Programmierung . 23 1.2 Algorithmen. 24 1.3 Programme 31 2 Programmiersprachen.................. 33 2.1 Klassifikation von Programmiersprachen 33 2.2 Definition von Programmiersprachen 34 2.3 Syntaxdarstellungen ........ . 35 3 Programmentwicklung 41 3.1 Entwicklungsphasen .. 41 3.2 Entwicklungswerkzeuge 46 4 Computer 49 4.1 Aufbau eines Computers. 49 4.2 Von-Neumann-Prinzipien der Rechnerarchitektur 52 4.3 Arbeitsweise eines Computers. 53 4.4 Speicher.... 54 4.5 Betriebssystem 57 4.6 Dateien und Verzeichnisse 57 4.7 Window-System ..... 57 8 Inhaltsverzeichnis . . . . . . . . . . . . . . . . . . . 5 Aussagenlogik 59 5.1 Aussagen ........ 59 5.2 Operationen auf Aussagen. 59 5.3 Syntax von Aussagen. . . 60 5.4 Äquivalenz von Aussagen 61 5.5 Algebraische Eigenschaften von booleschen Operatoren . 62 11 Imperative Programmierung 65 6 Grundlagen des Hamster-Modells .......... . 69 6.1 Motivation ............. . 69 6.2 Komponenten des Hamster-Modells 73 6.3 Grundlagen der Hamstersprache .. 75 . . . . . . . . . . . . . 7 Anweisungen und Programme 79 7.1 Hamsterbefehle 79 7.2 Anweisungen 82 7.3 Programme 84 7.4 Kommentare 85 7.5 Beispielprogramme 87 7.6 Übungsaufgaben 90 . . . . . . . . . . . . . . . 8 Prozeduren . ...... 93 8.1 Motivation .... 93 8.2 Prozedurdefinition 94 8.3 Prozeduraufruf . . 97 8.4 Programme (mit Prozeduren) 99 8.5 Vorteile von Prozeduren 102 8.6 Beispielprogramme 103 8.7 Übungsaufgaben 107 Inhaltsverzeichnis 9 ................ 9 Auswahlanweisungen . . 111 9.1 Testbefehle ......... 111 9.2 Boolesche Operatoren und Ausdrücke 113 9.3 Blockanweisung . 119 9.4 Leeranweisung 121 9.5 Bedingte Anweisung 122 9.6 Alternativanweisung 126 9.7 Beispielprogramme . 129 9.8 Übungsaufgaben .. 134 10 Wiederholungsanweisungen .......•....•..• 137 10.1 Motivation ... 137 10.2 while-Anweisung 138 10.3 do-Anweisung .. 148 10.4 Beispielprogramme . 152 10.5 Übungsaufgaben . . 156 11 Boolesche Funktionen . 161 11.1 Motivation ........ . 161 11.2 Boolesche return-Anweisung. 162 11.3 Definition boolescher Funktionen 163 11.4 Aufruf boolescher Funktionen. 167 11.5 Seiteneffekte .... 172 11.6 Beispielprogramme . 175 11. 7 Übungsaufgaben . . 181 10 Inhaltsverzeichnis 12 Programmentwurf 185 12.1 Lösen von Problemen 185 12.2 Analyse 186 12.3 Entwurf 189 12.4 Implementierung 193 12.5 Test ..... . 195 12.6 Dokumentation 197 12.7 Ein weiteres Beispiel 198 12.8 Übungsaufgaben . . 210 13 Boolesche Variablen .. 213 13.1 Motivation ........ . 213 13.2 Definition boolescher Variablen 215 13.3 Nutzung boolescher Variablen. 218 13.4 Boolesche Zuweisung ..... . 220 13.5 Gültigkeitsbereich einer booleschen Variable. 223 13.6 Lebensdauer einer booleschen Variable. 230 13.7 Beispielprogramme . 231 13.8 Übungsaufgaben . . 235 14 Zahlen, Variablen und Ausdrücke 239 14.1 Motivation 239 14.2 Zahlen . . . 240 14.3 int-Variablen 241 14.4 int-Zuweisung . 242 14.5 Arithmetische Ausdrücke 243 14.6 Vergleichs ausdrücke ... 248 14.7 Verallgemeinerung von Variablen und Ausdrücken 251 14.8 Beispielprogramme 259 14.9 Übungsaufgaben . 265