私は試験が近づいています。私は過去の論文を調べて、何が期待できるかを考えています。私は次のものに少しこだわっていて、誰かがいくつかの例の答えを出すことができれば本当に感謝します。
次の各操作(java.utilパッケージのStackクラスに含まれる)のOCLに前提条件と事後条件を記述します。
- (1)ブールempty()-このスタックが空かどうかをテストします
- (2)E peek()-スタックから削除せずに、このスタックの最上部にあるオブジェクトを調べます
- (3)E pop()-このスタックの一番上のオブジェクトを削除し、そのオブジェクトをこの操作の値として返します
- (4)E push(E item)-アイテムをこのスタックの一番上にプッシュします
ここで、Eはスタック内の要素のタイプを示します。
私の試みは次のとおりです:
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.
スタック内の要素を参照する必要があるかどうかもわかりません。例:self.elements-> IsEmpty()= true
誰かが私を手伝ってくれるなら、本当に感謝します。
編集
友人には次のアイデアがあります。
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
ここで助けが得られない場合は、GoogleグループでUMLforumグループを試すことができます。
—
スティーブンC
または多分StackOverflowで:-)
—
スティーブンC
例示的なOCLサンプルは次の場所に
—
Axel Kemper