Eu tenho um exame chegando e eu estou olhando documentos anteriores para ter algumas idéias do que esperar. Estou um pouco preso no seguinte e realmente apreciaria se alguém pudesse dar algumas respostas de exemplo.
Escreva pré-condições e pós-condições no OCL para cada uma das seguintes operações (incluídas na classe Stack no pacote java.util):
- (1) Boolean empty () - Testa se esta pilha está vazia
- (2) E peek () - Olha o objeto no topo desta pilha sem removê-la da pilha
- (3) E pop () - remove o objeto no topo desta pilha e retorna esse objeto como o valor desta operação
- (4) E push (item E) - empurra um item para o topo desta pilha
Aqui E denota o tipo de elementos na pilha.
Minhas tentativas são as seguintes:
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.
Também não sei se devo referenciar os elementos na pilha. Por exemplo: self.elements -> IsEmpty () = true
Se alguém pudesse me ajudar, eu realmente aprecio isso.
EDITAR
Um amigo tem as seguintes idéias:
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