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