Мова обмеження об'єктів (OCL) для стека в пакеті java.util


10

У мене складається іспит, і я дивлюся на минулі документи, щоб отримати деякі ідеї, що чекати. Я трохи застряг у наступному і дуже буду вдячний, якби хтось міг дати приклад відповіді.

Запишіть передумови та постумови в OCL для кожної з наступних операцій (включених до класу Stack в пакеті java.util):

  • (1) Булева пуста () - Тестує, чи ця стека порожня
  • (2) E peek () - дивиться на об'єкт у верхній частині цього стека, не виймаючи зі стека
  • (3) E pop () - видаляє об'єкт у верхній частині цього стека і повертає цей об'єкт як значення цієї операції
  • (4) E push (елемент E) - виштовхує предмет на верхню частину цього стека

Тут E позначає тип елементів у стеці.

Мої спроби такі:

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. 

Я також не знаю, чи слід посилатися на елементи в стеку. Наприклад: self.elements -> IsEmpty () = true

Якщо хтось міг би мені допомогти, я дуже вдячний.

EDIT

У друга є такі ідеї:

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

Якщо ви тут не отримаєте жодної допомоги, ви можете спробувати групу UMLforum у групах Google.
Стівен С

1
А може, на StackOverflow :-)
Стівен C

Ви знайдете ілюстративні зразки OCL тут: www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
Axel Kemper

Відповіді:


1

Перед- та післяумови - це договір.

  • Попередня умова - це частина договору, яку повинен виконувати абонент. Якщо попередня умова не trueє, функція повинна призвести до помилки.
  • Пост-умова - це частина договору, якій повинна відповідати функція, і описується очікувана зміна об'єкта / світу. Якщо постійна умова не trueє, у програмі є помилка.

І до, і після умови повинні бути булевими виразами.

Візьмемо empty?для прикладу. Цю функцію завжди можна назвати, тому немає жодної передумови. І функція не має побічного ефекту, тому немає ніякої постусловості.

Візьмемо popяк інший приклад. Якщо ця функція викликає виняток у порожньому стеку, попередньою умовою є self.size > 0, з іншого боку, якщо функція повертається nilу порожній стек, немає жодної передумови. Обидва є дійсним вибором дизайну, не знайомим з вибором Java. В будь-якому випадку постумова є, self.size = previous.size - 1оскільки контрактним побічним ефектом є видалення елемента.

І так далі …

Зверніть увагу: використовується псевдокод, оскільки він не знайомий з OCL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.