Table Of ContentDieter Monjau
S6ren Schulze
Objektorientierte Programmierung
.-- Programmierung
Assemblerprogrammierung mit dem PC
von J. Erdweg
Einfuhrung in die Programmiersprache Modula-2
von H. Pudlatz
Parallele Programmierung mit Modula-2
von E. A. Heinz
Programmieren in Pascal
von H. Feldmann
Programmieren mit Ada
von H. Feldmann
Strukturiertes Programmieren in C
von H. Feldmann
Objektorientierte Programmierung
von D. Monjau und S. Schulze
Programmieren in PUI
von E. Sturm
Einfuhrung in die Programmiersprache SIMULA
von G. Lamprecht
Programmieren in COBOL 85
von W.-M. Kahler
JSP - Einfuhrung in die Methode
des Jackson Structured Programming
von K. Kilberth
Prolog -Eine methodische EinfUhrung
von R. Cordes, R. Kruse, H. Langenderfer, H. Rust
Vieweg
Dieter Monjau
Soren Schulze
Objektorientierte
Programmierung
Ein einfOhrendes Lehrbuch mit
Beispielen in Modula-2
I I
Vleweg
Die 'Deutsche Bibliothek -CIP-Einheitsaufuahme
Monjau, Dieter:
Objektorientierte Programrnierung : ein einfiihrendes Lehrbuch
mit Beispielen in Modula-2 / Dieter Monjau ; Soren Schulze. -
Braunschweig; Wiesbaden: Vieweg, 1992
ISBN 3-528-05195-7
NE: Schulze, Soren:
Das in diesem Buch enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie
irgendeiner Art verbunden. Die Autoren und der Verlag iibernehmen infolgedessen keine
Verantwortung und werden keine daraus folgende oder sonstige Haftung iibernehmen, die auf
irgendeine Art aus der Benutzung dieses Programm-Materials oder Teilen davon entsteht.
AIle Rechte vorbehalten
© Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, BraunschweigIWiesbaden, 1992
Der Verlag Vieweg ist ein Unternehmen der Verlagsgruppe Bertelsmann International.
Das Werk einschlieBlich aller seiner Teile ist urheberrechtlich geschiitzt.
Jede Verwertung auBerhalb der engen Grenzen des Urheberrechtsgesetzes
ist ohne Zustimmungen des Verlags unzulassig und strafbar. Das gilt
insbesondere fUr Vervielfaltigungen, Ubersetzungen, Mikroverfilmungen
und die Einspeicherung und Verarbeitung in elektronischen Systemen.
Gedruckt auf saurefreiem Papier
ISBN-13: 978-3-528-05195-2 e-ISBN-13: 978-3-322-84060-8
DOl: 10.1007/ 978-3-322-84060-8
v
Vorwort
Dieses Buch bietet eine Einfiihrung in den objektorientierten Entwurf und die
objektorientierte Implementierung von Programmen. Die objektorieptierten Kon
zepte sowie die Methoden ihrer Anwendung werden an bekannten und' haufig ver
wendeten Algorithmen und Datenstrukturen erHiutert. Ais Implementierungswerk
zeug wird TopSpeed Modula-2 verwendet. Viele Beispielprogramme demonstrieren
die Anwendung der objektorientierten Vorgehensweise. Die vollstiindigen Quell
texte aller Programme sind auf einer Programmdiskette enthalten.
Die entscheidenden Faktoren zur Produktivitiits- und Qualitiitssteigerung bei der
Entwicklung groBer Softwaresysteme sind Wiederverwendbarkeit, Erweiterbarkeit
und Wartbarkeit bewiihrter und korrekt arbeitender Programmbausteine. Die beste
bekannte Moglichkeit, das zu erreichen, ist die objektorientierte Vorgehensweise.
Sie bezieht sich auf alle Phasen des Softwarelebenszyklus, das heiBt, auf die Anfor
derungsanalyse, den Entwurf und die Implementierung.
1m ersten Kapitel wird eine Einordnung der objektorientierten Konzepte in die Pha
sen und Methoden der Softwareentwicklung vorgenommen. Die Modellierung des
zu lOsenden Problems erfolgt durch Einflihrung von Objekten; jedes Objekt stellt die
Zusammenfassung einer Datenstruktur zur Beschreibung von Merkmalen und Ope
rationen (Methoden) iiber dieser Struktur dar. Objekte sind Exemplare von Klassen.
Die objektorientierte Methodik enthiilt dariiber hinaus als Konzepte den Nachrich
tenaustausch zwischen Objekten, die Vererbung in Klassenhierarchien und den
Polymorphismus. 1m zweiten Kapitel werden die Methoden der modularen Pro
grammierung, die von konventionellen, prozeduralen Programrniersprachen bekannt
sind, behandelt. Sie stellen bereits einen Schritt in Richtung des objektorientierten
Entwurfs und der objektorientierten Programmierung dar; man spricht von objekt
basierter Vorgehensweise. Objekte bzw. Klassen konnen dabei auf der Grundlage
von abstrakten Datentypen implementiert werden. Typische Anwendungen dieser
Methode wie Listen, Keller und die Modellierung von Daten in Datenbanken wer
den an Beispielen demonstriert. Bine Einfiihrung in die wesentlichen Konzepte der
objektorientierten Programmierung erfolgt im dritten Kapitel. Dabei werden geo
metrische Figuren als Objekte und Operationen zum Manipulieren der Objekte als
Methoden zugrundegelegt. Durch die behandelten Programmbeispiele werden die
Konzepte der Objekte, Klassen, des Polymorphismus, der virtuellen Methoden
sowie der Klassenhierarchie verstiindlich gemacht. 1m vierten bzw. fiinften Kapitel
wird die Anwendung der objektorientierten Konzepte flir den Entwurf und die
VI
Implementierqng komplexer Datenstrukturen wie homogene bzw. heterogene Kel
ler, Listen, Verzeichnisse und Mengen dargestellt. Gleichzeitig werden die fUr ver
schiedene Anwendungen ntitzlichen dynamischen Objekte eingeftihrt. Sie finden
beim Entwurf von Klassenhierarchien Verwendung; ihre Spezifikation erfolgt selbst
im Rahmen einer Klassenhierarchie. Als kO,mplexe Anwendung der objektorientier
ten Methoden wird im sechsten Kapitel der- Entwurf und die Implementierung einer
Fensterverwaltting zur Gestaltung des Dialogs zwischen Nutzer und Programm tiber
den Bildschirm beschrieben. SchlieBlich wird im siebenten Kapitel eine Einfiihrung
in Smalltalk gegeben. 1m Gegensatz zu den Programmiersprachen C++, Pascal (ab
Version 5.5) bzw. TopSpeed Modula-2, die aus konventionellen Sprachen durch
Erweiterung urn objektorientierte Konstrukte hervorgegangen sind, wurde Smalltalk
von vornherein als objektorientierte Sprache entwickelt. Die Konzepte von Small
talk haben wesentlichen EinfluB auf die Weiterentwicklung konventioneller Pro
grammiersprachen und Entwurfswerkzeuge gehabt.
Dieses Buch stellt ein Lehrbuch fUr objektorientierten Entwurf und Implementie
rung dar. Es setzt Kenntnisse zu den Konzepten und der Anwendung hOherer Pro
grammiersprachen bzw. praktische Erfahrungen mit einer dieser Sprachen voraUSJ
Das Buch wendet sich an Studenten der Informatik und anderer technischer Stu
dienrichtungen, die sich mit der Entwicklung von Software befassen. Es ist glei
chermaBen ntitzlich ftir Praktiker, die ihre Kenntnisse zu konventionellen Sprachen
urn eine moderne Softwareentwicklungsmethode erweitern wollen.
Die im Buch bzw. auf der Programmdiskette enthaltenen Programmbeispiele wur
den mit dem Programmiersystem TopSpeed Modula-2, Version 2, der Firma Jensen
& Partners International getestet.
Wir mochten Herm Jonas Lange fUr die anregenden Diskussionen und Hinweise
sowie Jacqueline Lindner fUr ihre Untersttitzung bei der Textgestaltung danken.
Unser Dank gilt auch den Mitarbeitern des Verlages fUr eine gute Zusammenarbeit
und Betreuung.
Chemnitz, April 1992
Dieter Monjau
Soren Schulze
VII
InhaItsverzeichnis
1 Objektorientierte Softwareentwicklung. .......................................•................... 1
1.1 Methoden der Softwareentwicklung. ............................................................. 1
1.2 Prozedurale und modulare Programmierung ................................................. 3
1.3 Objektorientierter Entwurf. ........................................................................... 6
1.4 Objekte, Klassen und Vererbung .................................................................. 9
1.5 Objektorientierte Programmierung ............................................................. 15
1.6 Objektorientiertheit und Softwarelebenszyklus ........................................... 16
1.7 Zusammenfassung ...................................................................................... 17
2 Modulare Programmierung ............................................................................ 19
2.1 Datenkapseln .............................................................................................. 19
2.2 Abstrakte Datentypen ................................................................................. 29
2.3 Objektbasierte Programmierung ................................................................. 43
2.4 Zusammenfassung ...................................................................................... 66
2.5 Ubungsaufgaben ......................................................................................... 68
3 Grundlagen der objektorientierten Programmierung ................................... 71
3.1 Objekte ....................................................................................................... 71
3.2 Klassen ....................................................................................................... 72
3.3 Vererbung .................................................................................................. 75
3.4 Polymorphismus und virtuelle Methoden .................................................... 78
3.5 Ein einfaches Anwendungsbeispiel.. ........................................................... 79
3.6 Eine Klassenhierarchie fUr geometrische Figuren ....................................... 82
3.7 Abstrakte Klassen ....................................................................................... 88
3.8 Zusammenfassung ...................................................................................... 91
3.9 Ubungsaufgaben ......................................................................................... 94
4 Dynamische Objekte ........................................................................................ 97
4.1 Vorbetrachtungen zu Kellerspeichern ......................................................... 97
4.2 Objektorientierter Entwurf von homogenen Kellerspeichern ....................... 98
4.3 Keller mit dynarnischen Objekten ............................................................. 11 0
4.4 Ein heterogener Keller .............................................................................. 117
4.5 Zusammenfassung .................................................................................... 125
4.6 Ubungsaufgaben ....................................................................................... 127
5 Objektorientierter Entwurf von Datenstrukturen ....................................... 131
5.1 Lineare Listen ........................................................................................... 131
VIII
5.2 Mengen .................................................................................................... 154
5.3 Ubungsaufgaben ....................................................................................... 169
6 Der Entwurf komplexer Systeme .................................................................. 171
6.1 Konstruktionsprinzipien ............................................................................ 171
6.2 Eine Klassenhierarchie fUr Dialogelemente. .............................................. 174
6.2.1 Zielstellung ..................................................................................... 174
6.2.2 Nachrichtenaustausch ...................................................................... 174
6.2.3 Klassenhierarchie ............................................................................ 180
6.2.4 Prototyp einer Applikationen .......................................................... 189
7 Smalltalk ........................................................................................................ 191
7.1 Sprachelemente ........................................................................................ 192
7.1.1 Literale und Variablen .................................................................... 192
7.1.2 Botschaften ..................................................................................... 195
7.1.3 Blocke und Kontrollstrukturen ........................................................ 196 ~
7.2 Objekte ..................................................................................................... 199
7.2.1 Klassenbildung und Vererbung ................................................... :~ .. 199,
7.2.2 Die Erzeugung von Objekten .......................................................... 203
7.2.3 Metaklassen .................................................................................... 206
7.2.4 Vordefinierte Objekte ..................................................................... 209
7.3 Die virtuelle Maschine .............................................................................. 210
7.4 Zusammenfassung .................................................................................... 212
7.5 Ubungsaufgaben ....................................................................................... 214
Anhang ............................................................................................................... 215
A Syntax der objektorientierten Erweiterungen .......................... _. ................ 215
A.l Klassendeklarationen ............................................................................... 215
A.2 Objektdeklarationen ................................................................................. 217
A.3 Ausfiihren von Methoden ......................................................................... 217
A.4 Vererbung ................................................................................................ 217
A.5 Kompatibilitatsregeln ............................................................................... 218
B Inhalt der Programmdiskette ....................................................................... 219
Literaturhinweise ............................................................................................... 220
Bildverzeichnis ................................................................................................... 2~1
Sachwortverzeichnis .......................................................................................... 223
1
1 Objektorientierte Softwareentwicklung
1.1 Methoden der Softwareentwicklung
Das grundsiitzliche Ziel der Softwaretechnik besteht in der Bereitstellung von Me
thoden und Werkzeugen, die dazu beitragen sollen, groBe und komplexe Software
systeme mit hoher Qualitiit kostengiinstig herzustellen und anzuwenden.
Die Qualitiit von Software wird durch verschiedene Faktoren bestimmt. FUr den
Nutzer der Software sind folgende Faktoren von groBer Bedeutung:
• Korrektheit als Eigenschaft von Software, ihre durch Anforderungen und Spezi
flkationen definierten Aufgaben exakt zu erfUllen
• Robustheit als Eigenschaft von Software, auch unter auBergewohnlichen Bedin
gungen zu funktionieren
• Erweiterbarkeit als Fiihigkeit, Software an Speziflkationsiinderungen anzupassen
• Wiederverwendbarkeit als Fiihigkeit von Software, ganz oder teilweise flir neue
Anwendungen verwendet zu werden
• Kompatibilitiit als Fiihigkeit von Software, sie mit anderer Software zu verbinden
Daneben spielen weitere Faktoren wie Effizienz, Portabilitiit, Verifizierbarkeit, In
tegritiit und Benutzerfreundlichkeit fUr die Qualitiit von Software eine Rolle.
Die ersten flinf genannten Qualitiitsfaktoren spielen in der heutigen Praxis der Soft
wareentwicklung eine SchlUsselrolle. Die entscheidenden Faktoren zur Produktivi
tiits- und Qualitiitssteigerung bei der Entwicklung groBer Softwaresysteme sind die
Wiederverwendbarkeit, Erweiterbarkeit und Kompatibilitiit bewiihrter und korrekt
arbeitender Prograrnmbausteine. Die beste bekannte Moglichkeit zur Entwicklung
von wiederverwendbarer, erweiterbarer bzw. kompatibler Software ist die objekt-
2 1 Objektorientierte Softwareentwicklung
orientierte Vorgehensweise. Methoden zur Sicherung von Korrektheit und Robust
heit konnen organisch mit dem objektorientierten Ansatz verbunden werden.
Urn die Qualitatsanforderungen zu erfiillen, stehen dem Softwareentwickler eine
Reihe von Methoden und Werkzeugen zur Verfiigung. Die systematische Vorge
hensweise bei der Softwareentwicklung und -nutzung wird grundlegend durch die
Anwendung des Phasenmodells (auch Softwarelebenszyklus genannt) gesichert.
Dieses Modell unterscheidet bei der Softwareentwicklung zwischen den folgenden
charakteristischen Phasen, die nacheinander bzw. gegebenenfalls auch wiederholt
durchlaufen werden miissen:
Phase 1: Analyse und Spezifizieren der Anforderungen
Phase 2: Entwurf
Phase 3: Implementation
Phase 4: .T est
Die im Rahmen dieser Phasen entwickelte Software wird anschlieBend in die Nut
zung, die meist auch mit einer Wartung verbunden ist, iiberfiihrt.
Folgende Entwurfsmethoden bzw. Gliederungsstrukturen wendet der Softwareent
wickler im Rahmen des Phasenmodells an, urn die geforderten Qualitatsmerkmale
zu erreichen:
• Hierarchisches Gliedern
• Schrittweises Verfeinern
• Top-down- bzw. bottom-up-Vorgehensweise
• Strukturiertes Prograrnmieren
• Blockstruktur
• ProzedurenlFunktionen
• Module
• Kapselung
• Funktionale bzw. Datenabstraktion
• Validation
• Dokumentation
Die objektorientierte Vorgehensweise ist die logische Weiterentwicklung der mo
dulorientierten Vorgehensweise. Das Objektmodell ist eine Anwendung der Kon
zepte Abstraktion, Kapselung, Modularitat und Hierarchie.