Andreas Solymosi

Objekte von Anfang an

Ein Programmierlehrbuch für Ada95 extern.gif (1249 Byte)

Hypertext-Version

kann auf CD-ROM erworben werden.

© APSIS GmbH extern.gif (1249 Byte), Polling, 1997


Inhaltsverzeichnis

Legende
Vorwort
Danksagungen
Die Begleitdiskette
1. Informelle Einführung
2. Abstrakte Datenobjekte und -typen
3. Werte
4. Ereignissteuerung
5. Standard-Aufzählungstypen
6. Aufzählungstypen
7. Abstrakte Multibehälter
8. Konglomerate
9. Dynamische Datentypen
10. Arithmetik
11. Numerik
12. Steuerstrukturen
13. Algorithmen
14. Vererbung und Polymorphie
15. Nebenläufigkeit
16. Software Engineering
Glossar
Lösungen
Die Bibliothek
Literatur
Ausführliches Inhaltsverzeichnis


Vorwort

Die Zeiten des Programmierens sind vorbei. Ebenso wie die Zeiten des Lötens.

Während vor einem Jahrzehnt Informatiker mit Lötkolben und Spannungsmeßgeräten ausgerüstet werden mußten, um zwei Rechner miteinander zu verbinden, ermöglicht heute die "plug and play"{auf deutsch etwa: einstecken und loslegen}-Technologie das Verbinden standardisierter Hardwarekomponenten im Handumdrehen. Vereinheitlichte Schnittstellen und Stecker machen die Kenntnisse über die internen Vorgänge überflüssig.

Vor 10 Jahren hatten auch Informatiker mit intensiven Programmierkenntnissen durchaus gute Berufschancen; heute sind solche nicht mehr gefragt. Nur ein kleiner Teil der eingestellten Computerspezialisten beschäftigt sich mit der Formulierung neuer Algorithmen. Die überwiegende Anzahl wird eingesetzt, um vorhandene Hard- und Softwarebausteine {sog. Standardlösungen} zusammenzustecken und den Bedürfnissen des Arbeitgebers anzupassen. Sie müssen das Innenleben dieser Bausteine nicht kennen - sie könnten es gar nicht in Anbetracht deren großer Anzahl und hoher Komplexität. Sie betrachten nur ihr Äußeres, eine Art Bedienungsanleitung, ihre Schnittstelle zur Umgebung. Sie müssen verstehen, welche Teile dieser Schnittstelle für die gegebene Aufgabe relevant sind und wie sie mit anderen Bausteinen zusammengefügt werden kann. Das traditionelle Programmieren von Verzweigungen und Schleifen, Bits und Bytes, Integers und Characters kommt nur am Rande vor.

Diese Erfahrung ist die Quelle des Konzepts, das diesem Lehrbuch zugrunde liegt, Programmiersprachen anders als bisher zu unterrichten: Im Mittelpunkt des Objektorientierten "plug and play" sollen nicht mehr die sprachlichen Strukturen, sondern das Zusammenfügen vorhandener Programmbausteine stehen. Dies bedeutet einerseits, daß der Lehrling zu Beginn mit den "höheren" Sprachkonzepten (wie Module, Klassen, generische Einheiten, usw.) konfrontiert wird. Also lernt man die Sprache "von oben": Während man konventionell überwiegend mit Hilfe der "niedrigen" Sprachelemente (wie Bits, Bytes, Ganzzahlen, Verzweigungen, Schleifen) programmiert, fördert das Programmieren von oben das abstrakte Denken durch die Benutzung der Schnittstellen der Bausteine, ohne ihre Interna zu kennen.

Auf der niedrigen Ebene sollte man demnach nur dann programmieren, wenn keine geeigneten Bausteine vorhanden sind. Somit entspricht es durchaus dem gängigen Trend der modernen Softwareentwicklung: Das Programmieren im Kleinen sollte demnach reduziert und das Programmieren im Großen betont werden. Das projektübergreifende Programmieren - man könnte es Programmieren im sehr Großen nennen - steckt heute noch in Kinderschuhen, auch wenn die Entwicklung in diese Richtung (z.B. OLE, Frameworks, usw.) absehbar ist.

