我即将参加考试,并且正在查看过去的论文,以期获得一些期望的想法。我对以下内容有些困惑,如果有人可以给出示例答案,我将不胜感激。
在OCL中为以下每个操作(包括在java.util包的Stack类中)写入前置条件和后置条件:
- (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上:-)
—
Stephen C
您可以在此处找到说明性的OCL示例:www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
—
Axel Kemper,