Ho un esame in corso e sto guardando i documenti del passato per avere qualche idea su cosa aspettarsi. Sono un po 'bloccato sul seguente e apprezzerei davvero se qualcuno potesse dare alcune risposte di esempio.
Scrivi precondizioni e postcondizioni in OCL per ognuna delle seguenti operazioni (incluse nella classe Stack nel pacchetto java.util):
- (1) Boolean empty () - Verifica se questo stack è vuoto
- (2) E peek () - Guarda l'oggetto nella parte superiore di questo stack senza rimuovere dallo stack
- (3) E pop () - Rimuove l'oggetto nella parte superiore di questo stack e restituisce quell'oggetto come valore di questa operazione
- (4) E spingere (elemento E) - spinge un oggetto nella parte superiore di questo gruppo
Qui E indica il tipo di elementi nello stack.
I miei tentativi sono i seguenti:
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.
Inoltre non so se dovrei fare riferimento agli elementi nello stack. Ad esempio: self.elements - > IsEmpty () = true
Se qualcuno potesse aiutarmi, lo apprezzerei davvero.
EDIT
Un amico ha le seguenti idee:
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