Object Constraint Language (OCL) untuk Stack dalam paket java.util

10

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
Aimee Jones
sumber
Jika Anda tidak mendapatkan bantuan apa pun di sini, Anda dapat mencoba grup UMLforum di Google Groups.
Stephen C
1
Atau mungkin di StackOverflow :-)
Stephen C
Anda dapat menemukan contoh-contoh OCL ilustratif di sini: www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
Axel Kemper
Ceramah tentang OCL 2.0: st.inf.tu-dresden.de/files/general/OCLByExampleLecture.pdf
Axel Kemper

Jawaban:

1

Pra dan pasca kondisi adalah kontrak.

  • Prasyarat adalah bagian dari kontrak yang harus dipenuhi oleh penelepon. Jika prasyarat bukan truefungsi harus membuang kesalahan.
  • Postcondition adalah bagian dari kontrak yang harus dipenuhi oleh fungsi dan menggambarkan perubahan yang diharapkan ke objek / dunia. Jika postcondition tidak trueimplementasi memiliki bug.

Baik pra- dan postkondisi harus berupa ekspresi boolean.

Mari kita ambil empty?sebagai contoh. Fungsi ini selalu dapat dipanggil, jadi tidak ada prasyarat. Dan fungsinya tidak memiliki efek samping sehingga tidak ada postcondition.

Mari kita ambil popcontoh lain. Jika fungsi ini menimbulkan pengecualian pada tumpukan kosong, prasyaratnya adalah self.size > 0, di sisi lain, jika fungsi kembali nilpada tumpukan kosong tidak ada prasyarat. Keduanya adalah pilihan desain yang valid, tidak akrab dengan pilihan Java. Dalam kedua kasus postcondition adalah self.size = previous.size - 1karena efek samping kontraktual adalah untuk menghapus elemen.

Dan seterusnya …

NB, menggunakan kode semu karena tidak terbiasa dengan OCL.

akuhn
sumber