У мене складається іспит, і я дивлюся на минулі документи, щоб отримати деякі ідеї, що чекати. Я трохи застряг у наступному і дуже буду вдячний, якби хтось міг дати приклад відповіді.
Запишіть передумови та постумови в OCL для кожної з наступних операцій (включених до класу Stack в пакеті java.util):
- (1) Булева пуста () - Тестує, чи ця стека порожня
- (2) E peek () - дивиться на об'єкт у верхній частині цього стека, не виймаючи зі стека
- (3) E pop () - видаляє об'єкт у верхній частині цього стека і повертає цей об'єкт як значення цієї операції
- (4) E push (елемент E) - виштовхує предмет на верхню частину цього стека
Тут 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
Якщо хтось міг би мені допомогти, я дуже вдячний.
EDIT
У друга є такі ідеї:
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