FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Praktische Informatik (HS)

STE Blatt 5 : Klasseninvarianten

STE Blatt 5 : Klasseninvarianten 2007-01-03 21:26
Anonymer User
Hallo,
vielleicht kann mir einer von Euch sagen, wie genau ich diese Klasseninvarianten aus Aufgabe 4 in den Quellcode bastele.
Mir ist klar (glaube ich;-)), was Klasseninvarianten sind, ich habe sie auch schon formuliert, aber wie prüfe ich sie ab? Mit normalen assertions einzeln in jeder Methode und Hinweis im Kommentar, dass das eine Klasseninvariante ist? Eigentlich wäre es ja, da man die Invarianten in jeder Methode zweimal prüft, am nettesten, eine eigene Methode dafür zu schreiben, aber was ist der Standard?
Vielen Dank schonmal für die Hilfe,
Steffi

Re: STE Blatt 5 : Klasseninvarianten 2007-01-05 04:24
low_level
Hallo,
vielleicht kann mir einer von Euch sagen, wie genau ich diese Klasseninvarianten aus Aufgabe 4 in den Quellcode bastele.
Mir ist klar (glaube ich;-)), was Klasseninvarianten sind, ich habe sie auch schon formuliert, aber wie prüfe ich sie ab? Mit normalen assertions einzeln in jeder Methode und Hinweis im Kommentar, dass das eine Klasseninvariante ist? Eigentlich wäre es ja, da man die Invarianten in jeder Methode zweimal prüft, am nettesten, eine eigene Methode dafür zu schreiben, aber was ist der Standard?
Vielen Dank schonmal für die Hilfe,
Steffi

Ich würde eine private Methode checkInvariants() schreiben, die dann in allen public-Methoden zweimal aufgerufen wird: beim Eintritt und beim Austritt. (Bei mehreren "return"-Anweisungen natürlich jedes Mal.)

Die nicht-public-Methoden sollten checkInvariants() nicht aufrufen, da die Klasseninvarianten nur vor und nach dem Aufruf der public-Methoden gelten müssen, aber nicht dazwischen.

Ich habe keine Ahnung, ob das auch die offizielle SWT-Meinung ist, aber sie erscheint mir recht vernünftig. :)

Roland

Re: STE Blatt 5 : Klasseninvarianten 2007-01-05 14:10
Fred
Es gibt auch Sprachen, die das Vertragsmodell und Invarianten explizit unterstützen, z.B. D

class Date { int day; int hour; invariant { assert(1 <= day && day <= 31); assert(0 <= hour && hour < 24); } // ... }
The class invariant is a contract saying that the asserts must hold true. The invariant is checked when a class constructor completes, at the start of the class destructor, before a public or exported member is run, and after a public or exported function finishes.

Re: STE Blatt 5 : Klasseninvarianten 2007-01-06 13:35
Anonymer User
Ja, über D bin ich bei der Suche nach einer Antwort auch schon gestolpert, aber in Java gibt es etwas ähnlich Schickes wohl nicht;)
Dank Dir, Roland, so hatte ich es mir auch vorgestellt. Also werde ich es mit Deiner Meinung im Rücken ersteinmal so umsetzen:). Netterweise darf man in STE in der ersten Abgabephase ja noch ein paar Fehler machen, dann werde ich zur Not schon erfehren, falls man es anders machen soll.
Liebe Dank Euch beiden, Steffi