22.08.2013 Aufrufe

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

Grundlagen der Informatik I “Programmierung”

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

daher nur für Beweise von Routinen benutzt werden, die keine gemeinsam genutzten Objekte verän<strong>der</strong>n, in<br />

denen also keine zwei Größen auf dasselbe Objekt verweisen (was man ggf. separat “beweist”). 17 Für die volle<br />

Referenzsemantik gibt es bis heute keine brauchbare Verifikationstechnik, da sie erheblich komplizierter ist. 18<br />

4.3 Strukturierung von Routinen<br />

Wir wollen in diesem Abschnitt nun endlich die Programmstrukturen besprechen, die Sie bei <strong>der</strong> Implementierung<br />

von Eiffel-Routinen benötigen. Wir werden dazu zunächst die einzelnen Sprachkonzepte zusammen<br />

mit den zugehörigen Verifikationsregeln, also das Handwerkzeug, vorstellen und erst im Anschluß daran eine<br />

genauere Sprachbeschreibung geben. Am Ende dieser Sektion wollen wir dann die Methodik <strong>der</strong> Implementierung<br />

und Verifikation von Routinen anhand von Beispielen illustrieren.<br />

Eiffel ist eine prozedurale Sprache, in <strong>der</strong> Daten durch Anweisungen verarbeitet werden. Die Form dieser<br />

Anweisungen ist nicht an<strong>der</strong>s als in an<strong>der</strong>en Programmiersprachen. Nur Schleifen sind etwas ungewöhnlich,<br />

da hier zusätzliche Zusicherungen eingefügt werden dürfen, die angeben, was sich während eines Schleifendurchlaufs<br />

verän<strong>der</strong>t und was nicht. Die folgenden Anweisungsarten gehören zum Sprachumfang von Eiffel<br />

• Zuweisung<br />

• Routinenaufruf (qualified call)<br />

• Zusammengesetzte Anweisungen<br />

• Bedingte Anweisung und Fallunterscheidung (if, inspect)<br />

• Schleife (loop)<br />

• Überprüfung während eines Programmablaufs (check)<br />

• Ausnahmebehandlung (rescue und retry)<br />

• Anweisungen, die nur im DEBUG Modus mitbenutzt werden (debug)<br />

4.3.1 Wertzuweisung<br />

Die Wertzuweisung haben wir bereits mehrfach benutzt, da man ohne sie kein sinnvolles Programm schreiben<br />

kann. Ein Programm in einer imperativen Sprache beschreibt eine Folge von Zustandstransformationen (o<strong>der</strong><br />

Speicherverän<strong>der</strong>ungen). Die einzige Möglichkeit, einen Zustand direkt zu verän<strong>der</strong>n, bietet die Zuweisung<br />

von Werten an einen Speicherplatz, also an eine Größe, die den Namen eines Speicherplatz kennzeichnet.<br />

Die Wertzuweisung wird immer dann benutzt, wenn ein Wert für spätere Zwecke im aktuellen Programmablauf<br />

zwischengelagert werden soll. Der Wert wird unter einem Namen im Speicher eingetragen.Sollen Werte von<br />

einem Programmablauf zum nächsten aufgehoben werden, so müssen sie auf einem externen Speicher (Platte,<br />

Diskette o<strong>der</strong> Band) ausgelagert werden. Die Syntax <strong>der</strong> Wertzuweisung ist einfach<br />

entity := Ausdruck<br />

wobei entity eine Größe (siehe Definition 3.3.3 auf Seite 73) und Ausdruck ein Ausdruck (siehe Sektion 4.4)<br />

ist. Man beachte jedoch, daß Zuweisungen an formale Routinenargumente verboten sind (dies werden wir im<br />

nächsten Abschnitt ausführlicher diskutieren).<br />

17 Zum Glück tritt <strong>der</strong> Fall, daß innerhalb einer Routine zwei Größen auf dasselbe Objekt verweisen, recht selten auf. Meist ist es<br />

so, daß verschiedene Routinen Größen benutzen, die auf ein und dasselbe Objekt referenzieren, und diese Routinen hintereinan<strong>der</strong><br />

ausgeführt werden. Dann liegt aber eine klare Trennung vor und die Verifikationsmechanismen sind wie<strong>der</strong> anwendbar.<br />

18 Es gibt den Vorschlag, jede Referenzvereinbarung vom Typ T in eine Deklaration expanded ARRAY[expanded T] zu übersetzen.<br />

Eine Erzeugung bedeutet dann ein weiteres Element in diesem Feld und eine Referenz einen Feldindex. Wir werden diesen<br />

Weg aber nicht beschreiten, da die Komplexität dieser Beweisführung weit über den Anspruch einer Einführung hinausführt.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!