Bir sınavım var ve ne beklemeniz gerektiğine dair fikir edinmek için geçmiş makalelere bakıyorum. Aşağıdaki bir parça takılıp kalmış ve birileri bazı örnek cevaplar verebilir eğer gerçekten takdir ediyorum.
Aşağıdaki işlemlerin (java.util paketindeki Stack sınıfına dahil) her biri için OCL'ye önkoşulları ve sonkoşulları yazın:
- (1) Boolean empty () - Bu yığının boş olup olmadığını test eder
- (2) E peek () - Yığından çıkarılmadan bu yığının üstündeki nesneye bakar
- (3) E pop () - Bu yığının en üstündeki nesneyi kaldırır ve bu nesneyi bu işlemin değeri olarak döndürür
- (4) E itme (E öğesi) - bir öğeyi bu yığının üstüne iter
Burada E, destedeki elemanların türünü belirtir.
Girişimlerim şöyle:
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.
Yığındaki öğelere referans verip vermemem gerektiğini de bilmiyorum. Örneğin: self.elements -> IsEmpty () = true
Biri bana yardım edebilirse gerçekten çok memnun olurum.
DÜZENLE
Bir arkadaşın aşağıdaki fikirleri vardır:
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