Aus dem Programm Datenbanken und Softwareentwicklungg Grundkurs JAVA von D. Abts Architekturen für Web-Anwendungen von G. Bauer Grundkurs Programmierung mit Visual Basic von S. Kämper Grundkurs Programmieren mit Delphi von W.-G. Matthäus Java für IT-Berufe von W.-G. Matthäus Grundkurs Software-Entwicklung mit C++ von D.May Java will nur spielen von S. E.Panitz Grundkurs Web-Programmierung von G. Pomaska Algorithmen kompakt und verständlich von M. von Rimscha Grundkurs Algorithmen und Datenstrukturen in JAVA von A. Solymosi und U.Grude Programmieren mit JAVA von A.Solymosi www.viewegteubner.de Johannes Brauer Grundkurs Smalltalk – Objektorientierung von Anfang an Eine Einführung in die Programmierung 3., erweiterte und überarbeitete Auflage Mit 224 Abbildungen STUDIUM Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über <http://dnb.d-nb.de> abrufbar. Das in diesem Werk enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgend- einer Art verbunden. Der Autor übernimmt infolgedessen keine Verantwortung und wird keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht. Höchste inhaltliche und technische Qualität unserer Produkte ist unser Ziel. Bei der Produktion und Auslieferung unserer Bücher wollen wir die Umwelt schonen: Dieses Buch ist auf säurefreiem und chlorfrei gebleichtem Papier gedruckt. Die Einschweißfolie besteht aus Polyäthylen und damit aus organischen Grundstoffen, die weder bei der Herstellung noch bei der Verbrennung Schadstoffe freisetzen. Die non-commercial Edition von Cincom SmalltalkkkTM Visual Works® und ObjektStudio®kann kostenlos heruntergeladenwerden unter www.cincom.com/downloadsmalltalk. 1. Auflage 2003 2. Auflage 2004 3., erweiterte und überarbeitete Auflage 2009 Alle Rechte vorbehalten © Vieweg+Teubner|GWV Fachverlage GmbH, Wiesbaden 2009 Lektorat: Sybille Thelen | Walburga Himmel Vieweg+Teubner ist Teil der Fachverlagsgruppe Springer Science+Business Media. www.viewegteubner.de Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Umschlaggestaltung:KünkelLopka Medienentwicklung, Heidelberg Druck und buchbinderische Verarbeitung: Krips b.v., Meppel Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. Printed in the Netherlands ISBN 978-3-8348-0712-0 Vorwort DiesesBuchistausBegleitmaterialienfüreineGrundvorlesungProgrammierung ent- standen, die im ersten und zweiten Semester im Studiengang Wirtschaftsinformatik der Fachhochschule NORDAKADEMIE angeboten wird. Seit dem Wintersemester 1999/2000 wird in dieser Veranstaltung von Anfang an die Objektorientierte Pro- grammierung unter Verwendung der Programmiersprache Smalltalk gelehrt. Die Be- antwortung der Frage, welche Lehrbücher den Studierenden für diese Vorlesung zu empfehlen wären, gestaltete sich als schwierig, denn die zahlreich vorhandenen Bü- cherzumThemaObjektorientierte Programmierung imAllgemeinenundzumThema Smalltalk im Besonderen setzen häufig mindestens Programmierkenntnisse in einer nicht objektorientierten Programmiersprache voraus. Selbst wenn die Zahl der Studi- enanfänger,diesolcheKenntnissebesitzen,beständigsteigt,könnendieseaberkeines- falls generell vorausgesetzt werden. Zum Zeitpunkt des Erscheinens der ersten Auf- lage behandelten Lehrbücher für Programmieranfänger hingegen in aller Regel nicht dieobjektorientierteProgrammierung.Inzwischenhatsichder„Objects-First-Ansatz“ zwar stark verbreitet, die Verwendung von Smalltalk als erster Programmiersprache ist aber eher selten anzutreffen. Dieses Buch schließt daher nach wie vor eine Lücke. Es wendet sich nicht nur an Studierende der Informatik, sondern an jeden, der einen grundlegenden Einstieg in die Programmierung, insbesondere die objektorientierte, sucht. Es kann z.B. auch in Informatik-Leistungskursen in der Oberstufe der Schulen eingesetzt werden. Die Wahl von Smalltalk hat vor allem didaktische Gründe. Es handelt sich hierbei umeineeinfache,striktobjektorientierteSprache,diedieobjektorientierteDenkweise fast erzwingt. Darüber hinaus haben nahezu alle Studierenden den gleichen Nachteil, diese Sprache nicht zu kennen, was das Problem der großen Spannweite in den Vor- kenntnissen etwas abmildert. Außerdem gibt es heute eine Vielzahl von kostenlos erhältlichen Entwicklungsumgebungen, so dass die Lernenden diese ohne Probleme auch auf ihren eigenen Rechnern installieren können. Was den Einsatz in der industriellen Praxis betrifft, hat Smalltalk sicher nicht die Bedeutung wie z.B. Java. Auf der anderen Seite erfreuen sich die sogenannten dy- namischen Sprachen, wie z.B. Python oder Ruby, die viele Konzepte von Smalltalk übernommen haben, einer wachsenden Beliebtheit und Verbreitung. In den allge- meinbildenden Schulen gewinnt Smalltalk in der Heranführung von Kindern an die ProgrammierunganBedeutung.HiersinddieProjekteEtoys undScratch zunennen, diebeideindemSmalltalk-DialektSqueak implementiertsind.Squeakläuftaufnahe- zu allen gängigen Systemplattformen und auch auf den OLPC1-XO-Rechnern („$100 laptop“). Es handelt sich bei diesem Buch aber nicht um einen Programmiersprachenkurs im engeren Sinne. Insbesondere geht es nicht um eine vollständige Darstellung der 1OLPCstehtfürOneLaptopPerChild vi umfangreichen Smalltalk-Klassenbibliothek. Hierfür muss auf die jeweilige Dokumen- tation der benutzten Entwicklungsumgebung verwiesen werden. Gleichwohl müssen auch grundlegende Aspekte einer Entwicklungsumgebung behandelt werden, da die ProgrammierunginSmalltalkimmerunterVerwendungeinersolchenstattfindet.Dies ist gerade für Anfänger eine zusätzliche Hürde. Denn, während früher – etwas verein- facht gesprochen – lediglich die Verwendung eines Texteditors und eines Compilers erforderlich war, müssen nun neben dem Erlernen der Grundbegriffe der Program- mierung gleichzeitig auch technische Fertigkeiten im Umgang mit einer komplexen Entwicklungsumgebung erworben werden. UnverzichtbarfüreinenEinstiegindieProgrammierungsindaberauchgrundlegen- de Kenntnisse der Konstruktion vonAlgorithmen, ein Themadasim Zusammenhang mitderObjektorientierungmeistnichtbehandeltwird.Diesistaucherforderlich,weil nurdurchdieBeschäftigungmitdenelementarenProblemenderProgrammierungdas Verständnis für die Arbeitsweise von Rechnern fundiert werden kann. Im ersten Kapitel wird der Leser zunächst insoweit in Grundbegriffe der Informa- tik eingeführt, wie es für die Programmiertechnik erforderlich ist. Im Kapitel 2 wird dann anhand eines einfachen Beispiels eine erste Einführung in die Grundlagen der Konstruktion von Algorithmen und deren Formulierung in einer konkreten Program- miersprache (hier: Smalltalk) gegeben. Das Thema Algorithmus-Konstruktion wird aber in späteren Abschnitten immer wieder aufgegriffen. Während in Kapitel 2 die typischen Begriffe der Objektorientierung noch ausge- klammert werden, stehen diese im Vordergrund von Kapitel 3, wobei gleichzeitig die entsprechenden Grundelemente der Sprache Smalltalk systematisch eingeführt wer- den. Kapitel 4 behandelt die Programmierung von Wiederholungen („Schleifen“) zu- nächstwiederumausalgorithmischerSicht.Danebenwerdendannwichtige,fürdiesen Zweck in der Sprache Smalltalk zur Verfügung stehende Methoden erläutert. Um dem Leser praktische Übungen und das Nachvollziehen der im Text benutzten Beispiele zu erleichtern, werden im Kapitel 5 einige Hinweise zur Bedienung der Ent- wicklungsumgebung VisualWorks gegeben, die für die in diesem Buch dargestellten Programmbeispiele verwendet wurde. Inden Kapiteln6,7und8steht der für die ObjektorientierungzentraleBegriff der Klasse im Mittelpunkt. Hier werden zunächst die Bestandteile einer Klassendefini- tion in Smalltalk und anschließend die Vorgehensweise beim Anlegen neuer Klassen erläutert. Schließlich folgt eine Darstellung wichtiger Basisklassen einer Smalltalk- Klassenbibliothek. Dabei werden weitere Grundbegriffe der Objektorientierung – wie Vererbung und Polymorphie – eingeführt. Den Behälterklassen ist wegen ihres Umfangs und ihrer Bedeutung ein eigenes Ka- pitel (10) gewidmet. Dazwischen wird in Kapitel 9 der Umgang mit Fehlermeldungen von Compiler und Laufzeitsystem, der in den vorangegangenen Kapiteln zum Teil schon behandelt wurde, noch einmal zusammengefasst. Falls die Leserin oder der Leser beim Nach- vollziehen der Beispiele aus den vorangehenden Kapiteln oder bei der Durchführung eigener Übungen mit solchen Fehlermeldungen konfrontiert werden sollte – was sehr wahrscheinlich ist –, kann es hilfreich sein, das Lesen dieses Kapitels vorzuziehen. InKapitel11werdenwichtigeAspektederobjektorientiertenProgrammierungmit vii Smalltalk zwecks systematischer Darstellung aufgegriffen, die teilweise bereits in den vorangehenden Kapiteln auftauchen, wie z.B. die Themen Blöcke und Vererbung. MitdemPrinzipderRekursion wirdinKapitel12nocheinmaleinwichtigerAspekt der Algorithmik aufgegriffen, der in einer Einführung in die Programmierung nicht fehlen darf. In Kapitel 13 wird kurz auf die Verarbeitung sequentieller, interner und externer Datenströmeeingegangen.Hierwirdauchgezeigt,wieausSmalltalk-Programmenauf Dateien zugegriffen werden kann. ObwohlaufdieEntwicklunggrößererSmalltalk-AnwendungenausPlatzgründenin diesemBuchnichteingegangenwerdenkann,werdeninKapitel14docheinigeelemen- tare Hinweise für die Programmgestaltung gegeben. Hinweise auf andere Quellen zu diesem und anderen Themen finden sich im Schlusskapitel 16. Auch auf den WWW- Seiten des Autors (brauer.nordakademie.de) befinden sich begleitende Informationen zu diesem Buch. Zuvor wird in Kapitel 15 noch das Schreiben von Komponententests sowie deren automatisierte Ausführung wird das behandelt. Auf eine Gegenüberstellung der herkömmlichen, prozeduralen mit der objektorien- tierten Denkweise bei der Programmierung wird verzichtet. Lesern, die bereits über Programmiererfahrung in prozeduralen Programmiersprachen verfügen, sei Literatur über die Programmiersprache Oberon-2 empfohlen. In Reiser und Wirth (1994) z.B. wird der Übergang von der imperativen zur objektorientierten Programmierung sehr gut vermittelt. Es sei an dieser Stelle noch einmal betont, dass für ein erfolgreiches Durcharbeiten dieses Buches keine Vorkenntnisse in der Programmierung erforderlich sind. Es wer- den allerdings grundlegende Fertigkeiten im Umgang mit einem fensterorientierten Betriebssystem, wie z.B einer der Windows-Varianten aus dem Hause Microsoft oder dem Mac OS von Apple Computer, vorausgesetzt. Hinweise zur Notation Programmtexte werden, soweit sie nicht innerhalb von Bildschirmdarstellungen er- scheinen, im Text in Schreibmaschinenschrift gesetzt. Das gilt auch für einzelne Smalltalk-Begriffe, wie Klassen- oder Methodennamen. Menüs oder Menüeinträge der Entwicklungsumgebung werden durch Fettdruck hervorgehoben. Die Entwicklungsumgebung FürdieErstellungderBeispieleindiesemBuchwurdedasSmalltalk-Systemmitdem Namen VisualWorks verwendet. Es handelt sich hierbei um eine weit verbreitete, professionelle Smalltalk-Entwicklungsumgebung, die von der Firma Cincom vertrie- ben wird. Von den WWW-Seiten der Firma (www.cincomsmalltalk.com) kann eine voll funktionsfähige, kostenlose Ausbildungsversion für sehr viele Systemplattformen bezogenwerden.FürdasNachvollziehenderBeispieleistessicherhilfreich,wennauch nicht zwingend, wenn dieses System der Leserin oder dem Leser zur Verfügung steht. Die Bildschirmfotos in diesem Buch sind unter Verwendung derVisualWorks-Version 7.6 erstellt worden. viii Danksagungen AnersterStellemöchteichdemVerlagundhierinsbesondereHerrnDr.Klockenbusch danken, dessen Engagement es zu verdanken ist, dass in einer Zeit, in der alle Welt nur noch von einer Programmiersprache redet, deren Name an Kaffee erinnert, die ersteAuflagediesesBuchesüberSmalltalkherauskommenkonnte.FrauSybilleThelen gebührt mein Dank für die Unterstützung des Erscheinens dieser dritten Auflage MitarbeiternderFirmaGeorgHeeggebührtmeinDankfürdiekritischeDurchsicht des ersten Manuskripts und einige wertvolle Korrekturen, Anregungen und Verbesse- rungsvorschläge.DasGleichegiltfürmeinenfrüherenKollegenanderNORDAKADE- MIE,HerrnProf.Dr.Kleuker.FrauKatrinSchimmeyerundHerrHelmutGuttenberg haben mir sehr bei dem Bemühen um orthographische und syntaktische Korrektheit des Textes geholfen. Für der Durchsicht der dritten Auflage bedanke ich mich bei Herrn Jan Bartelsen. Elmshorn, im August 2008 Johannes Brauer Inhaltsverzeichnis 1 Einige Grundbegriffe der Informatik 1 2 Konstruktion von Algorithmen 7 2.1 Fallbeispiel Währungsumrechnung . . . . . . . . . . . . . . . . . . . . 7 2.2 Das erste Smalltalk-Programm . . . . . . . . . . . . . . . . . . . . . . 8 2.2.1 Eingabe von Programmtexten . . . . . . . . . . . . . . . . . . 9 2.2.2 Ausführung von Programmen . . . . . . . . . . . . . . . . . . 11 2.2.3 Flexibilisierung der Währungsumrechnung . . . . . . . . . . . 14 2.3 Beispiel: Lösung einer quadratischen Gleichung. . . . . . . . . . . . . 17 2.3.1 Der Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3.2 Das Programm . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3.3 Verallgemeinerung der Lösung quadratischer Gleichungen . . . 21 2.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3 Grundzüge der objektorientierten Programmierung mit Smalltalk 29 3.1 Objekte, Nachrichten, Methoden. . . . . . . . . . . . . . . . . . . . . 30 3.1.1 Nachrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.1.2 Fallunterscheidung . . . . . . . . . . . . . . . . . . . . . . . . 37 3.1.3 Blöcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.1.4 Erzeugung von Objekten – Klassen . . . . . . . . . . . . . . . 38 3.2 Literale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.3 Variablen und Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . 47 3.4 Verweissemantik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 3.4.1 Nutzung des Object Explorers . . . . . . . . . . . . . . . . . . 54 4 Wiederholungen 57 4.1 Maximumsuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.2 Weitere Smalltalk-Nachrichten für Wiederholungen . . . . . . . . . . 70 4.2.1 Zählschleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.2.2 Intervalldurchlauf . . . . . . . . . . . . . . . . . . . . . . . . . 71 4.2.3 Behälterdurchlauf . . . . . . . . . . . . . . . . . . . . . . . . . 73 5 Die Entwicklungsumgebung VisualWorks 75 5.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 5.2 Starten der Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . 77 5.3 Launcher mit Transcript . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.3.1 Anlegen eines eigenen Images . . . . . . . . . . . . . . . . . . 79 5.3.2 Einstellen von Systemparametern . . . . . . . . . . . . . . . . 79 5.3.3 Benutzung des Transcripts . . . . . . . . . . . . . . . . . . . . 82 x Inhaltsverzeichnis 5.4 Workspace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 5.5 Inspector. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 5.6 Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 5.7 System-Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 6 Betrachten einer Beispielklasse: Circle 97 6.1 Klassenhierarchien und Vererbung . . . . . . . . . . . . . . . . . . . . 97 6.2 Methodenimplementierungen . . . . . . . . . . . . . . . . . . . . . . . 101 6.3 Alternativimplementierung der Klasse Circle . . . . . . . . . . . . . . 108 7 Definition neuer Klassen 113 7.1 Fallbeispiel Währungsumrechnung . . . . . . . . . . . . . . . . . . . . 113 7.1.1 Anlegen einer neuen Klasse . . . . . . . . . . . . . . . . . . . 114 7.1.2 Eigene Klassenmethoden für die Exemplarerzeugung . . . . . 120 7.1.3 Definition von Exemplarmethoden. . . . . . . . . . . . . . . . 124 7.1.4 Erweiterung des Umrechners . . . . . . . . . . . . . . . . . . . 128 7.2 Fallbeispiel Kinobetrieb . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.2.1 Analyse der Problembeschreibung . . . . . . . . . . . . . . . . 129 7.2.2 Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . 133 7.3 Definition von Klassenvariablen . . . . . . . . . . . . . . . . . . . . . 138 8 Klassenhierarchien – Vererbung – Polymorphie 141 8.1 Die Smalltalk-Klassenhierachie . . . . . . . . . . . . . . . . . . . . . . 142 8.1.1 Aufbau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 8.1.2 Das Zahlen-Konzept von Smalltalk . . . . . . . . . . . . . . . 143 8.1.3 Die Integer-Klassen . . . . . . . . . . . . . . . . . . . . . . . 148 8.1.4 Die Klassen Float, Double und Fraction . . . . . . . . . . . 154 8.1.5 Gemeinsame Methoden der Zahlenklassen . . . . . . . . . . . 155 8.1.6 Gemischte Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . 160 8.1.7 Die Wahrheitswerte . . . . . . . . . . . . . . . . . . . . . . . . 161 8.1.8 Zeichen und Zeichenketten . . . . . . . . . . . . . . . . . . . . 164 8.1.9 Datum und Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8.2 Abstrakte, konkrete Klassen . . . . . . . . . . . . . . . . . . . . . . . 172 8.3 Generische Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 8.4 Polymorphie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 8.5 Fallbeispiel Quadratische Gleichungen . . . . . . . . . . . . . . . . . . 178 8.5.1 Die Klasse QuadrGlchng . . . . . . . . . . . . . . . . . . . . . 180 8.5.2 Klassen für Lösungsobjekte . . . . . . . . . . . . . . . . . . . 182 8.5.3 Die Lösungsmethoden . . . . . . . . . . . . . . . . . . . . . . 186 8.5.4 Anwendungsbeispiele . . . . . . . . . . . . . . . . . . . . . . . 188 8.5.5 Nutzung von Vererbung und Polymorphie . . . . . . . . . . . 189 8.5.6 Testprogramme als Klassenmethoden . . . . . . . . . . . . . . 189 8.5.7 Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . 191 9 Fehlersuche in Smalltalk-Programmen 195 9.1 Syntaxfehler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 9.2 Unbekannte Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . 196