Я готовлюсь к экзамену и просматриваю прошлые статьи, чтобы понять, чего ожидать. Я немного застрял на следующем и был бы очень признателен, если бы кто-нибудь мог дать несколько примеров ответов.
Записать предварительные условия и постусловия в OCL для каждой из следующих операций (включенных в класс Stack в пакете java.util):
- (1) Boolean 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