Literaturhinweise VDM Tutor Fehlermeldungen des VDM-Compilers

Glossar

Abstrakte Syntax
Die Sammlung aller Domain-Gleichungen eines Programms.

Abstraktion
Die Absonderung des Allgemeinen vom Einzelnen, die Begriffsbildung; auch das Ignorieren von unwichtigen Details, stattdessen Konzentration auf das Wesentliche.

ADT
Eine Klasse von Objekten, die vollständig und ausschließlich durch die Operationen, die mit den Objekten vorgenommen werden können, definiert ist.

ADT-Operation
Gelegentlich verwendet, zur Verdeutlichung der Tatsache, daß die Operationen den ADT zugeordnet sind und diese charakterisieren. Meist finden Sie nur den Begriff ,,Operation``.

Applikation
Anwendungsprogramm, Anwendungs-System.

Argument-Domain
Argumentmenge einer Map (zugeordnet ist der Co-Domain).

Argumentwert
Im Zusammenhang mit einer Map der Teil eines Paares aus dem Argument-Domain; ihm ist der Map-Wert zugeordnet.

Attribut
Allgemein eine Eigenschaft eines Objekts -- die zweiwertigen Eigenschaften werden allerdings Prädikate genannt.

Bag
Ein abstrakter Datentyp: ein Set, in dem jedes Element mehrfach vorkommen darf.

Binden
Das Zusammenfügen einzelner Objekt-Module zu einem vollständigen, ablauffähigen Programm.

C-String
Eine Zeichenkette wird in C üblicherweise als unbegrenztes Zeichen-Array dargestellt, an dessen Ende das Null-Zeichen steht, welches kein gültiges Zeichen repräsentiert. Die Länge des String ist nicht explizit gespeichert -- sie kann durch Auszählen der Zeichen bis zum Null-Zeichen ermittelt werden.

Call By Reference
Eine Funktion kann den Inhalt eines ihrer Argumente dauerhaft ändern, da ihr die Adresse des Arguments übergeben wurde.

Call By Value
Einer Funktion wird nur der Wert eines Arguments übergeben; die Änderung des Arguments durch die Funktion ist nicht möglich.

Co-Domain
Zielmenge einer Map (wird dem Argument-Domain zugeordnet).

Codier-Phase
In dieser Phase der Programmentwicklung erfolgt die Umsetzung der Spezifikation, die in der Design-Phase entstanden ist, in die gewünschte(n) Programmiersprachen.

Datenabstraktion
Abstraktion, bezogen auf die Daten eines Programms und deren Manipulation: Absonderung der Eigenschaften, der ,,Bedeutung`` der Daten von ihrer physikalischen Realisierung -- Beschreibung eines Objekts mit den Operationen, die mit ihm durchgeführt werden können.

Datenelemente
Daten, aus denen ein strukturierter Datentyp zusammengesetzt ist. Sie können wiederum strukturiert oder elementar sein.

Datentyp-Invariante
(auch ,,Bedingung für die Wohlgeformtheit``:) Grenzt die sinnvollen Zustände von Objekten einer Klasse von den sinnlosen, nach ihrer Syntax aber erlaubten Zuständen ab, ist also eine semantische Bedingung.

Design-Phase
In dieser, auch ,,Detailentwurf`` genannten Phase werden die Daten, Schnittstellen und Programm-Module genau spezifiziert und Testfälle definiert. Hier setzt VDM an.

Deskriptive Sprachen
Sprachen wie Prolog basieren auf der Definition des gewünschten Resultats einer Funktion ohne Angaben über den Algorithmus zur Gewinnung dieses Resultats.

Domain
Ein anderer Ausdruck für ,,abstrakter Datentyp``, auch dessen englischer Name im VDM-System.

Domain-Gleichung
Die syntaktische Beschreibung eines ADT, d.h. aus welchen Datenelementen er sich mit welcher Struktur zusammensetzt. Mit ihrer Hilfe lassen sich alle tatsächlichen Objekte erzeugen, zudem solche, die unsinnig sind. Diese müssen über semantische Bedingungen ausgegrenzt werden.

Elementarer Datentyp
Unteilbarer (atomarer) Datentyp einer Programmiersprache. In C sind dies nur die verschiedenen Zahlentypen und das Zeichen.

Elementary
Einige Datentypen sind auch in VDM vordefiniert: das Zeichen (,,Char``), verschiedene Zahlentypen und der logische Typ ,,Bool``.

Elementtyp
Der Datentyp eines Datenelementes in einem strukturierten Datentyp.

Enrichment
Angabe einer benötigten Operation für einen ADT in der DSL-Spezifikation. Der Begriff wird synonym mit ,,Operation`` verwendet.

Funktional
Funktion, deren Resultat eine Funktion ist. Als Argumente hat es weitere Funktionen, aus denen die resultierende Funktion konstruiert wird.

Funktionale Sprachen
Sprachen wie LISP basieren auf Funktionen und Rekursion, freie Variablen gibt es nicht.

