Saya memiliki ujian yang akan datang dan saya sedang melihat kertas-kertas masa lalu untuk mendapatkan beberapa ide tentang apa yang diharapkan. Saya agak terjebak pada yang berikut dan akan sangat menghargai jika seseorang dapat memberikan beberapa contoh jawaban.
Tulis prakondisi dan postkondisi dalam OCL untuk masing-masing operasi berikut (termasuk dalam kelas Stack dalam paket java.util):
- (1) Boolean empty () - Menguji apakah tumpukan ini kosong
- (2) E mengintip () - Melihat objek di bagian atas tumpukan ini tanpa mengeluarkan dari tumpukan
- (3) E pop () - Menghapus objek di bagian atas tumpukan ini dan mengembalikan objek itu sebagai nilai operasi ini
- (4) E push (E item) - mendorong item ke bagian atas tumpukan ini
Di sini E menunjukkan tipe elemen dalam stack.
Upaya saya adalah sebagai berikut:
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.
Saya juga tidak tahu apakah saya harus mereferensikan elemen dalam tumpukan. Sebagai contoh: self.elements -> IsEmpty () = true
Jika ada yang bisa membantu saya, saya akan sangat menghargainya.
EDIT
Seorang teman memiliki ide-ide berikut:
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