Als Basis für diese Vorgehensweise wurde die Programmiersprache Ada gewählt, obwohl sie umstritten ist. Weil sie vom amerikanischen Militär gefördert wird, sprechen für viele vor allem ideologische Gründe dagegen. Es gibt aber auch fachliche Einwände: Sie sei zu groß, wissenschaftlich nicht ausreichend fundiert, daher unsicher. Sie sei schwer zu erlernen und unbequem zu benutzen.

Die Entwicklungtrends im Software Engineering unterstützen jedoch die Konzepte, die der Sprache Ada zugrunde liegen. In Informatikstudiengängen von Hochschulen {so auch an der Technischen Fachhochschule Berlin}, an denen das Fach Softwaretechnologie einen Schwerpunkt bildet, wird sie zunehmend mit Erfolg eingesetzt. Gerade ihre Strenge zwingt die Studenten zum disziplinierten Programmieren. Sie werden von Anfang an daran gewöhnt, ihrer Phantasie nicht zu viel Raum zu lassen, wie das in anderen Sprachen wie etwa in C möglich ist. In höheren Semestern durchgeführte Softwareentwicklungsprojekte zeigen die positiven Auswirkungen dieser Vorgehensweise.

Nichtsdestotrotz wird Ada meistens mit traditionellen pädagogischen Konzepten unterrichtet: Die Programmierung im Kleinen wird zuerst erarbeitet, indem Steuerstrukturen und skalare Datentypen eingeführt werden. Die Studenten lernen Schleifen und Bits zu programmieren, ihre Übungsaufgaben als monolitische Programme zu lösen. Die Ideen für die Programmierung im Großen (wie Pakete) werden erst später, wenn überhaupt, eingeführt; für viele gelten diese als höhere Konzepte, und ihre zentrale Rolle wird wenig wahrgenommen. Das Ergebnis ist, daß manche so geprägte Studenten in höheren Semestern C-Programme schreiben, als ob sie nie Ada gelernt hätten.

In diesem Lehrbuch wird der Versuch unternommen, Ada auf unkonventionelle Weise zu unterrichten. Es werden weniger die Möglichkeiten der Sprache vorgestellt, vielmehr eine - nach Meinung des Autors vernünftige - Art von Programmierstil und -denken, sowie der Weg, wie dies in Ada ausgedrückt werden kann. So können dem Studenten schon zu Anfang Konzepte selbstverständlich werden, die sich andere erst als Fortgeschrittene oder gar nicht aneignen. Die Sprachelemente, die traditionell am Anfang des Unterrichts eingeführt werden, werden erst in den hinteren Kapiteln behandelt. Manche, die - nach Meinung des Autors - der Programmierdisziplin schaden, werden übergangen. Daher ist dies kein Lehrbuch für die Sprache Ada. Es ist vielmehr ein Lehrbuch für Programmieren - und zwar nach dem Prinzip "plug and play": Das Programmieren wird "von oben" gelernt.

Zuerst werden also die "höheren Konzepte", (ohne die einfacheren Sprachelemente) unterrichtet. Die Einführung von Fallunterscheidungen, Wiederholungen und sogar der Ganzzahltypen wird so weit wie möglich hinausgeschoben. Dafür werden Module, abstrakte Datentypen und generische Programmeinheiten gleich zu Anfang benutzt, ohne dabei zu erläutern, was sich hinter ihnen versteckt. Hierdurch soll das abstrakte Denken gefördert werden: Der Gebrauch von vorhandenen Programmbausteinen ist auch ohne die Kenntnisse ihrer Interna möglich. Professionelle Werkzeugkästen (wie etwa eine Unix-Toolbox) unterstützen diese Philosophie.

Der Ansatz zur Vererbungsprogrammierung ist dadurch naturgemäß. Die in Ada95 neu eingeführten Konzepte für das objektorientierte Programmieren werden dabei genutzt; diese führen zum Konzept der Wiederverwendbarkeit beim Programmieren. Es wird angestrebt, daß sich die Studenten - im Gegensatz zur üblichen Praxis - daran gewöhnen, zuerst nach vorhandenen Bausteinen zu suchen, und selbst zu programmieren erst, wenn sie nichts finden.

