Ngôn ngữ ràng buộc đối tượng (OCL) cho Stack trong gói java.util


10

Tôi có một bài kiểm tra sắp tới và tôi đang xem các bài báo trước đây để có một số ý tưởng về những gì mong đợi. Tôi hơi bế tắc về điều sau đây và sẽ thực sự đánh giá cao nếu ai đó có thể đưa ra một số câu trả lời ví dụ.

Viết các điều kiện tiên quyết và hậu điều kiện trong OCL cho mỗi thao tác sau (được bao gồm trong lớp Stack trong gói java.util):

  • (1) Boolean blank () - Kiểm tra xem ngăn xếp này có trống không
  • (2) E peek () - Nhìn vào đối tượng ở đầu ngăn xếp này mà không xóa khỏi ngăn xếp
  • (3) E pop () - Loại bỏ đối tượng ở đầu ngăn xếp này và trả về đối tượng đó làm giá trị của thao tác này
  • (4) E đẩy (mục E) - đẩy một mục lên trên cùng của ngăn xếp này

Ở đây E biểu thị loại phần tử trong ngăn xếp.

Những nỗ lực của tôi như sau:

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. 

Tôi cũng không biết liệu tôi có nên tham khảo các yếu tố trong ngăn xếp không. Ví dụ: self.elements -> IsEmpty () = true

Nếu ai đó có thể giúp tôi, tôi thực sự đánh giá cao nó.

BIÊN TẬP

Một người bạn có những ý tưởng sau:

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

Nếu bạn không nhận được bất kỳ trợ giúp nào ở đây, bạn có thể thử nhóm UMLforum trên Google Groups.
Stephen C

1
Hoặc có thể trên StackOverflow :-)
Stephen C

Bạn có thể tìm thấy các mẫu OCL minh họa tại đây: www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
Axel Kemper

Câu trả lời:


1

Trước và sau điều kiện là một hợp đồng.

  • Điều kiện tiên quyết là một phần của hợp đồng mà người gọi phải đáp ứng. Nếu điều kiện tiên quyết không phải truelà hàm phải đưa ra lỗi.
  • Postcondition là một phần của hợp đồng phải được đáp ứng bởi chức năng và mô tả sự thay đổi dự kiến ​​đối với đối tượng / thế giới. Nếu postcondition không phải là trueviệc thực hiện có lỗi.

Cả trước và sau điều kiện phải là biểu thức boolean.

Hãy lấy empty?một ví dụ. Hàm này luôn có thể được gọi, vì vậy không có điều kiện tiên quyết. Và chức năng không có tác dụng phụ nên không có hậu điều kiện.

Hãy lấy popmột ví dụ khác. Nếu hàm này đưa ra một ngoại lệ trên ngăn xếp trống thì điều kiện tiên quyết là self.size > 0, mặt khác, nếu hàm trả về niltrên ngăn xếp trống thì không có điều kiện tiên quyết. Cả hai đều là lựa chọn thiết kế hợp lệ, không quen thuộc với lựa chọn của Java. Trong cả hai trường hợp, hậu điều kiện là self.size = previous.size - 1do tác dụng phụ của hợp đồng là loại bỏ một yếu tố.

Và như thế …

NB, đã sử dụng mã giả từ khi không quen thuộc với OCL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.