Tengo un examen por delante y estoy mirando trabajos anteriores para tener algunas ideas de qué esperar. Estoy un poco atascado en el siguiente y realmente agradecería si alguien pudiera dar algunas respuestas de ejemplo.
Escriba precondiciones y postcondiciones en OCL para cada una de las siguientes operaciones (incluidas en la clase Stack en el paquete java.util):
- (1) Boolean empty (): prueba si esta pila está vacía
- (2) E peek () - Mira el objeto en la parte superior de esta pila sin quitarlo de la pila
- (3) E pop (): elimina el objeto en la parte superior de esta pila y devuelve ese objeto como el valor de esta operación
- (4) Empujar E (objeto E): empuja un objeto a la parte superior de esta pila
Aquí E denota el tipo de elementos en la pila.
Mis intentos son los siguientes:
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.
Tampoco sé si debería hacer referencia a los elementos en la pila. Por ejemplo: self.elements -> IsEmpty () = true
Si alguien pudiera ayudarme, realmente lo agradecería.
EDITAR
Un amigo tiene las siguientes ideas:
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