Das vorgestellte Unterrichtskonzept und das Programmierparadigma sind an sich sprachunabhängig. Ein ähnliches Lehrbuch existiert für die Sprachen Object Pascal und C++ {s. [Sol] im Literaturverzeichnis}, Versionen für andere Sprachen wie Oberon oder Java sind in Vorbereitung. Die Objektorientierung ist dabei eine Voraussetzung, auch wenn die Chancen der Vererbung und Polymorphie erst zum Schluß als Höhepunkt wirklich ausgenutzt werden. Nichtsdestotrotz wird der Hauptgedanke des objektorientierten Programmierens, nämlich die Wiederverwendbarkeit, von Anfang an stark betont.

Das Lehrbuch vermittelt keine Fähigkeiten zur Algorithmisierung; komplexe Ablaufvorgänge müssen in anderem Rahmen erlernt werden. Ebenfalls werden kaum Kenntnisse zum Entwurf einer Modul- oder Klassenhierarchie unterrichtet: Die Schnittstellen werden als gegeben vorausgesetzt. Es wird nur das Handwerkszeug vorgestellt, wie vorhandene Bausteine zusammengefügt werden können.

Das Lehrbuch führt zum Verständnis der neuen Version Ada95, es wird aber hauptsächlich mit der verbreiteten Version Ada83 gearbeitet {in Kommentaren werden jedoch die deutschen Zeichen ä, ö, ü und ß - der besseren Lesbarkeit willen - verwendet, obwohl in Ada83 - im Gegensatz zu Ada95 - dies verboten ist}. Die meisten Aufgaben sind daher mit einem Ada83-Übersetzer lösbar. Diejenigen, die besonders als Ada95-Programme gekennzeichnet sind, können auch theoretisch durchgearbeitet werden, wenn kein Ada95-Compiler zur Verfügung steht.

Die im Lehrbuch aufgeführten Beispielprogramme sind mit den PC-Versionen der Compiler Meridian-Ada sowie Object Ada der Firma Aonix ausgetestet worden. Die Bibliotheken stehen für diese Compiler bereit; für andere Compiler müssen sie aus den vorliegenden Quellprogrammen neu erzeugt werden.

Abgesehen von eventuell auftretenden Installationsproblemen des Compilers und der Bibliothek auf der Begleitdiskette ist das Buch auch fürs Selbststudium geeignet. Kenntnisse in Ada oder in anderen Programmiersprachen stellen zwar Hindernisse dar, sie können aber durch Disziplin überwunden werden.

Die eingeführte Begrifflichkeit stimmt nur teilweise mit der in der offiziellen Ada-Sprachdefinition und mit verbreiteten Termini überein. Vielmehr wird eine Terminologie eingeführt, die das Verständnis der Wiederverwendbarkeit unterstützt. Auf die Unterschiede zur Ada-Terminologie oder dem üblichen Sprachgebrauch wird gegebenenfalls hingewiesen. Im Glossar werden solche spezielle Begriffsdefinitionenmit dem Zeichen & extra gekennzeichnet.


Danksagungen

Für die Hilfe, die ich während des Verfassens dieses Lehrbuchs erhalten habe, bin ich meiner Kollegin Prof. Dr. D. Weber-Wulff sowie meinen Kollegen Prof. Dr. W. Brecht, Prof. Dr. U. Grude und Prof. Chr. Knabe von der Technischen Fachhochschule Berlin, sowie meinem ehemaligen Promotionsbetreuer Prof. Dr. H.-J. Schneider von der Universität Erlangen-Nürnberg sehr dankbar, die Teile meiner Entwürfe durchgelesen und durch ihre zahlreichen Bemerkungen zur inhaltlichen Qualität wesentlich beigetragen haben. Der schlagkräftige Titel stammt von meiner Kollegin Prof. Dr. F.-M. Reisin.

Meine Diplomanden O. Castro-Sandoval und Y. Azami haben einen großen Teil der Arbeit übernommen, indem sie meine Beispielprogramme in verschiedenen Sprachen ergänzt und ausgetestet, sowie die Begleitdiskette zusammengestellt haben. Mein Bruder P. Solymosi hat wichtige fachliche und sprachliche Verbesserungsvorschläge gemacht. Nicht zuletzt danke ich meiner Frau Dr. I. Solymosi, die nicht nur die Belastungen meiner Arbeit neben 4 kleinen Kindern mitgetragen, sondern auch meine Rechtsschreib- und Deutschfehler beseitigt, d.h. meinen Entwurf Korrektur gelesen hat. Unser gemeinsamer Glaube an Jesus Christus gab ihr die Kraft dazu.

Der Autor