Generischer Name
Name, der in dieser Form noch nicht komplett ist; aus ihm wird durch ein Suffix (oder Präfix) ein gültiger Name generiert.

Implizites Löschen
Bei Operationen, die ein strukturiertes Objekt so ändern, daß Elemente entfernt werden, ist es manchmal wünschenswert, daß diese Elemente dabei gleichzeitig gelöscht werden, da sie auch von anderen strukturierten Objekten nicht mehr referenziert werden; die Operationen sollen also diese Sub-Strukturen implizit löschen. Nähere Informationen finden Sie im Abschnitt 5.1.

Kombinator
Operation, die aus einzelnen Objekten ein neues Objekt ableitet.

Konstruktor
Operation, die ein neues Objekt eines Datentyps erzeugt und dabei meist auch eine Initialisierung vornimmt.

Korrektheitsbeweis
Formaler oder informaler Beweis der Korrektheit eines Programms. Ist die abstrakte Spezifikation als korrekt für die Lösung des Problems bewiesen und jede Konkretisierung als äquivalent zur vorhergehenden Abstraktion, ist auch die Implementation korrekt. Der Programmtest ist dann unnötig. In der Praxis ist der vollständige Beweis nicht möglich.

Map
Sie entspricht einer Funktion mit endlicher, variabler Argumentmenge: jedem Argumentwert ist ein ,,Map-Wert`` aus der Zielmenge, dem ,,Co-Domain``, zugeordnet.

Map-Wert
Im Zusammenhang mit einer Map der Teil eines Paares aus dem Co-Domain (analog zum Funktionswert bei Funktionen).

META-IV
ist die formale Sprache von VDM mit einer Kombination aus funktionalen und prozeduralen Sprachelementen. Der Name ist ein Homonym zum englischen ,,metaphor``. Eine Spezifikation mit META-IV kann recht einfach in eine ,,echte`` prozedurale Sprache übersetzt werden.

Modellorientierter Ansatz
siehe Abschnitt 2.3

Modularisierung
Aufteilung eines komplexen Programms oder Unterprogramms in eine Menge von einfacheren Unterprogrammen, deren Zusammenspiel die gleiche Funktion hat.

Namenserweiterung
Dies betrifft die C-Funktionen, die die Operationen der einzelnen VDM-Basistypen realisieren; sie müssen jeweils an die spezielle ,,Konfigurierung`` des VDM-Basistyps angepaßt werden (für einen Set von Integer-Werten werden andere Routinen benötigt als für einen Set von Tuples), woraus sich viele ,,Versionen`` der gleichen Operation ergeben können, die alle unterschiedliche Namen haben müssen. Daraus entsteht die Forderung, daß alle von Ihnen definierten Domains einen eigenen Namen haben müssen -- die Operationsnamen werden dann automatisch mit diesem Domain-Namen ,,erweitert``, indem ihnen ein Unterstrich und der Domain-Name angehängt wird. Ausnahmen sind einzelne Tree-, Union- und Optional-Operationen, die komponentenbezogen sind; dann erfolgt die Erweiterung mit dem Namen des Komponententyps (eventuell doch gefolgt vom Domain-Namen) oder mit Teilen der Komponenten-Namen (bei Trees und Unions). Näheres finden Sie jeweils bei der Beschreibung dieser Typen.

nil
ist ein spezieller Zustand eines Objekts und bedeutet ,,kein gültiger Inhalt``.

Non-Terminal
Name für eine Symbolfolge einer Programmiersprache, die noch weiter in Terminale zerlegbar ist und meist ein Konzept dieser Sprache bezeichnet (z.B. Anweisung, Ausdruck, Bezeichner usw.)

Objekt-Modul
Bereits übersetztes Quellmodul, das aber allein meist nicht ablauffähig ist, da Funktionen oder Variablen verwendet werden, die in einem anderen Objekt-Modul definiert sind. Durch ,,Binden`` mehrerer Objekt-Module kann ein lauffähiges Programm entstehen.

Operation
In diesem Zusammenhang meist eine elementare Funktion zur Manipulation eines ADT und damit ein Charakteristikum dieses ADT.

Operationale Abstraktion
Im modellorientierten Ansatz die Spezifikation der Operationen und Funktionen, die auf Objekte eines ADT angewendet werden, unabhängig von ihrer Realisierung.

Optional
Es enthält entweder ein gültiges Objekt oder einen speziellen Wert nil, der anzeigt, daß das Optional im Moment keinen Inhalt hat.

Post-Kondition (postcondition)
Im modellorientierten Ansatz die Bedingung, die nach einem erfolgreichen Aufruf einer Funktion erfüllt ist.

Prä-Kondition (precondition)
Im modellorientierten Ansatz die Bedingung, die erfüllt sein muß, damit die Funktion aufgerufen werden darf.

