Table Of ContenteXamen.press
eXamen.pressisteineReihe,dieTheorieund
PraxisausallenBereichenderInformatikfür
dieHochschulausbildungvermittelt.
Gerhard Goos
Wolf Zimmermann
Vorlesungen über
Informatik
Band 2: Objektorientiertes
Programmieren und Algorithmen
4.überarbeiteteAuflage
Mit120Abbildungenund12Tabellen
123
GerhardGoos
FakultätfürInformatik
UniversitätKarlsruhe
Adenauerring20A
76128Karlsruhe
[email protected]
WolfZimmermann
InstitutfürMathematikundInformatik
UniversitätHalle-Wittenberg
Von-Seckendorff-Platz1
06120Halle
[email protected]
Die3.AuflageerschieninderReihe"Springer-Lehrbuch"
BibliografischeInformationderDeutschenBibliothek
DieDeutscheBibliothekverzeichnetdiesePublikationinderDeutschen
Nationalbibliografie;detailliertebibliografischeDatensindimInternetüber
http://dnb.ddb.deabrufbar.
ISSN1614-5216
ISBN-103-540-24403-4SpringerBerlinHeidelbergNewYork
ISBN-13978-3-540-24403-9SpringerBerlinHeidelbergNewYork
ISBN-103-540-3-540-41511-43.AuflageSpringerBerlinHeidelbergNewYork
DiesesWerkisturheberrechtlichgeschützt.DiedadurchbegründetenRechte,insbesondere
diederÜbersetzung,desNachdrucks,desVortrags,derEntnahmevonAbbildungenund
Tabellen,derFunksendung,derMikroverfilmungoderderVervielfältigungaufanderenWe-
genundderSpeicherunginDatenverarbeitungsanlagen,bleiben,auchbeinurauszugsweiser
Verwertung,vorbehalten.EineVervielfältigungdiesesWerkesodervonTeilendiesesWerkes
istauchimEinzelfallnurindenGrenzendergesetzlichenBestimmungendesUrheberrechts-
gesetzesderBundesrepublikDeutschlandvom9.September1965inderjeweilsgeltenden
Fassungzulässig.Sieistgrundsätzlichvergütungspflichtig.Zuwiderhandlungenunterliegen
denStrafbestimmungendesUrheberrechtsgesetzes.
SpringeristeinUnternehmenvonSpringerScience+BusinessMedia
springer.de
©Springer-VerlagBerlinHeidelberg1995,1997,2000,2006
PrintedinGermany
DieWiedergabevonGebrauchsnamen,Handelsnamen,Warenbezeichnungenusw.indiesem
WerkberechtigtauchohnebesondereKennzeichnungnichtzuderAnnahme,dasssolche
NamenimSinnederWarenzeichen-undMarkenschutz-Gesetzgebungalsfreizubetrachten
wärenunddahervonjedermannbenutztwerdendürften.TextundAbbildungenwurden
mitgrößterSorgfalterarbeitet.VerlagundAutorkönnenjedochfüreventuellverbliebene
fehlerhafteAngabenundderenFolgenwedereinejuristischeVerantwortungnochirgendeine
Haftungübernehmen.
Satz:DruckfertigeDatenderAutoren
Herstellung:LE-TEX,Jelonek,Schmidt&VöcklerGbR,Leipzig
Umschlaggestaltung:KünkelLopkaWerbeagentur,Heidelberg
GedrucktaufsäurefreiemPapier 33/3142YL – 543210
Inhaltsverzeichnis
Vorwort ix
8 Zustandsorientiertes Programmieren 1
8.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . 2
8.1.1 VariableundKonstante . . . . . . . . . . . . . . . . 3
8.1.2 Vereinbarungen,Programme . . . . . . . . . . . . . 5
8.1.3 Gültigkeitsbereich undLebensdauer . . . . . . . . . . 7
8.1.4 TypenundOperationen . . . . . . . . . . . . . . . . 9
8.1.5 Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . 14
8.1.6 Ablaufsteuerung . . . . . . . . . . . . . . . . . . . . 16
8.2 Zusicherungskalkül . . . . . . . . . . . . . . . . . . . . . . 33
8.2.1 AxiomedesZusicherungskalküls . . . . . . . . . . . 40
8.2.2 Zuweisung . . . . . . . . . . . . . . . . . . . . . . 41
8.2.3 Hintereinanderausführung,Blöcke . . . . . . . . . . 43
8.2.4 BedingteAnweisungen . . . . . . . . . . . . . . . . 46
8.2.5 BewachteAnweisungenunddieFallunterscheidung . . 49
8.2.6 Schleifen . . . . . . . . . . . . . . . . . . . . . . . 51
8.2.7 Prozeduren . . . . . . . . . . . . . . . . . . . . . . 60
8.2.8 Ausnahmebehandlung . . . . . . . . . . . . . . . . . 71
8.3 AnmerkungenundVerweise . . . . . . . . . . . . . . . . . . 72
9 StrukturiertesProgrammieren 73
9.1 Schrittweise Verfeinerung . . . . . . . . . . . . . . . . . . . 74
9.2 DatenverfeinerungamBeispielSortieren. . . . . . . . . . . . 84
9.2.1 DieAufgabe . . . . . . . . . . . . . . . . . . . . . . 84
9.2.2 SortierendurchAuswahl . . . . . . . . . . . . . . . 86
9.2.3 SortierendurchEinfügen . . . . . . . . . . . . . . . 91
9.2.4 SortierendurchZerlegen . . . . . . . . . . . . . . . 94
9.2.5 Baumsortieren . . . . . . . . . . . . . . . . . . . . . 97
9.2.6 SortierendurchMischen . . . . . . . . . . . . . . . 105
9.2.7 DieminimaleAnzahlvonVergleichen . . . . . . . . . 111
9.2.8 StellenweisesSortieren . . . . . . . . . . . . . . . . . 113
vi Inhaltsverzeichnis
9.3 ProgrammierenmitObjekten . . . . . . . . . . . . . . . . . 119
9.3.1 ZusammengesetzteObjekte . . . . . . . . . . . . . . 121
9.3.2 Referenztypen . . . . . . . . . . . . . . . . . . . . . 124
9.3.3 AnonymeObjekte . . . . . . . . . . . . . . . . . . . 128
9.4 Modularität . . . . . . . . . . . . . . . . . . . . . . . . . . 133
9.4.1 ModulnundKlassen . . . . . . . . . . . . . . . . . 136
9.4.2 Zugriffsschutz . . . . . . . . . . . . . . . . . . . . . 138
9.4.3 VerträgefürModulnundKlassen . . . . . . . . . . . 140
9.4.4 Klassenattributeund-methoden . . . . . . . . . . . 141
9.4.5 GenerischeKlassen . . . . . . . . . . . . . . . . . . 144
9.4.6 ImportierenvonModuln . . . . . . . . . . . . . . . 147
9.5 AnmerkungenundVerweise . . . . . . . . . . . . . . . . . . 149
10 Objektorientiertes Programmieren 151
10.1 VererbungundPolymorphie . . . . . . . . . . . . . . . . . . 152
10.2 GrundbegriffederModellierung . . . . . . . . . . . . . . . . 160
10.2.1 SystemeundTeilsysteme . . . . . . . . . . . . . . . 160
10.2.2 ObjekteundKlassen . . . . . . . . . . . . . . . . . 162
10.3 ObjektorientiertesModellieren . . . . . . . . . . . . . . . . 167
10.3.1 KooperationvonObjekten . . . . . . . . . . . . . . 169
10.3.2 Objektmodell . . . . . . . . . . . . . . . . . . . . . 175
10.3.3 Verhaltensmodell . . . . . . . . . . . . . . . . . . . 182
10.3.4 VererbungundVerallgemeinerung,Polymorphie . . . 191
10.3.5 RestrukturierungdesEntwurfs . . . . . . . . . . . . 192
10.3.6 Beispiel: DerScheckkartenautomat . . . . . . . . . . 194
10.4 VomModellzumProgramm . . . . . . . . . . . . . . . . . . 205
10.4.1 UmsetzungdesModellsindieProgrammiersprache . . 205
10.4.2 Ströme . . . . . . . . . . . . . . . . . . . . . . . . 213
10.4.3 GebundeneMethoden . . . . . . . . . . . . . . . . 221
10.5 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . 225
10.5.1 AbstrakteKlassenundPolymorphie . . . . . . . . . . 225
10.5.2 MengenundMehrfachmengen . . . . . . . . . . . . 228
10.5.3 Graphen . . . . . . . . . . . . . . . . . . . . . . . . 256
10.6 AnmerkungenundVerweise . . . . . . . . . . . . . . . . . . 265
Inhaltsverzeichnis vii
11 VomProgrammzurMaschine 267
11.1 DieSpracheSimplicius . . . . . . . . . . . . . . . . . . . . 269
11.1.1 Sprünge . . . . . . . . . . . . . . . . . . . . . . . . 270
11.2 BerechnungvonAusdrücken . . . . . . . . . . . . . . . . . . 272
11.3 TransformationderAblaufsteuerung . . . . . . . . . . . . . . 277
11.3.1 BedingteAnweisungen . . . . . . . . . . . . . . . . 277
11.3.2 Fallunterscheidungen . . . . . . . . . . . . . . . . . 280
11.3.3 Schleifen . . . . . . . . . . . . . . . . . . . . . . . 281
11.4 Datenrepräsentation,Register,Speicherzugriff . . . . . . . . . 281
11.4.1 Speicherabbildung . . . . . . . . . . . . . . . . . . . 284
11.4.2 Unterprogrammaufrufe . . . . . . . . . . . . . . . . 296
11.5 Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
11.6 DasRAM-Modell . . . . . . . . . . . . . . . . . . . . . . . 301
11.6.1 Berechenbarkeit . . . . . . . . . . . . . . . . . . . . 303
11.7 AnmerkungenundVerweise . . . . . . . . . . . . . . . . . . 306
12 Algorithmenkonstruktion II 307
12.1 DynamischesProgrammieren . . . . . . . . . . . . . . . . . 307
12.1.1 BerechnungvonBinomialkoeffizienten . . . . . . . . 308
12.1.2 OptimaleKlammerungvonMatrixprodukten . . . . . 310
12.1.3 ZerteilungkontextfreierSprachen . . . . . . . . . . . 312
12.2 AmortisierteAnalyse . . . . . . . . . . . . . . . . . . . . . . 314
12.2.1 DatenstrukturenfürdisjunkteMengen . . . . . . . . 316
12.3 Vorberechnung . . . . . . . . . . . . . . . . . . . . . . . . . 324
12.3.1 EinfacheTextsuche . . . . . . . . . . . . . . . . . . 324
12.3.2 TextsuchenachKnuth,Morris,Pratt . . . . . . . 325
12.4 ZufallsgesteuerteAlgorithmen . . . . . . . . . . . . . . . . . 333
12.4.1 MonteCarloAlgorithmen . . . . . . . . . . . . . . . 334
12.4.2 LasVegasAlgorithmen . . . . . . . . . . . . . . . . 339
12.5 AnmerkungenundVerweise . . . . . . . . . . . . . . . . . . 346
Literaturverzeichnis 347
C SatherimÜberblick 351
C.1 Syntaxdiagramme . . . . . . . . . . . . . . . . . . . . . . . 351
C.1.1 Grundsymbole . . . . . . . . . . . . . . . . . . . . 351
C.1.2 KlassenvereinbarungenundTypen . . . . . . . . . . 352
C.1.3 Methodenrümpfe . . . . . . . . . . . . . . . . . . . 356
C.1.4 Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . 358
C.2 Basisbibliothek . . . . . . . . . . . . . . . . . . . . . . . . . 360
viii Inhaltsverzeichnis
Programmverzeichnis 363
Stichwortverzeichnis 365
Aus dem Vorwort zur ersten Auflage
Dieser zweite Band baut in vielfältiger Weise auf den Ergebnissen des ersten
Bandes auf, den wir nur mit Angabe der Abschnittsnummern zitieren. Die
grundsätzlichen Bemerkungen aus dem Vorwort des ersten Bande gelten auch
hier. Im Vordergrund steht jetzt jedoch die Konstruktion von Systemen, die
eineninternenZustandbesitzen,undvonAlgorithmen.
Für die nachprüfbar korrekte Realisierung eines sequentiellen Algorithmus
zu vorgegebener Spezifikation stehen uns mit den Zusicherungskalkülen von
HoareundDijkstramächtige,mathematischsauberfundierteHilfsmittel zur
Verfügung.Diesenist–nacheinemkurzenAbrißderGrundbegriffeimperativen
Programmierens–dasKapitel8gewidmet.FürdiePraxisisteswichtig,daßsich
derStudentdenUmgangmitVor-undNachbedingungen,Schleifeninvarianten
usw.soaneignet,daßerdieseDenkweiseauchbeiAufgabenbenutzenkann,die
sichmathematischnichtsoeinfachspezifizierenlassenwiedieBeispieleausKap.
8unddernachfolgendenKapitel.DerGebrauchdesPrädikatenkalkülsdarfnicht
dazu führen, daß man die Denkweise des Zusicherungskalküls aufgibt, sobald
dieBegriffenichtmehrbequemformalisierbarsindoderdieFormelnunhandlich
werden.
Zielorientierterodertop-down-EntwurfundschrittweiseVerfeinerungunter
EinsatzvonDatenabstraktionsinddienatürlicheErweiterungdesZusicherungs-
kalkülsaufgrößereAufgaben.DieseEntwurfsmethodikbehandelnwirinKap.9.
AlsBeispieledienenSortieralgorithmen,diejederInformatikerbeherrschensoll-
te.ZurDatenabstraktionundDatenverfeinerunggehörtnatürlichnichtnurder
UmgangmitReihungenwiebeidenSortierverfahren,sondernauchderUmgang
mitanonymenObjektenaufderHaldeundderModulbegriffewiemandasaus
Sprachen wie Modula-2 kennt. Die zugehörigen Begriffe werden im Hinblick
aufdasnachfolgendeKapitelhiernurkurzbehandelt.
ZielorientierterEntwurfgehtvoneinerSpezifikationaus,dieerschrittweise
in eine ausführbare Fassung bringt. Hingegen versteht objektorientiertes Mo-
dellieren ein System als eine Menge kooperierender Objekte. Für die einzelnen
ObjekteundihreMethodenistdieVerwendungdesZusicherungskalkülszweck-
mäßig; die Verfahren der vorigen Kapitel erscheinen jetzt als Methoden zum
Programmieren-im-Kleinen.
Die Vorstellung kooperierender Objekte vermittelt jedoch einen anderen
DenkansatzzumProgrammieren-im-GroßenalszielorientierterEntwurf.Nicht
dieinsichgeschlosseneLösungeinesvorgegebenenProblems,sonderndieKon-
x Vorwort
struktion eines erweiterbaren, durch Austausch von Bausteinen änderbaren Sy-
stems ist das Ziel. Damit einher geht die Konstruktion von Einzelbausteinen,
Bibliotheken solcher Bausteine und spezialisierbaren Rahmensystemen, die für
diese ArtderSystemkonstruktioneinsetzbarsind. DerUmgangmit Vererbung,
Generizität, Polymorphie und anderen beliebten Schlagworten objektorientier-
tenProgrammierensistHilfsmittelzumZweck,abernichthauptsächlichesLern-
ziel.AusdiesemGrundebeginnenwirinKap.10nichtaufderProgrammierebe-
ne,sondernmitobjektorientierterModellierung.BeimGebrauchinVorlesungen
ist es sinnvoll, dasausführliche Beispiel in 10.3.6 in denMittelpunkt zustellen
unddieMethodikin10.3ausgehendvondiesemBeispielzubehandeln.
Objektorientierte Modellierung können wir leider nicht wie den zielorien-
tierten Entwurf mit einem systematischen Kalkül begleiten. Die Modellierung
erscheint daher als eine Kunst, für die es zwar Hilfsmittel und methodische
Unterstützung gibt; die durchgängige Verifikation kann jedoch erst für den
fertiggestellten Entwurf geleistet werden undsetzt dort vorher spezifizierte und
verifizierteWerkzeugevoraus.DiesistnichteinFehlerdesobjektorientiertenAn-
satzes, sondern spiegelt den noch nicht ausreichenden Stand der theoretischen
BeherrschungerweiterbarerundverteilbarerSystemewider.
Jedes Objekt eines solchen Systems erscheint nach außen als ein sequenti-
ell arbeitender Baustein. Das Gesamtsystem könnte auch parallel oder verteilt
arbeiten. Die Modellierung nimmt auf sequentielle Ausführung keine Rück-
sicht. Erst die Umsetzung des Modells befaßt sich mit dieser Frage und baut
auf sequentiellen Bausteinen und Teilsystemen auf. Die Erörterung sequentiel-
lerobjektorientierterStrukturenaufderEbeneeinerProgrammiersprachebildet
den zweiten Teil des Kap. 10. Wir üben diese Strukturen am Beispiel der ab-
straktenDatenstrukturenMengeundGraphundverschiedenen Realisierungen
davon. Damit führen wir zugleich die mit den Sortieralgorithmen begonnene
BehandlungvonAlgorithmenundDatenstrukturenweiter.
DasKap.11schließtdieEinführungderprogrammiertechnischenHilfsmit-
telmitderErörterungderAbbildungderelementarenAblauf-undDatenstruk-
turenaufdenBefehlssatzvonvon-Neumann-Rechnernundaufden(stückweise)
linearen Speicher ab. Fragen der Befehlsanordnung, der Fließbandverarbeitung
in superskalaren Prozessoren und vor allem die Ausnutzung der lokalen Spei-
chervonProzessorenmacheneszunehmendschwieriger,vonHandProgramme
inMaschinensprachezuschreiben, derenLeistungmitautomatischübersetzten
Programmen konkurrieren kann. Die Behandlung von Maschinensprachen be-
schränktsichdaheraufdieVorstellung vonPrinzipien undgehtnichtmehrauf
eineexpliziteProgrammierungaufdieserAbstraktionsebeneein.
Kap.11führtauchdieRAM-ModellevonRechnernalsGrundlagefüreine
präziseAufwandsberechnungein.DieexakteDefinitiondesBerechenbarkeitsbe-