Java.util पैकेज में स्टैक के लिए ऑब्जेक्ट बाधा भाषा (OCL)


10

मेरे पास एक परीक्षा आ रही है और मैं पिछले पेपरों को देख रहा हूं कि मुझे क्या उम्मीद है। मैं निम्नलिखित पर थोड़ा अटका हुआ हूं और वास्तव में सराहना करूंगा यदि कोई व्यक्ति कुछ उदाहरण दे सकता है।

प्रत्येक निम्नलिखित कार्यों के लिए OCL में पूर्व शर्त और पोस्टकंडिशन लिखें (java.util पैकेज में स्टैक वर्ग में शामिल):

  • (1) बूलियन खाली () - टेस्ट यदि यह स्टैक खाली है
  • (2) ई झांकना () - इस स्टैक के शीर्ष पर स्थित वस्तु को स्टैक से हटाए बिना देखता है
  • (३) ई पॉप () - इस स्टैक के शीर्ष पर स्थित वस्तु को हटाता है और उस वस्तु को इस ऑपरेशन के मान के रूप में लौटाता है
  • (4) ई पुश (ई आइटम) - इस स्टैक के शीर्ष पर एक आइटम को धक्का देता है

यहाँ 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

अगर कोई मेरी मदद कर सकता है तो मैं वास्तव में इसकी सराहना करूंगा।

संपादित करें

एक मित्र के निम्नलिखित विचार हैं:

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

यदि आपको यहां कोई सहायता नहीं मिलती है, तो आप Google समूह पर UMLforum समूह का प्रयास कर सकते हैं।
स्टीफन सी

1
या हो सकता है StackOverflow पर :-)
स्टीफन C

आप यहाँ पर चित्रकार OCL नमूने पा सकते हैं: www-st.inf.tu-dresden.de/Lehre/WS01-02/fs/slides/fss5a-sl.pdf
एक्सल केम्पर

OCL 2.0 पर एक व्याख्यान: st.inf.tu-dresden.de/files/general/OCLByExampleLecture.pdf
Axel Kemper

जवाबों:


1

पूर्व और बाद के अनुबंध एक अनुबंध हैं।

  • Precondition कॉन्ट्रैक्ट का वह हिस्सा है जो कॉलर को मिलना चाहिए। यदि पूर्व शर्त नहीं है true, तो फ़ंक्शन को एक त्रुटि फेंकनी चाहिए।
  • पोस्टकंडिशन उस अनुबंध का हिस्सा है जिसे फ़ंक्शन द्वारा पूरा किया जाना चाहिए और ऑब्जेक्ट / दुनिया में अपेक्षित परिवर्तन का वर्णन करता है। यदि पोस्टकंडिशन trueलागू नहीं है , तो बग है।

पूर्व और पश्चात दोनों को बूलियन अभिव्यक्ति होना चाहिए।

empty?एक उदाहरण के रूप में लेते हैं । इस फ़ंक्शन को हमेशा कहा जा सकता है, इसलिए कोई पूर्व शर्त नहीं है। और फ़ंक्शन का कोई साइड इफेक्ट नहीं है इसलिए कोई पोस्टकंडिशन नहीं है।

popएक और उदाहरण के रूप में लेते हैं । यदि यह फ़ंक्शन एक खाली स्टैक पर एक अपवाद उठाता है self.size > 0तो दूसरी ओर पूर्वनिर्मिति है , यदि फ़ंक्शन nilखाली स्टैक पर लौटता है तो कोई पूर्व शर्त नहीं है। दोनों वैध डिजाइन विकल्प हैं, जावा की पसंद से परिचित नहीं हैं। या तो मामले में पोस्टकंडिशन self.size = previous.size - 1एक तत्व को हटाने के लिए संविदात्मक पक्ष प्रभाव है।

और इसी तरह …

NB, OCL से परिचित न होने के बाद से छद्म कोड का उपयोग करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.