Prädikat
Eigenschaft, die ein Objekt haben oder nicht haben kann -- im Gegensatz zu Attributen, die mehrwertig sind. Auch die Bezeichnung für eine Operation, die eine solche Eigenschaft überprüft.

Programmentwicklung
Sie wird in mehrere Phasen unterteilt; die Hauptphasen sind Voruntersuchung, Analyse, Lösungskonzeption, Systementwurf, Detailentwurf (Design), Codierung, Test und Installation. Darauf folgen Programmpflege und Wartung in der Einsatzphase.

Prototyp
Die Deklaration einer Funktion ohne Definition ihres Rumpfes ermöglicht die Typprüfung bei ihrem Aufruf in einem anderen Modul; sie besteht aus Funktionsname, Parametertypen und Resultattyp.

Prozedurale Sprachen
Sprachen wie C basieren auf Anweisungen, veränderbaren Variablen und (bedingten und unbedingten) Verzweigungen zur Steuerung des Programmablaufes.

Quellcode-Bibliothek
Eine Modul-Bibliothek, die nicht aus vorcompilierten Objekt-Modulen besteht, sondern aus Quellmodulen.

Repräsentationale Abstraktion
Im modellorientierten Ansatz die Spezifikation von Klassen bzw. Objekten abstrakter Datentypen im Hinblick auf ihre Eigenschaften, aber unabhängig von ihrer Repräsentation.

Semantik
,,Bedeutung`` einer Sache, z.B. einer Funktion, d.h. ,,das, was die Sache tut`` (im Gegensatz zur Syntax, ihrer formalen Beschreibung).

Set
Ein Set entspricht der mathematischen ,,Menge``, ist also durch dieselben Eigenschaften und Operationen gekennzeichnet; sie ist eine endliche, ungeordnete Sammlung von unterschiedlichen Objekten des gleichen Typs.

Schrittweise Verfeinerung
siehe ,,Modularisierung``.

Speicherallokationsstrategie
Die Methode, mit der der dynamisch verfügbare Speicher verwaltet (angefordert und freigegeben) wird.

String
In der Informatik gebräuchlicher Begriff für ,,Zeichenkette``.

Strukturierter Datentyp
Eine strukturierte (geordnete, gegliederte) Sammlung von Datenelementen, z.B. Tabelle von Zahlen, Verbund mit Adreßdaten usw.

Switch-Funktion
Eine Funktion, die abhängig vom aktuellen Datentyp eines Union-Objekts verschiedene Verarbeitungsfunktionen aufruft.

Syntax
Im Gegensatz zur Semantik die formale Struktur einer Sache ohne inhaltliche Bedeutung.

Terminal-Symbol
Symbol (Zeichen oder Zeichenkette), die in einer Programmiersprache eine feste Bedeutung hat und nicht umdefiniert werden kann (Beispiele in C: if, switch, void usw.)

Tree
Ein Tree ist eine endliche, geordnete Sammlung verschiedenartiger Objekte und entspricht damit dem struct in der Sprache C.

Tuple
Es entspricht einer eindimensionalen Tabelle (in der Sprache C einem array): eine endliche, geordnete Sammlung gleichartiger Objekte, die nicht alle verschieden sein müssen.

Typgenerator
Jeder strukturierte Datentyp, dessen Elementtypen frei gewählt werden können, der also eine Klasse von Datentypen beschreibt, ist ein Typgenerator -- er kann verschiedene Datentypen generieren.

Union
Sie enthält genau ein Objekt; zu verschiedenen Zeitpunkten kann der Datentyp des Objekts allerdings unterschiedlich sein.

VDM-Basistypen
Einige grundlegende, mächtige Typgeneratoren, die von VDM bereitgestellt werden: Set, Tuple, Tree, Map, Union, Optional.

VDM-Bibliothek
Die Quellcode-Bibliothek, die alle Funktionen für den Umgang mit den VDM-Basistypen enthält.

VDM-String
Die in fast allen Applikationen benötigte Manipulation von Strings ist in VDM mit einem ,,eigenen`` Datentyp möglich, der sich von den üblichen C-Strings unterscheidet und daher in diesem Handbuch zur Abgrenzung VDM-String genannt wird. Er ist als Tuple von Zeichen modelliert.

Virtuelle Speicherverwaltung
Das Betriebssystem ermöglicht den Austausch von Speicherseiten zwischen Hauptspeicher und Festplatte (Swapping); unbenutzte Seiten werden ausgelagert. Der Hauptspeicher wirkt dadurch fast beliebig groß. Ab einer bestimmten Auslastung muß ständig ausgetauscht werden, das System gerät in den ,,Thrashing``-Bereich, wo fast die gesamte Rechenzeit vom Betriebssystem beansprucht wird.

Wohlgeformtheit
Ein Objekt einer Klasse ist wohlgeformt, wenn es einen sinnvollen Zustand hat; ein sinnloser Zustand führt in der Regel zu einem Programmfehler.

Literaturhinweise VDM Tutor Fehlermeldungen des VDM-Compilers

VDM Class Library