Table Of ContentAus 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