Dr. Christian Maurer, FU Berlin

Allgemeines zur Spezifikation

Zwischen der Anforderungsdefinition und der Programmierung im engen Sinn, d.h. der Implementierung, liegt die Phase des Entwurfs mit dem Ziel einer geeigneten Zerlegung des Gesamtsystems in Komponenten und deren Spezifikation. Das Leitmotiv ist die Frage:

WAS sind die einzelnen Teile des Systems?

Das Hauptanliegen in dieser Phase ist die Reduktion der Komplexität des Systems auf ein beherrschbares Maß, die sich möglichst stringent aus den Ergebnissen der Anforderungsdefinition ergibt.

Der Gewinnung sinnvoller Kriterien an die Zerlegung dienen folgende Forderungen an die Komponenten:

Zur Erfüllung dieser Forderungen ist es sinnvoll, jede Komponente mit zwei Sichtweisen auszustatten: Häufig wird für die Spezifikation das Bild eines "Vertrags" zwischen Implementor und Nutzer eines Moduls benutzt. Das ist insofern zutreffend, als die Spezifikation gegenseitige Verpflichtungen regelt: Eine strikte Trennung der beiden Teile bietet die Gewähr dafür, daß der Klient einer Komponente nicht implizite Annahmen über ihr Verhalten macht, die er aus der Kenntnis von Implementierungsdetails hat. Nur so ist die Komponente vor unkontrollierten Zugriffen von außen sicher, die ihr Verhalten entgegen der Spezifikation verändern und Nebeneffekte erzeugen können, die sich unvorhersagbar auf das Systemverhalten auswirken.

Moduln als Komponenten einer Zerlegung

Als Sammelbegriff für kleinere Komponenten eines Systems hat sich der des Moduls (in Anlehnung daran der Begriff der modulorientierten Programmiersprachen in Verallgemeinerung der von Wirth als Weiterentwicklung von Pascal - über die Zwischenstufe Modula geschaffenen Sprache Modula-2) eingebürgert. Zur genaueren Charakterisierung dieses Begriffs werden im folgenden die allgemeinen Forderungen des vorigen Abschnittes präzisiert. Notwendige Bedingungen an einen sauberen Modulbegriff sind Zur Einfachheit der Spezifikation eines Moduls gehören Der Kontextunabhängigkeit der Implementierung eines Moduls lassen sich folgende Punkte zuordnen: Die Unterscheidung dieser beiden Blickwinkel läßt die Forderung nach getrennter Übersetzbarkeit von Spezifikation und Implementierung eines jeden Moduls mit den Vorteilen erwachsen, daß Als Folgerung aus diesen Überlegungen ergibt sich, daß in einem Projekt eine Programmiersprache benutzt werden sollte, in der dieses Konzept von vornherein als fester Sprachbestandteil enthalten ist. Zur Zeit wird Modula-2 eingesetzt; diese Sprache bietet die Diese Vorteile zeichnen sie vor nicht modulorientierten imperativen Sprachen wie z.B. FORTRAN, Cobol, Algol, BASIC, C oder Pascal deutlich aus, deren Ausdrucksmöglichkeiten durch die postulierte Softwarearchitektur - selbst bei bescheidenen Ansprüchen an deren Umsetzung - überfordert sind.

Eine Ausnahme bildet der Zugriff auf vorhandene fremdsprachliche Bibliotheken: die Einbindung vorgefertigter Programmteile unter Einsatz von Compilern mit entsprechenden Sprachanschlüssen kann ein taugliches Werkzeug zur Lösung bestimmter Aufgaben sein.

In der Regel wird aber die Größenordnung eines Lehrprojektes den Einsatz derartiger Hilfsmittel kaum erlauben, soweit sie über die direkte Nutzung von Diensten des Betriebssystems z.B. zur Abfrage und Ansteuerung von Rechner- oder Betriebssystemkomponenten wie Bildschirm, Tastatur, Dateisystem o.ä. hinausgehen.


Christian Maurer, 10.5.1999