2013-06-11 1 views
7

मैं कोड अनुबंधों पर तेज़ी से उठने की कोशिश कर रहा हूं। मुझे अवधारणा पसंद है, लेकिन व्यवहार में, मुझे अनुबंध जोड़ने का मूल्य नहीं दिखता है। कई निजी तरीकों पर आवश्यकता होती है, जिनमें से कुछ केवल एक पंक्ति या दो लंबी हैं।कोड अनुबंध - क्या पूर्व और पोस्ट की स्थितियों के लिए निजी तरीकों की जांच की जानी चाहिए?

मैं सार्वजनिक तरीकों पर बिंदु देख सकता हूं, लेकिन निजी वर्ग के तरीकों पर, यह ओवरकिल जैसा लगता है।

उत्तर

10

मुख्य कारण आप निजी तरीकों के ठेके लागू करना चाहते हैं आप स्थिर विश्लेषण का लाभ उठा रहे हैं है। आप अक्सर कोड लिखेंगे जो आपके निजी तरीकों के बारे में अंतर्निहित मान्यताओं को बनाता है (उदाहरण के लिए यह विधि कभी शून्य नहीं होती है) और स्थैतिक समर्थक इसे आपको इंगित करेंगे। फिर आप या तो अपनी सार्वजनिक विधि के शरीर में धारणा डाल सकते हैं या आप इसे निजी विधि पर अनुबंध के रूप में जोड़ सकते हैं। उत्तरार्द्ध आमतौर पर क्लीनर होता है, क्योंकि यह आपको उस निजी विधि के कई प्रयोगों के दौरान अनुबंध द्वारा निहित धारणा का पुन: उपयोग करने की अनुमति देता है।

व्यक्तिगत रूप से, मैंने कोड अनुबंधों को छोड़ दिया है जब तक कि इसे और अधिक परिपक्व होने का मौका न मिले। वाक्यविन्यास अजीब है (हमें वास्तव में विशेष रूप से गैर-शून्य मानकों के लिए एक साधारण प्रतिनिधित्व की आवश्यकता है) और आप जटिल प्रणालियों को स्थिर रूप से साबित करने की कोशिश कर रहे कई गियरेशन के माध्यम से जा सकते हैं। यह एक बहुत अच्छा विचार है, हालांकि, मुझे लगता है कि यह केवल समय का मामला है जब तक परिष्कृत स्थैतिक विश्लेषण के लिए उचित अनुबंध समर्थन को .NET (वास्तविक सीआईएल मेटाडाटा) में बेक किया जाता है, सी # में मूल भाषा समर्थन के साथ, एक अजीब विस्तार के रूप में बोल्ट किए जाने के बजाय ।

एक और तरफ यह है कि मुझे लगता है कि निजी और सार्वजनिक तरीकों सहित, ऊपर से नीचे तक छोटे आवेदनों के लिए अनुबंध लागू करने की प्रक्रिया के माध्यम से जाना बहुत मूल्यवान है। जैसे ही आप सबकुछ साबित करने की प्रक्रिया के माध्यम से काम करते हैं, यह आपको बहुत सारी अंतर्निहित धारणाओं को प्रकट करता है जो आप हर दिन इसे महसूस किए बिना भी करते हैं। आप अक्सर उन विफलताओं के मामलों को भी खोजते हैं जिन्हें आपने कभी नहीं सोचा था, क्योंकि जब आप कॉन्ट्रैक्ट डिज़ाइन करते हैं तो उन मानसिकताओं को हाइलाइट करते हैं जहां आप धारणाएं बना रहे हैं और आपको यह विचार करने के लिए प्रोत्साहित करते हैं कि आपकी धारणाओं का कभी-कभी उल्लंघन किया जा सकता है या नहीं। मेरे पास दिन-प्रतिदिन की नौकरियों पर ऐसा करने का समय निर्धारित नहीं है, लेकिन मैंने निश्चित रूप से उस अवधि से बहुत कुछ सीखा जहां मैंने कोड अनुबंधों के साथ प्रयोग किया था।

+0

धन्यवाद, यह बहुत उपयोगी है। –

1

अनुबंध आमतौर पर केवल सार्वजनिक तरीकों से पहले/बाद में चेक किए जाते हैं। निजी विधियों को केवल सार्वजनिक विधि के लिए कॉल के हिस्से के रूप में जाना जाता है, इसलिए उन्हें अलग से जांचने की आवश्यकता नहीं होती है।

http://en.wikipedia.org/wiki/Class_invariant

संबंधित मुद्दे