Object Constraint Language (OCL) für Stack im Paket java.util


10

Ich habe eine Prüfung vor mir und schaue mir frühere Arbeiten an, um einige Ideen zu bekommen, was mich erwartet. Ich bin ein bisschen fest mit dem folgenden verbunden und würde mich sehr freuen, wenn jemand einige Beispielantworten geben könnte.

Schreiben Sie Vor- und Nachbedingungen in OCL für jede der folgenden Operationen (in der Stack-Klasse im Paket java.util enthalten):

  • (1) Boolean empty () - Testet, ob dieser Stapel leer ist
  • (2) E peek () - Betrachtet das Objekt oben auf diesem Stapel, ohne es vom Stapel zu entfernen
  • (3) E pop () - Entfernt das Objekt oben auf diesem Stapel und gibt dieses Objekt als Wert dieser Operation zurück
  • (4) E push (E item) - schiebt einen Gegenstand auf die Oberseite dieses Stapels

Hier bezeichnet E die Art der Elemente im Stapel.

Meine Versuche sind wie folgt:

Boolean empty()
pre: none
post: self -> IsEmpty() = true
//should this be result -> IsEmpty() = true because it returns a boolean value?

E peek()
pre: self -> NotEmpty() = true
post: result = ??? 
// I lose hope at this stage. 

Ich weiß auch nicht, ob ich auf die Elemente im Stapel verweisen soll. Zum Beispiel: self.elements -> IsEmpty () = true

Wenn mir jemand helfen könnte, würde ich es wirklich schätzen.

BEARBEITEN

Ein Freund hat folgende Ideen:

context Stack empty()
pre: self.data.size = 0

context Stack peek()
pre: self.data.AsSequence.first

context Stack pop()
pre: !self.data.isEmpty
post: self.data.AsSequence.first.remove (not sure about this one)
post: self.data.count = @pre:data - 1

context Stack push(E Item)
post: self.data.asSquence.prepend(E.asSequence)
post: self.data.size = @pre.data.size + 1

Wenn Sie hier keine Hilfe erhalten, können Sie die UMLforum-Gruppe in Google Groups ausprobieren.
Stephen C

1
Oder vielleicht auf StackOverflow :-)
Stephen C


Antworten:


1

Vor- und Nachbedingungen sind ein Vertrag.

  • Voraussetzung ist der Teil des Vertrages, den der Anrufer erfüllen muss. Wenn die Voraussetzung nicht trueist, muss die Funktion einen Fehler auslösen.
  • Die Nachbedingung ist der Teil des Vertrags, der von der Funktion erfüllt werden muss, und beschreibt die erwartete Änderung des Objekts / der Welt. Wenn die Nachbedingung nicht erfüllt ist true, weist die Implementierung einen Fehler auf.

Sowohl Vor- als auch Nachbedingung müssen boolesche Ausdrücke sein.

Nehmen wir empty?als Beispiel. Diese Funktion kann immer aufgerufen werden, daher gibt es keine Voraussetzung. Und die Funktion hat keine Nebenwirkungen, so dass es keine Nachbedingung gibt.

Nehmen wir popals weiteres Beispiel. Wenn diese Funktion eine Ausnahme auf einem leeren Stapel auslöst, ist die Vorbedingung self.size > 0, wenn die Funktion nilauf einem leeren Stapel zurückkehrt, gibt es keine Vorbedingung. Beide sind gültige Entwurfsoptionen, die mit Javas Auswahl nicht vertraut sind. In beiden Fällen besteht die Nachbedingung darin, dass self.size = previous.size - 1der vertragliche Nebeneffekt darin besteht, ein Element zu entfernen.

Und so weiter …

Hinweis: Verwendeter Pseudocode, da er mit OCL nicht vertraut ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.